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 & ...
随机推荐
- Redis笔记教程
一.redis简介 1.1.1.什么是redis? REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统. 读 ...
- solr索引创建流程
solr索引创建流程: 分词组件Tokenizer 分词组件(Tokenizer)会做以下几件事情(这个过程称为:Tokenize),处理得到的结果是词汇单元(Token). 1.将文档分成一个一个单 ...
- 将一个字符串当做一个方法名或对象的key
var func = "test" // 方法 [func](){ console.log("test===>") } //调用 test() //打印 ...
- 15、python学习手册之:元组、文件及其他
1.使用文本来存储python对象时,必须使用转换工具把对象转成字符串 2.内置函数eval可以把字符串当做可执行程序代码:eg s = ‘[1,2,3]’ eval(s) -->[1, ...
- maven插件介绍之tomcat7-maven-plugin
tomcat7-maven-plugin插件的pom.xml依赖为: <dependency> <groupId>org.apache.tomcat.maven</gro ...
- amazeui学习笔记--css(常用组件3)--按钮组Button-group
amazeui学习笔记--css(常用组件3)--按钮组Button-group 一.总结 1.按钮组用法:把一系列要使用的 .am-btn 按钮放入 .am-btn-group . 2.按钮工具栏: ...
- upf1
创建supply net,两种方法 1. creat_supply_net VDD -domain PD_B 2. creat_supply_net VDD
- ldd 查看程序/动态库 的依赖
今天在帮同事查看一个问题时, 需要用到ldd, 于是就顺便看了一下ldd的实现. 好在ldd本身只是一个脚本, 而不是executable, 可以直接查看实现的代码. 根据注释: 21 # This ...
- stm32的复用与映射
摘自:https://blog.csdn.net/lincheng15/article/details/51789093 摘自:http://www.51hei.com/bbs/dpj-36242-1 ...
- ZOJ 1796 Euchre Results 数学水题
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1796 题意: 四个人玩游戏,已知三个人的输赢情况,求第四个人的输赢情况. ...