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 & ...
随机推荐
- 【习题 6-6 UVA - 12166 】Equilibrium Mobile
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 枚举一个秤砣的重量不变. 某一个秤砣的重量不变之后. 所有秤砣的重量就固定了. 因为它的兄弟节点的重量要和它一样. 则父亲节点的重量 ...
- [D3] Debug D3 v4 with Dev Tools
Since D3 outputs standard markup, you can use familiar dev tools and inspectors to debug your visual ...
- 关于js盒子模型的知识梳理
盒子模型 JS盒子模型中的13个常用属性: clientWidth/clientHeight:可视区域的宽高,宽高+PADDING组成 clientTop/clientLeft:上边框和左边框的宽度 ...
- 常用的Windows命令
常用的Windows命令 explorer-------打开资源管理器 logoff---------注销命令 shutdown-------关机命令 lusrmgr.msc----本机用户和组 se ...
- JS错误记录 - 取消事件冒泡、按钮、回车、ctrl回车提交留言
window.onload = function () { var oDiv = document.getElementById('div1'); var oBtn = document.getEle ...
- 防止 Chrome 屏蔽 非官方 扩展程序 教程(一)
说明 Google Chrome,又称 Google 浏览器,是一个由 Google(谷歌)公司开发的网页浏览器.该浏览器是基于其它开源软件所撰写.包含 WebKit,目标是提升稳定性.速度和安全性. ...
- Codeforces Round #234 (Div. 2):B. Inna and New Matrix of Candies
B. Inna and New Matrix of Candies time limit per test 1 second memory limit per test 256 megabytes i ...
- 基于bootstrap的漂亮网站后台管理界面框架汇总
基于bootstrap的漂亮网站后台管理界面框架汇总 10个最新的 Bootstrap 3 管理模板 这里分享的 10 个模板是从最新的 Bootstrap 3 管理模板集合中挑选出来的,可以帮助你用 ...
- OC学习篇之—写类别(类的扩展)
首先我们来看一下场景,如果我们现在想对一个类进行功能的扩充,我们该怎么做? 对于面向对象编程的话,首先会想到继承,但是继承有两个问题: 第一个问题:继承的前提是这个类可以被继承,因为在Java中有些类 ...
- 字符的输入和输出即:getchar和putchar
#include <stdio.h> int main(int argc, const char * argv[]) { putchar(getchar());//这种方式就是输入一个字符 ...