XML 标准诞生 20 周年:这个世界,它无处不在

可扩展标记语言(XML)于 1998 年 2 月 10 日成为 W3C 的推荐标准。昨天,2018 年 2 月 10 日恰好是 W3C 推出的 XML 标准发布 20 周年纪念日。可点此查看原始的新闻稿,以及最新的 XML 标准。
下面我们不妨看看 XML 的发展历程。
正如原来的规范文本所表述的:
可扩展标记语言(XML)是本文档中完整描述的 SGML 的一个子集。它的目标是使通用的 SGML 能够通过 HTML 现在可行的方式在 Web 上被提供、接收和处理。XML 旨在简化 SGML 和 HTML 的实现以及互操作性。
虽然 XML 最初的目标 —— 取代网络上的 HTML,并没有实现,但作为无数出版标准以及企业、电子政务和卫生保健数据交换的基础,它取得了巨大的成功。许多或甚至大部分应用程序的 XML 已经找到了自己的用途,而对于 SGML 和 XML 的原始目的 —— 编码半结构化文本,几乎没有任何相关的应用;相反,XML 在大多数时候都被用作通用结构化数据格式。
事实上,XML 从 1995 年开始就已有其雏形,并向 W3C 提案,在 1998 年二月发布为 W3C 的标准(XML 1.0)。XML 的前身是 SGML(The Standard Generalized Markup Language),是自 IBM 从 1960 年代就开始发展的 GML(Generalized Markup Language) 标准化后的名称。
GML 的重要概念:
文件中能够明确的将标示与内容分开
所有文件的标示使用方法均一致
1978 年,ANSI 将 GML 加以整理规范,发布成为 SGML,1986 年起为 ISO 所采用(ISO 8879),并且被广泛地运用在各种大型的文件计划中,但是 SGML 是一种非常严谨的文件描述法,导致过于庞大复杂(标准手册就有 500 多页),难以理解和学习,进而影响其推广与应用。
同时 W3C 也发现到 HTML 的问题:
不能解决所有解释数据的问题 —— 像是影音档或化学公式、音乐符号等其他形态的内容。
性能问题 —— 需要下载整份文件,才能开始对文件做搜索。
扩充性、弹性、易读性均不佳。
为了解决以上问题,专家们使用 SGML 精简制作,并依照 HTML 的发展经验,产生出一套使用上规则严谨,但是简单的描述数据语言:XML。
XML 就是在一个这样的背景下诞生的 —— 为了有一个更中立的方式,让消费端自行决定要如何消化、呈现从服务端所提供的信息。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE recipe PUBLIC "-//Happy-Monkey//DTD RecipeBook//EN""http://www.happy-monkey.net/recipebook/recipebook.dtd">
<recipe>
<title>Peanutbutter On A Spoon</title>
<ingredientlist>
<ingredient>Peanutbutter</ingredient>
</ingredientlist>
<preparation>Stick a spoon in a jar of peanutbutter, scoopand pull out a big glob of peanutbutter.</preparation>
</recipe>
RecipeBook 的例子,一种基于 XML 语法的烹饪技术书刊。此标签可转换为:HTML, PDF 以及富文本格式并使用编程语言或 XSL。
XML 被广泛用来作为跨平台之间交互数据的形式,主要针对数据的内容,通过不同的格式化描述手段(XSLT,CSS 等)可以完成最终的形式表达(生成对应的 HTML、PDF 或者其他的文件格式)。
XML 被设计用于传送及携带数据信息,不用来表现或展示数据,HTML 则用来表现数据,所以 XML 用途的焦点是它说明数据是什么,以及携带数据信息。
XML 由 3 个部分构成,它们分别是:文档类型定义(Document Type Definition, DTD),即 XML 的布局语言;可扩展的样式语言(Extensible Style Language, XSL),即 XML 的样式表语言;以及可扩展链接语言(Extensible Link Language, XLL)。
XML 是一种元标记语言,即定义了用于定义其他特定领域有关语义的、结构化的标记语言,它提供了一种描述结构数据的格式,简化了网络中数据交换和表示,使得代码、数据和表示分离,并作为数据交换的标准格式,因此它常被称为智能数据文档。从这方面来看,它和 JSON 都是一种数据交换格式。
除了执行 HTML 验证之外,经典标记技术(例如内容模型语法)的更有用的应用是将通用 HTML 内容模型定制为用于更具体的内容类型(例如博客文章)的语法。虽然这些技术是为 XHTML(HTML 的 XML 变体)设计的,但是在 XML 诞生 20 年之后,SGML 仍然是 HTML 中唯一能够这样做的标准化元语言。
对于 XML 的命运,我们或许不需要关心,毕竟它幕后的使用群体非常庞大,所以在很长一段时间内它都不会消失。
Happy birthday, XML!
http://www.oschina.net/news/93282/20-years-of-xml
XML的优势太明显了,支持语法智能提示和补全,支持标签扩展,支持完善的注释语法。注意哦,XML的语法智能提示和补全不是IDE提示的,是XML里的DTD提供支持的,是XML自身特性。
有人说XML解析困难,怕是他不知道xpath是啥,大多数情况下很简单。
说XML标签多余的,难道不知道XML标签支持自闭和吗,很多情况下并没多少冗余。
XML或许有些缺点,但是优点远大于缺点。
XML 标准诞生 20 周年:这个世界,它无处不在的更多相关文章
- Visual Studio 20周年,我和VS不得不说的故事(内含福利)
Visual Studio 2017正式版已如期发布(点击这里查看发布全记录)!自去年 11 月正式宣布 Visual Studio 项目之后,微软终于正式推出了“宇宙最强集成开发环境(IDE)”的最 ...
- Visual Studio 20周年,我和VS不得不说的故事
Visual Studio 2017正式版已如期发布(点击这里查看发布全记录)!自去年 11 月正式宣布 Visual Studio 项目之后,微软终于正式推出了“宇宙最强集成开发环境(IDE)”的最 ...
- .NET 诞生已20周年,您的 .NET 技能是否还停留在2010 年?
20年来,我们见证了超过上千万.NET 开发员,当前有600万.NET 开发者正在使用.NET技术构建各类解决方案.今天,IT市场对.NET 开发人员的需求达到了前所未有的程度,特别是在中国,各大公司 ...
- 首个 C++ 编译器诞生 30 周年了,来听听 C++ 之父畅谈 C++
原文 http://www.iteye.com/news/31076 C++ 之父 Bjarne Stroustrup 在 cfront 诞生 30 周年的访谈. 整整30年前,CFront 1 ...
- Jetty 9.3庆祝20周年生日快乐,并添加HTTP/2支持
本文来源于我在InfoQ中文站翻译的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/Building-Distributed-Systems 今年6月12日 ...
- 开源编解码项目FFmpeg迎来20周年生日 凭一己之力养活全球无数播放器!
近日,开源编解码库项目FFmpeg迎来20周年生日. 2000.12.20-2020.12.20 可能很多人对于FFmpeg不是特别了解,那么以下几个名字是否大家或多或少都用过呢? 暴风影音.PotP ...
- .NET 20周年软件趋势随想
从2000年微软启动.NET战略时,我还是一位大学生,当年著名的黑客Miguel de Icaza , Miguel 为了寻找GNOME项目开发框架经过充分的调研启动了一个志存高远的项目:Mono,一 ...
- Visual Studio 20周年软件趋势随想
从2002年开始,.net让开发人员能快速构建和部署应用程序,便捷的开发windows和web服务器应用,同时著名的hacker Miguel de Icaza ,Miguel 为了GNOME项目启动 ...
- xml 标准字符过滤
今天在代码里面看见一串非常奇怪的推断语句 if (c < 0x9 || c > 0x9 && c < 0xA || c > 0xA && c & ...
随机推荐
- mysql 获取自增id的值的方法
原生jdbc方式: Statement.getGeneratedKeys() 示例: Statement stmt = null; ResultSet rs = null; try { // // C ...
- ORA-16014 ORA-00312
打开alert日志发现如下错误信息 Errors in file /oracle/app/oracle/admin/hncdfhq/bdump/hncdfhq_arc0_45285882.trc: O ...
- 【Codeforces Round #432 (Div. 1) A】 Five Dimensional Points
[链接]点击打开链接 [题意] 给你n个5维的点. 然后让你以其中的某一个点作为起点a. 另选两个点b,c. 组成向量a->b,a->c 如果所有的a->b和a->c的夹角都是 ...
- COGS——C66. [HAOI2004模拟] 数列问题
http://www.cogs.pro/cogs/problem/problem.php?pid=66 ★☆ 输入文件:dfs3.in 输出文件:dfs3.out 简单对比 时间限制:1 ...
- [React] Theme your application with styled-components and "ThemeProvider"
In this styled-components lesson, we set a "primary color" within a UI "theme" o ...
- 【Java并发编程实战】-----“J.U.C”:CLH队列锁
在前面介绍的几篇博客中总是提到CLH队列,在AQS中CLH队列是维护一组线程的严格依照FIFO的队列.他可以确保无饥饿,严格的先来先服务的公平性.下图是CLH队列节点的示意图: 在CLH队列的节点QN ...
- amazeui学习笔记--css(基本样式4)--打印样式Print
amazeui学习笔记--css(基本样式3)--打印样式Print 一.总结 1.打印显示url方法: 利用 CSS3 content 属性,将 <a> 和 <abbr> 的 ...
- [React Intl] Render Content with Markup Using react-intl FormattedHTMLMessage
In this lesson, we’ll use the react-intl FormattedHTMLMessage component to display text with dynamic ...
- 使用PHP实现双向队列
使用PHP实现双向队列 一.总结 就是几个array函数 push pop shift unshift n. 移动:变化:手段:轮班 vi. 移动:转变:转换 vt. 转移:改变:替换 二.使用PHP ...
- vue中的select框的值动态绑定
<--这两种写法效果一样--> 1: <select v-model="wxStatus"> <option label="已添加" ...