【XML】
可扩展标记语言（Extensible Markup Language，简称：XML）是一种标记语言。XML是从标准通用标记语言（SGML）中简化修改出来的。它主要用到的有可扩展标记语言、可扩展样式语言（XSL）、XBRL和XPath等。
== 历史 ==
1960年代，IBM开始发展的GML（Generalized Markup Language）。
GML的重要概念：
* 文件中能够明确的将标示与内容分开
* 所有文件的标示使用方法均一致
1978年，ANSI将GML加以整理规范，发布成为SGML（The Standard Generalized Markup Language）。1986年，XML的前身起为ISO 8879，当时被广泛地运用在各种大型的文件计划中，但是SGML是一种非常严谨的文件描述法，导致过于庞大复杂，其标准手册就有500多页，这使它难以理解和学习，进而影响了推广与应用。
同时W3C也发现到HTML的问题：
* 不能解决所有解释资料的问题 - 像是影音档或化学公式、音乐符号等其他形态的内容。
* 效能问题 - 需要下载整份文件，才能开始搜寻文件中的内容。
* 扩充性、弹性、易读性均不佳。
为了解决以上问题，专家们使用SGML精简制作，并依照HTML的发展经验，产生出一套使用上规则严谨，但是简单的描述资料语言：XML。XML从1995年开始有其雏形，并向W3C（全球资讯网联盟）提案，而在1998年二月发布为W3C的标准（XML1.0）XML是在一个这样的背景下诞生的——为了有一个更中立的方式，让客户端自行决定要如何消化、呈现从服务端所提供的资讯。
XML被广泛用来作为跨平台之间交互数据的形式，主要针对数据的内容，通过不同的格式化描述手段（XSLT，CSS等）可以完成最终的形式表达（生成对应的HTML，PDF或者其他的文件格式）。
== 用途 ==
RecipeBook的例子，一种基于XML语法上的烹饪技术书刊。此标签可转换为：HTML, PDF以及Rich Text Format并使用程式语言或XSL。
XML设计是用来传送和携带数据信息，不用于表现和展示数据，HTML则用来表现数据，所以XML用途的焦点是在于说明数据是什么以及携带数据信息。
* 富文档（Rich Documents）- 自定文件描述并使其更丰富
** 属于文件为主的XML技术应用
** 标记是用来定义一份资料应该如何呈现
* 元数据（Metadata）- 描述其它文件或网络资讯
** 属于资料为主的XML技术应用
** 标记是用来说明一份资料的意义
* 配置文档（Configuration Files）- 描述软件设定的参数
== 重要术语 ==
=== 字符（characters） ===
XML 1.0规范允许的（转义后的最终解码值）合法字符： #x9（水平制表符）、#xA（回车符）、#xD（换行符）、#x20-#xD7FF、#xE000-#xFFFD、#x10000-#x10FFFF。即任何Unicode字符，不包含surrogate blocks, FFFE,  FFFF。
XML规范定义了5个"预定义实体"来表示特殊字符. XML也允许在每个文档定义任意数量的其它命名实体.
下表列出了5个XML预定义实体. 通过名字引用这些实体的格式为&name;，例如, &amp; 将绘制为&.
=== 处理器（Processor）与应用（application） ===
XML处理器（Processor，也称作XML parser）分析标记语言并传递结构化信息给应用（application）。
=== 标记（Markup）与内容（content） ===
XML文档的字符分为标记（Markup）与内容（content）两类。标记通常以开头，以>结尾；或者以字符& 开头，以;结尾。不是标记的字符就是内容。但是CDATA部分，分解符号与>是标记，二者之间的文本为内容。 最外界的空白符是标记。
=== 标签（Tag） ===
一个tag属于标记结构，以开头，以>结尾。Tag名字是大小写敏感，不能包括任何字符 !"#$%&'()*+,/;?@\^`
* start-tag，如;
* end-tag，如;
* empty-element tag，如.
=== 元素（Element） ===
元素是文档逻辑组成，或者在start-tag与匹配的end-tag之间，或者仅作为一个empty-element tag。例如：Hello, world!. 另一个例子是： .
单个根（root）元素包含所有的其他元素。
=== 属性（Attribute） ===
属性是一种标记结构，在start-tag或empty-element tag内部的“名字-值对”。例如：。每个元素中，一个属性最多出现一次，一个属性只能有一个值。
如果属性有多个值，这需要采取XML协议以外的方式来表示，如采用逗号或分号间隔，对于CSS类或标识符的名字可用空格来分隔。
=== XML 声明（declaration） ===
XML文档如果以XML declaration开始，则表述了文档的一些信息。如.
== 例 ==
XML定义结构、存储信息、传送信息。下例为小张发送给大元的便条，存储为XML。
大元
小张
问候
早啊，饭吃了没？
这XML文档仅是纯粹的信息标签，这些标签意义的展开依赖于应用它的程序。
=== 结构 ===
每个XML文档都由XML声明开始，在上面的代码中的第一行就是XML声明，。这一行代码会告诉解析器或浏览器，这个文件应该按照XML规则进行解析。
但是，根元素到底叫还是，则是由文档类型定义（DTD）或XML纲要（XML Schema）定义的。如果DTD规定根元素必须叫，那么若写作就不符合要求。这种不符合DTD或XML纲要的要求的XML文档，被称作不合法的XML，反之则是合法的XML。
XML文件的第二行并不一定要包含文档元素；如果有注释或者其他内容，文档元素可以迟些出现。
最常见的PI（processing instruction,像XML序言, 却是不同类型的语法）是用来指定XML文件的样式表, 这个PI一般会直接放在XML序言之后，通常由Web浏览器使用，来将XML数据以特殊的样式显示出来。
XML的结构有一个缺陷，那就是不支持分帧（framing）。当多条XML消息在TCP上传输的时候，无法基于XML协议来确定一条XML消息是否已经结束。
== 参考文献 ==
== 延伸阅读 ==
* Annex A of ISO 8879:1986 (SGML)
* year=2005
* dead-url=no
* archive-url=https://archive.today/20130102101245/http://www.developer.com/xml/article.php/10929_3583081_1
* cite web|url=http://www.oreillynet.com/xml/blog/2003/02/five_years_later_xml.html|title=Five years later, XML..|last=St. Laurent|first=Simon|date=2003-02-12|work=O'Reilly XML Blog|publisher=O'Reilly Media|accessdate=2010-10-26|archive-date=2013-12-03|archive-url=https://web.archive.org/web/20131203032545/http://www.oreillynet.com/xml/blog/2003/02/five_years_later_xml.html
* cite web|url=http://www.w3.org/2008/02/xml10-pressrelease|title=W3C XML is Ten!|date=2008-02-12|publisher=World Wide Web Consortium|accessdate=2010-10-26|archive-date=2022-02-12|archive-url=https://web.archive.org/web/20220212215424/https://www.w3.org/2008/02/xml10-pressrelease
* cite web |url=http://wam.inrialpes.fr/courses/PG-MoSIG12/xml.pdf |title=Introduction to XML |date=October 2012 |work=Course Slides |publisher=Pierre Geneves |archiveurl=https://web.archive.org/web/20151016053704/http://wam.inrialpes.fr/courses/PG-MoSIG12/xml.pdf |archivedate=2015-10-16 |df= |accessdate=2018-01-19 |dead-url=no