XML

可扩展标记语言（Extensible Markup Language，简称：XML）是一种标记语言和用于存储、传输和重构松散数据的文件格式。它定义了一系列编码文档的规则以使其在人类可读的同时机器可读。万维网联盟于1998年发布的 XML 1.0 规范和其他相关开源标准共同定义了 XML。
XML 的设计目标是注重简洁、通用和因特网可用性。它是一种通过 Unicode 编码实现对多种语言有强大支持的文本数据格式。尽管 XML 的设计重心在于文档，它被广泛应用于网络服务中松散数据结构的表示。

**总览**
XML 的主要目的是序列化（如存储、传输和重构松散数据）。对于两个需要传输信息的不同系统，它们也需要在文件格式上达成一致。XML 规范了这个流程，因此其类似于用于表示信息的通用语言。
作为一个标记语言，XML 标记，分类和在结构方面组织数据。XML 标签代表结构且包含元数据，标签内是照 XML 标准编码的数据。一个附加的 XML 结构（XSD）定义了用于解释和验证 XML 的必要的元数据（这也被称为结构典范）。一个符合 XML 基本语法的文档是“结构良好”的（well-formed），一个符合其附加结构的是“有效”（valid）的。
互联网工程任务组的 RFC 7303（取代了旧的 RFC 3023）提供了用于构造 XML 中媒体类型的规则。它定义了三种媒体类型：
application/xml                             (text/xml是一个别名)
application/xml-external-parsed-entity      (text/xml-external-parsed-entity是一个别名)
application/xml-dtd
它们被用于在不暴露内容的同时传输未经处理的 XML 文件。RFC 7303 还建议基于 XML 的语言的媒体类型应以 +xml 结尾（如 SVG 的 image/svg+xml）。
对于 XML 在网络中的进一步使用指南于 RFC 3470 （也被称为 IETF BCP 70，包含设计部署基于 XML 的语言的各个方面）提出。

**应用**
SVG代码示例
XML 在互联网信息交换中已经被广泛应用。数以百计使用 XML 语法的文档格式（包括 RSS、Atom、Office Open XML、OpenDocument、SVG、COLLADA 和 XHTML）被开发出来。XML 还为多种通信协议（如 SOAP 和 XMPP）提供了基础语言。它还是AJAX使用的信息交换格式之一。
许多工业数据标准，如Health Level 7、OpenTravel Alliance、FpML、MISMO和National Information Exchange Model，基于 XML 和 XML 附加结构丰富的特性。在出版领域，Darwin Information Typing Architecture 是一个 XML 行业数据标准。XML 被广泛应用与支持各种出版格式。

**关键术语**
该部分内容基于 XML 规范。注意这并不是一个详尽的列出所有结构的列表，而是提供 XML 中常见组成的介绍。

**字符（ Character ）**
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）。
XML 规范规定了处理器要做什幺不能做什幺，但是应用并不在其讨论范围内。规范称之为处理器的东西一般被通俗的称为 XML 解析器。

**标记（ Markup ）与内容（ Content ）**
XML文档的字符分为标记（Markup）与内容（content）两类。可由简单的语法判断出来：标记通常以开头，以>结尾；或者以字符& 开头，以;结尾。不是标记的字符就是内容。但是CDATA部分，分解符号与>是标记，二者之间的文本为内容。 最外界的空白符是标记。

**标签（ Tag ）**
一个tag属于标记结构，以开头，以>结尾。Tag名字是大小写敏感，不能包括任何字符 !"#$%&'()*+,/;?@\^`
所有有效的 Unicode 字符都可以用数字字符引用表示。 例如汉字“中”，其在 Unicode 中的数字代码是十六进制 4E2D，即十进制 20,013。 如果用户无法输入该字符，则仍然可以通过 &#20013; 或&#x4e2d; 代表“中”这个字符。 类似地，字符串“I I &lt;3 J&#xF6;rg。
&#0; 是不允许的，因为即使使用数字字符引用，空字符也是 XML 排除的控制字符之一。需要使用 Base64 等替代编码机制来表示此类字符。

**注释**
注释可以在文档内标记外的、XML声明之后的任何地方出现，始于  。为了兼容SGML，注释内不得出现"--"，这意味着注释不能嵌套。& 符号在注释中没有特殊意义，因此实体和字符引用不会被识别，自然无法表示文档编码字符集之外的字符。

**国际化**
XML 1.0（第五版）和 XML 1.1 支持在元素名称、属性、注释、字符数据和处理指令中直接使用几乎任何 Unicode 字符（除了在 XML 中具有特殊符号含义的字符，例如小于符号“
дані

**句法修正和错误处理**
XML 规范中将符合语法规范的 XML 文档定义为格式良好的文档。规范中的语法规范中的关键点包括：- 该文档仅包含正确编码的合法 Unicode 字符- 除非执行标记描述的作用，否则不应出现任何特殊语法字符（例如 ?@\^`- 仅存在一个根元素- 单个根元素包含所有其他元素。
XML 文档的定义排除了那些违反了良构性规则的文本；这些文本根本不是 XML。遇到这种违反规则的情况时，XML 处理器需要报告这些错误并停止正常处理。这种政策，偶尔被称为“严格错误处理”，与处理 HTML 的程序的行为形成了明显对比，因为这些程序在存在严重标记错误的情况下，仍然能够产生合理的结果。这一方面的政策被批评为违反了 Postel 法则（“对发送的内容要保守，对接受的内容要宽容”）。
XML 规范将一个有效的 XML 文档定义为一个既符合良构性规则，又遵循文档类型定义（DTD）规则的 XML 文档。

**例**
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 

**外部链接**
  XML及SGML名词英汉翻译表 

**参见**
 XHTML- DTD- XML Schema- XLink- SVG- XSLT- X3D- HTML- CSS- RDF- RSS- Unicode- MXML