XML
可扩展标记语言 | |
缩写 | XML |
---|---|
地位 | 发布, W3C建议 |
年开始 | 1996 |
首次出版 | 1998年2月10日 |
最新版本 | 1.1(第二版) 2006年9月29日 |
组织 | 万维网联盟(W3C) |
编辑 | 蒂姆·布雷(Tim Bray ),让·保利( Jean Paoli),迈克尔·斯佩伯格·麦奎恩 |
基本标准 | SGML |
相关标准 | W3C XML模式 |
领域 | 序列化 |
网站 | www.w3.org/xml |
文件名扩展名 | .xml |
---|---|
互联网媒体类型 | application/xml ,text/xml |
统一类型标识符(UTI) | public.xml |
UTI构象 | public.text |
魔术数字 | <?xml |
由开发 | 万维网联盟 |
格式的类型 | 标记语言 |
从 | SGML |
扩展到 | 包括XHTML , RSS , Atom和KML在内的许多语言 |
标准 | |
打开格式? | 是的 |
免费格式? | 是的 |
可扩展的标记语言( XML )是一种标记语言和文件格式,用于存储,传输和重建任意数据。它定义了一组以人类可读且可读的格式编码文档的规则。全球Web财团的XML 1.0规范1998年和其他几个相关规范(所有这些规格)(所有这些规格)定义了XML。
XML的设计目标强调了整个Internet的简单性,一般性和可用性。这是一种文本数据格式,可以通过Unicode对不同人类语言进行强有力的支持。尽管XML的设计集中在文档上,但该语言被广泛用于代表任意数据结构(例如Web服务中使用的数据结构)。
存在几个架构系统来帮助基于XML的语言的定义,而程序员已经开发了许多应用程序编程接口(API)来帮助处理XML数据。
概述
XML的主要目的是序列化,即存储,传输和重建任意数据。要使两个不同的系统交换信息,他们需要就文件格式达成共识。 XML标准化此过程。因此,它类似于表示信息的通用语言。
作为标记语言,XML标签,分类并在结构上组织信息。 XML标签代表数据结构并包含元数据。标签中的内容是数据,按照XML标准指定的方式进行编码。另一个XML模式(XSD)定义了用于解释和验证XML的必要元数据。 (这也称为规范模式。)遵守基本XML规则的XML文档是“良好的”;遵守其模式的一种是“有效的”。
IETF RFC 7303 (取代较旧的RFC 3023 )提供了用于构建媒体类型的规则,以便在XML消息中使用。它定义了三种媒体类型:application/xml
(text/xml
是一个别名),application/xml-external-parsed-entity
(text/xml-external-parsed-entity
是一个别名)和application/xml-dtd
。它们用于传输RAW XML文件,而无需公开其内部语义。 RFC 7303进一步建议将基于XML的语言授予以结尾的媒体类型+xml
, 例如,image/svg+xml
对于SVG 。
在网络上下文中使用XML的进一步指南出现在RFC 3470 (也称为IETF BCP 70)中,该文档涵盖了设计和部署基于XML的语言的许多方面。
申请
XML通用用于通过Internet的数据互换。已经开发了数百种使用XML语法的文档格式,包括RSS , Atom , Office Open XML , Opentocument , SVG , Collada和XHTML 。 XML还为SOAP和XMPP等通信协议提供了基本语言。它是异步JavaScript和XML(AJAX)编程技术中使用的消息交换格式之一。
许多行业数据标准,例如Health Level 7 , Opentravel Alliance , FPML , MISMO和国家信息交换模型,都是基于XML和XML模式规范的丰富功能。在发布中,达尔文信息键入体系结构是XML行业数据标准。 XML广泛用于支持各种发布格式。
关键术语
本节中的材料基于XML规范。这并不是详细的列表,即XML中出现的所有构造;它提供了对日常使用中最常遇到的关键结构的介绍。
- 标记和内容
- 构成XML文档的字符分为标记和内容,可以通过应用简单的句法规则来区分。通常,构成标记的字符串要幺以角色开头
<
并以>
,或者他们从角色开始&
并以;
。未标记的字符字符串是满足的。但是,在CDATA部分中,分界符<![CDATA[
和]]>
被归类为标记,而它们之间的文本被归类为内容。另外,将最外部元素之前和之后的空格归类为标记。
- 标签
- 标签是一个从头开始的标记结构
<
并以>
。有三种类型的标签:- 开始标签,例如
<section>
; - 末端标签,例如
</section>
; - 空元素标签,例如
<line-break />
.
- 开始标签,例如
- 元素
- 元素是一个逻辑文档组件,要幺以启动标签开头,并以匹配的端盖结尾,要幺仅由一个空元素标签组成。启动标签和端标签(如果有)之间的字符是该元素的内容,并且可能包含标记,包括其他元素,称为子元素。一个例子是
<greeting>Hello, world!</greeting>
。另一个是<line-break />
.
- 属性
- 属性是一个标记构造,该标记结构由启动标签或空元素标签中的名称值对组成。一个例子是
<img src="madonna.jpg" alt="Madonna" />
,属性的名称为“ SRC”和“ Alt”,其价值分别为“ Madonna.jpg”和“ Madonna”。另一个例子是<step number="3">Connect A to B.</step>
,其中属性的名称为“数字”,其值为“ 3”。 XML属性只能具有一个值,每个属性最多可以在每个元素上出现。在需要多个值列表的常见情况下,必须通过将列表编码为XML定义自身的某种格式来编码列表中的XML属性。通常,这要幺是逗号或半彩色划界列表,要幺是已知不包含空格的单个值,可以使用空间限制的列表。<div class="inner greeting-box">Welcome!</div>
,其中属性“类”既具有“ Inner engreing-box”的值,并且还表示两个CSS类名称“ Inner”和“ engreing-box”。
- XML声明
- XML文档可以从XML声明开始,该声明描述了有关自己的一些信息。一个例子是
<?xml version="1.0" encoding="UTF-8"?>
.
角色和逃脱
XML文档完全由Unicode曲目中的字符组成。除了少数专门排除的控制字符外,Unicode定义的任何字符都可能出现在XML文档的内容中。
XML包括用于识别构成文档的Unicode字符的编码的功能,以及表达由于某种原因或另一个原因无法直接使用的字符。
有效字符
XML 1.0文档中的Unicode代码点有效:
- u+0009(水平标签),u+000a(线馈电),u+000D(托架返回):这些是XML 1.0中唯一接受的C0控件;
- U+0020 – U+D7FF,U+E000 – U+FFFD:这不包括BMP中的某些非特征(所有替代物,U+FFFE和U+FFFF被禁止);
- U+10000 – U+10FFFF:这包括补充平面(包括非特征)中的所有代码点。
XML 1.1扩展了允许字符的集合,其中包括上述所有内容,以及u+0001 – U+001F范围内的其余字符。但是,同时,它限制了除U+0009(水平tab)以外的C0和C1控制字符的使用)要求它们以逃脱的形式编写(例如,U+0001必须写为
或等效)。对于C1字符,此限制是向后不相容的。引入了它允许检测到常见的编码错误。
代码点U+0000 (NULL)是任何XML 1.1文档中唯一不允许的字符。
编码检测
Unicode字符集可以以各种不同的方式(称为“编码”)编码为存储或传输的字节。 Unicode本身定义了涵盖整个曲目的编码;众所周知的包括UTF-8 (XML标准建议使用,无BOM )和UTF-16 。还有许多其他文本编码早于Unicode,例如ASCII和各种ISO/IEC 8859 ;他们的字符库是Unicode字符集的所有情况下的子集。
XML允许使用任何一个Unicode定义的编码和字符也出现在Unicode中的任何其他编码。 XML还提供了一种机制,XML处理器可以在没有任何先验知识的情况下可靠地确定正在使用哪种编码。除UTF-8和UTF-16以外的其他编码不一定被每个XML解析器所识别(在某些情况下甚至不是UTF-16,即使标准要求它也被识别)。
逃脱
XML提供了逃生设施,以包括有问题直接包含的字符。例如:
- 字符“ <”和“&”是关键语法标记,可能永远不会出现在CDATA部分之外的内容中。允许但不建议在XML实体值中使用“ <”。
- 一些字符编码仅支持Unicode的一个子集。例如,在ASCII中编码XML文档是合法的,但是ASCII缺少Unicode字符(例如“é”)的代码点。
- 可能无法在作者的计算机上输入字符。
- 有些字符的字形无法在视觉上与其他字符区分开,例如非破坏空间(
 
)”和空间( 
)”,以及西里尔大写字母A (А
)“”和拉丁大写字母A (A
) “A”。
有五个预定义的实体:
<
代表“ <”;>
代表“>”;&
代表 ”&”;'
代表 ” ' ”;"
代表 ' ” '。
所有允许的Unicode字符都可以用数字字符参考表示。考虑中文字符“中”,其在Unicode中的数字代码为十六进制4E2D或DECIMAL 20,013。键盘没有提供输入此字符的用户仍然可以将其插入被编码为XML文档中中
或者中
。同样,字符串“ i <3jörg”可以被编码以包含在XML文档中I <3 Jörg
.
�
由于使用数字字符引用,即使零字符是从XML中排除的控制字符之一,因此不允许使用。需要一种替代编码机制(例如base64)来代表此类字符。
评论
评论可能会出现在其他标记之外的文档中的任何地方。评论在XML声明之前不能出现。评论开始<!--
并以-->
。为了与SGML兼容,不允许在注释中使用字符串“ - ”(Double-Hyphen);这意味着评论不能嵌套。评论中没有特殊意义,因此实体和字符引用尚未得到认可,也无法表示文档编码字符集之外的字符。
有效评论的一个示例:<!--no need to escape <code> & such in comments-->
国际用途
XML 1.0(第五版)和XML 1.1在元素名称,属性,注释,角色数据和处理指令中几乎直接使用任何Unicode字符(除了在XML本身中具有特殊符号含义的指令,例如较小的含义- 比迹象,“ <”)。以下是一个良好的XML文档,包括中文,亚美尼亚和西里尔字符:
<?xml version="1.0" encoding="UTF-8"?>
<俄语 լեզու="ռուսերեն">дані</俄语>
句法正确性和错误处理
XML规范将XML文档定义为形成良好的文本,这意味着它满足规范中提供的语法规则列表。相当冗长的列表中的一些要点包括:
- 该文档仅包含正确编码的法律Unicode字符。
- 没有一个特殊的语法字符,例如
<
和&
出现在执行其标记限制角色时出现。 - 划界元素正确嵌套的启动标签,端标和空元素标签,没有丢失,也没有重叠。
- 标签名称对案例敏感;起始标签和端标签必须完全匹配。
- 标签名称不能包含任何字符!“#$%&'()*+,/; <=>?@[\]^`{|}〜,也不是空间字符,不能以“ - ”,“”,“ ”, “。”或数字数字。
- 一个根元素包含所有其他元素。
XML文档的定义不包括包含违反形式规则的文本;他们根本不是XML。遇到这种违规行为的XML处理器需要报告此类错误并停止正常处理。这项政策有时被称为“严厉的错误处理”,与处理HTML的程序的行为形成了鲜明的对比,即使存在严重的标记错误,也旨在产生合理的结果。 XML在这一领域的政策被批评为违反Postel的法律(“您要发送的内容保守;在接受的东西上要自由”)。
XML规范将有效的XML文档定义为形成良好的XML文档,该文档也符合文档类型定义(DTD)的规则。
模式和验证
除了形成良好之外,XML文档可能是有效的。这意味着它包含对文档类型定义(DTD)的引用,并且其元素和属性在该DTD中声明,并遵循DTD指定的语法规则。
XML处理器被归类为验证或非验证,具体取决于他们是否检查XML文档是否有效性。发现有效性错误的处理器必须能够报告,但可能会继续正常处理。
DTD是模式或语法的一个例子。自XML 1.0的首次出版以来,XML的架构语言领域进行了大量工作。这样的架构语言通常会限制文档中可以使用的元素集,这些元素可以应用于它们,可能出现的顺序以及允许的父/子女关系。
文档类型定义
XML最古老的模式语言是从SGML继承的文档类型定义(DTD)。
DTD具有以下好处:
- DTD支持无处不在,因为它包含在XML 1.0标准中。
- 与基于元素的架构语言相比,DTD是简短的,因此在单个屏幕中提供了更多信息。
- DTD允许声明发布字符的标准公共实体集。
- DTD定义了名称空间使用的文档类型,而不是使用单个集合中的文档的所有约束。
DTD具有以下限制:
- 他们没有明确的支持XML的新功能,最重要的是名称空间。
- 他们缺乏表现力。 XML DTD比SGML DTD简单,并且某些结构无法用常规语法表示。 DTD仅支持基本数据类型。
- 他们缺乏可读性。 DTD设计师通常会大量使用参数实体(基本上用作文本宏),这使定义复杂的语法更容易,但以牺牲清晰度为代价。
- 他们使用基于从SGML继承的正则表达语法的语法来描述模式。典型的XML API(例如SAX)不会尝试提供应用程序的结构化表示,因此程序员的访问量不及基于元素的语法。
将DTD与其他架构类型区分开的两个特殊功能是句法支持XML文档中的DTD和定义实体,它们是XML处理器在DTD本身和XML文档中插入的文本或标记的任意片段的句法支持。被引用,例如角色逃脱。
由于其无处不在,DTD技术仍在许多应用中使用。
模式
W3C描述为DTD的继任者的一种较新的架构语言是XML模式,通常由XML模式实例XSD(XML Schema定义)的初始主义提及。 XSD在描述XML语言时比DTD强大得多。他们使用丰富的数据分类系统,并允许对XML文档的逻辑结构进行更详细的约束。 XSD还使用基于XML的格式,这使得可以使用普通的XML工具来帮助处理它们。
XS:定义架构的模式元素:
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>
放松NG
放松NG (XML下一代的常规语言)最初是由OASIS指定的,现在已成为标准(第2部分:基于Grammar的常规验证ISO/IEC 19757 - DSDL )。松弛NG模式可以用基于XML的语法或更紧凑的非XML语法写入;这两个语法是同构和詹姆斯·克拉克(James Clark )的转换工具 - trang - 可以在它们之间转换而不会丢失信息。 Halive NG比XML模式具有更简单的定义和验证框架,使其更易于使用和实现。它还具有使用数据类型框架插件的能力;例如,放松的NG模式作者可以在XML文档中需要值,以符合XML模式数据类型中的定义。
图型
示意图是一种关于XML文档中存在或不存在模式的主张的语言。它通常使用XPATH表达式。示意图现在已成为标准(第3部分:基于规则的ISO/IEC 19757 - DSDL )。
DSDL和其他模式语言
DSDL (文档架构定义语言)是多部分ISO/IEC标准(ISO/IEC 19757),它汇集了一组全面的小架构语言,每种语言都针对特定问题。 DSDL包括放松ng完整和紧凑的语法,示意图断言语言和用于定义数据类型的语言,字符曲目约束,重命名和实体扩展以及基于命名的文档片段路由到不同验证者的路由。 DSDL模式语言尚未提供XML模式的供应商支持,在某种程度上,工业出版商对缺乏XML图案出版的实用性的基层反应。
一些模式语言不仅描述了特定XML格式的结构,而且还提供了有限的设施来影响符合此格式的单个XML文件的处理。 DTD和XSD都具有这种能力。例如,它们可以提供Infoset扩展功能和属性默认设置。放松NG和示意图故意不提供这些。
相关规格
在XML 1.0首次出版后不久,已经开发了与XML密切相关的一系列规格。通常,“ XML”一词用于将XML与一种或多种其他技术一起被视为XML核心的一部分。
- XML名称空间使同一文档可以包含从不同词汇量中获取的XML元素和属性,而不会发生任何命名碰撞。尽管XML名称空间不是XML规范本身的一部分,但实际上所有XML软件也支持XML名称空间。
- XML基础定义
xml:base
属性,可用于设置单个XML元素范围内相对URI引用的基础。 - XML信息集或XML Infoset是信息项的XML文档的抽像数据模型。 Infoset通常用于XML语言的规范中,以方便描述XML构造这些语言允许的约束。
- XSL (可扩展样式表语言)是一种用于转换和渲染XML文档的语言家族,分为三个部分:
- XSLT (XSL变换),一种用于将XML文档转换为其他XML文档或其他格式的XML语言,例如HTML,纯文本或XSL-FO。 XSLT与XPATH非常紧密,它用于解决输入XML文档的组件,主要是元素和属性。
- XSL-FO (XSL格式化对象),一种用于渲染XML文档的XML语言,通常用于生成PDF。
- XPATH (XML PATH语言),一种用于解决XML文档的组件(元素,属性等)的非XML语言。 XPATH广泛用于其他Core-XML规格和编程库中,用于访问XML编码的数据。
- XQUERY (XML查询)是一种XML查询语言,它强烈植根于XPATH和XML模式。它提供了访问,操纵和返回XML的方法,并主要被视为XML数据库的查询语言。
- XML签名定义了在XML内容上创建数字签名的语法和处理规则。
- XML加密定义了加密XML内容的语法和处理规则。
- XML模型(第11部分: ISO/IEC 19757 - DSDL )定义了将任何XML文档与上述任何架构类型相关联的方法。
被认为是“ XML核心”一部分的其他一些规格未能找到广泛的采用,包括Xinclude , Xlink和Xpointer 。
编程接口
XML的设计目标包括:“编写处理XML文档的程序很容易。”尽管如此,XML规范几乎没有关于程序员如何进行此类处理的信息。 XML Infoset规范提供了词汇量,可以参考XML文档中的构造,但没有提供有关如何访问此信息的任何指导。已经开发和使用了用于访问XML的各种API ,有些已标准化。
现有用于XML处理的API倾向于属于这些类别:
- 可以从编程语言(例如萨克斯和Stax)访问的面向流的API。
- 从编程语言(例如DOM)访问的Tree-Tra-Traversal API。
- XML数据绑定,它在XML文档和编程语言对象之间提供了自动翻译。
- 声明性转换语言,例如XSLT和Xquery 。
- 通用编程语言的语法扩展,例如Linq和Scala 。
面向流的设施需要更少的内存,对于基于XML文档的线性遍历的某些任务,比其他替代方案更快,更简单。树 - 传播和数据结合的API通常需要使用更多的内存,但通常会发现程序员使用更方便。其中一些包括通过使用XPath表达式来宣告文档组件。
XSLT设计用于XML文档转换的声明性描述,并在服务器端软件包和Web浏览器中广泛实现。 Xquery在其功能中重叠XSLT,但设计更多用于搜索大型XML数据库。
XML的简单API
XML(SAX)的简单API是一种词汇驱动的API,其中串行读取文档,并将其内容报告为对用户设计处理程序对象的各种方法的回调。 SAX可以快速而有效地实施,但很难从XML中随机提取信息,因为它倾向于负担应用程序作者的负担,以跟踪正在处理文档的哪些部分。无论文档中的何处,都可以更适合在某些类型的信息中始终以相同方式处理的情况。
拉解析
拉解析将文档视为使用迭代器设计模式按顺序读取的一系列项目。这允许编写递归血统解析器,其中执行解析的代码结构反映了解析的XML的结构,并且可以使用中间解析结果并作为执行解析功能的局部变量访问并访问(作为函数参数)中的较低函数,或返回(作为函数返回值)到更高级别的函数。拉动解析器的示例包括data :: edit :: edit :: xml,in perl , java编程语言中的stax ,xmlpullparser, smalltalk中的xmlpullparser, php中的xmlReader,elementTree.iterpare, python , system.xml.xml .xml.xml.xml.xmlReader 。 Traversal API(节点和树漫步者)。
拉解析器会创建一个迭代器,该迭代器在XML文档中依次访问各种元素,属性和数据。使用此迭代器的代码可以测试当前项目(例如,告诉它是启动标签还是末端标签或文本),并检查其属性(本地名称,名称,XML属性值,XML属性的值,值文本等),还可以将迭代器移至下一个项目。因此,该代码可以从文档中提取信息。递归的方法倾向于将数据保留为进行解析的代码中的键入本地变量,例如,萨克斯通常需要一个解析器来手动将中间数据手动维护在一堆元素中,这些元素是元素的元素元素的元素被解析。与萨克斯解析代码相比,拉动式代码可以更加直接地理解和维护。
文档对像模型
文档对像模型(DOM)是一个API,它允许整个文档导航,就好像它是代表文档内容的节点对象树一样。 DOM文档可以由解析器创建,也可以由用户手动生成(具有限制)。 DOM节点中的数据类型是抽象的;实现提供了自己的编程特定绑定。 DOM实现往往是内存密集型的,因为它们通常要求将整个文档加载到内存中,并在允许访问访问之前作为对象树构造。
数据绑定
XML数据绑定是一种用于简化需要使用XML文档的应用程序开发的技术。它涉及将XML文档映射到强键入对象的层次结构,而不是使用DOM解析器创建的通用对象。最终的代码通常更易于阅读和维护,并且可以帮助您在编译时而不是运行时确定问题。 XML数据绑定特别适合在撰写应用程序时已知和修复文档结构的应用程序。通过创建XML数据的强烈键入表示形式,开发人员可以利用现代集成的开发环境(IDE),这些环境(IDE)提供了自动完成,代码重构和代码突出显示诸如诸如诸如诸如自动完成的功能。这可以使编写正确有效的代码更容易,并降低错误和错误的风险。示例数据结合系统包括用于XML绑定(JAXB)的Java架构, .NET框架中的XML序列化和GSOAP中的XML序列化。
XML作为数据类型
XML以其他语言为一流的数据类型。 XML (E4X)扩展到eCmascript /JavaScript语言的eCMAScript明确定义了两个特定对象(XML和XMLLIST)的JavaScript,该对象支持XML文档节点和XML节点列表作为不同的对象,并使用dot-notation dot-notation指定父母的关系。 。 Mozilla 2.5+浏览器(尽管现在已弃用)和Adobe ActionScript支持E4X,但尚未被广泛采用。 Microsoft .NET 3.5及以上以及Scala (使用Java VM)的Microsoft的LINQ实现中使用了类似的符号。开源XMLSH应用程序提供了具有用于XML操纵的特殊功能的Linux样外壳,同样使用<[]> note法也将XML视为数据类型。资源描述框架定义了数据类型rdf:XMLLiteral
固定包裹的规范XML 。 Facebook已经对PHP和JavaScript语言产生了扩展,这些语言分别以类似的方式将XML添加到核心语法中,分别是XHP和JSX 。
历史
早期的数字媒体发行商在互联网兴起之前就了解了SGML用于动态信息显示的多功能性。到1990年代中期,一些SGML的从业者已经获得了当时新的万维网的经验,并认为SGML为网络随着它的增长而可能面临的一些问题提供了解决方案。丹·康诺利(Dan Connolly)在1995年加入工作人员时,将SGML添加到了W3C的活动列表中;工作始于1996年中,当时Sun Microsystems工程师Jon Bosak开发了宪章和招募合作者。 Bosak在SGML和Web经验丰富的小社区中保持着良好的联系。
XML由一个由11名成员组成的工作组编写,并由一个(大致)150名成员的兴趣组支持。技术辩论是在兴趣组邮寄列表上进行的,并且通过共识解决问题,或者,当失败的工作组多数票时。 1997年12月4日,迈克尔·斯佩伯格·麦奎因(Michael Sperberg-McQueen)编写了设计决策及其理由的记录。詹姆斯·克拉克(James Clark<empty />
语法和名称“ xml”。提出考虑的其他名称包括“岩浆”(通用标记应用程序的最小架构),“ Slim”(Internet标记的结构化语言)和“ MGML”(最小的广义标记语言)。该规范的共同编辑最初是蒂姆·布雷(Tim Bray)和迈克尔·斯佩伯格·麦奎恩(Michael Sperberg-McQueen) 。在该项目中,布雷接受了与Netscape的咨询参与,从而引起了微软的挑衅抗议。布雷被要求暂时辞职。这导致了工作组的激烈争议,最终通过任命微软的让·保利( Jean Paoli)为第三名共同编辑来解决。
XML工作组主要通过电子邮件和每周电视会议进行沟通。在1996年8月至11月之间,在XML规范的第一份工作草案中发布了一大批剧烈的工作中,做出了重大的设计决定。进一步的设计工作一直持续到1997年,XML 1.0于1998年2月10日成为W3C建议。
来源
XML是ISO标准SGML的配置文件,大多数XML来自SGML不变。从SGML出发是逻辑和物理结构(元素和实体)的分离,基于语法的验证(DTD)的可用性,数据和元数据的分离(元素和属性),混合内容,处理与表示(处理)的分离(处理)说明)和默认角度括号语法。 SGML声明被删除;因此,XML具有固定的定界符集,并采用Unicode作为文档字符集。
XML的其他技术来源是TEI (文本编码计划),该技术定义了SGML的配置文件,以用作“传输语法”和HTML 。 ERC(有关东亚文档的标准化项目)的ERC(扩展参考混凝土语法)项目的ISO相关中国/日本/韩国/韩国文件处理专家小组是XML 1.0的命名规则的基础;扩展还引入了十六进制的数字字符引用和引用的概念以使所有Unicode字符提供。为了支持ERC,XML和HTML更好,SGML标准为8879,并在1996年和1998年通过WebSGML改编进行了修订。
XML中新颖的讨论中提出的想法包括用于编码检测的算法和编码标头,处理指令目标,XML:空间属性和空为空元素标签的新的关闭定界符。与有效性相比(无模式的解析)的概念首先在XML中正式化,尽管它已在电子书籍技术“ Dynatext”软件中成功实施;滑铁卢大学新牛津英语词典项目的软件;东京Uniscope的RISP LISP SGML文本处理器;美国陆军导弹司令部超文本系统;导师图形上下文; Interleaf和Xerox发布系统。
版本
1.0和1.1
第一个(XML 1.0)最初是在1998年定义的。从那时起,它已经进行了次要修订,而无需获得新版本编号,目前处于第五版,如2008年11月26日发布。建议一般使用。
第二本(XML 1.1)最初于2004年2月4日(与XML 1.0第三版)发布,目前是第二版,如2006年8月16日发布。它包含了打算的功能(一些有争议的)在某些情况下使XML更易于使用。主要的更改是启用在EBCDIC平台上使用的线路结束字符,以及Unicode 3.2中缺少的脚本和字符的使用。 XML 1.1的实现不是很好,建议仅由需要其特定功能的人使用。
在其第五版发行版之前,XML 1.0与XML 1.1不同,在对字符的要求更严格的要求中,可用于元素和属性名称和唯一标识符:在XML 1.0的前四个版本中,该字符专门使用特定版本使用特定版本Unicode标准(Unicode 2.0至Unicode 3.2。)第五版替换了XML 1.1的机制,这是更宽敞的未来,但可降低冗余。在XML 1.0的第五版中采用的方法和XML 1.1的所有版本中都采用了只有某些字符的名称,并且其他所有内容都可以在将来的Unicode版本中容纳合适的名称字符。在第五版中,XML名称可能包含巴厘岛, CHAM或Phoenician脚本中的字符,以及自Unicode 3.2以来添加到Unicode中的许多其他字符。
即使在Unicode的当前版本中未定义与代码点相对应的字符,几乎所有Unicode代码点都可以在XML 1.0/1.1文档的字符数据和属性值中使用。在字符数据和属性值中,XML 1.1允许使用比XML 1.0更多的控制字符,但是,对于“稳健性”,XML 1.1中介绍的大多数控制字符必须表示为数字字符引用(以及#x7f通过# x7f通过#x9f在XML 1.0中允许的XML 1.1中允许,甚至需要表示为数字字符参考)。在XML 1.1中的受支持的控制字符中,有两个线断层代码必须被视为Whitespace字符,这是唯一可以直接编写的控制代码。
2.0
尽管没有组织宣布在此类项目上进行工作计划,但已经讨论过XML 2.0。 XML-SW(SW为skunkworks的SW)(XML的原始开发人员已经编写)包含一些关于XML 2.0外观的建议,包括消除语法中的DTD,以及XML名称空间,XML base和XML base和XML base和XML的集成XML信息设置为基本标准。
Microxml
2012年, James Clark (XML工作组的技术负责人)和John Cowan (XML 1.1规范的编辑)在W3C中组成了Microxml社区组,并发布了大幅减少XML子集的规范。
二进制XML
全球Web联盟还具有XML二进制表征工作组,对用例和属性进行初步研究,以二进制XML信息集的二进制编码。该工作组没有特许制定任何官方标准。由于根据定义,XML是基于文本的定义,因此ITU-T和ISO使用其自己的二进制格式的名称快速Infoset (ITU-TREC。X.891和ISO/IEC 24824-1)来避免混淆。
批评
XML及其扩展经常因冗长,复杂性和冗余而受到批评。
将XML的基本树模型映射到类型的编程语言或数据库系统可能很困难,尤其是当XML用于在应用程序之间交换高度结构化的数据时,这不是其主要的设计目标。但是, XML数据绑定系统允许应用程序从代表所使用的编程语言中数据的数据结构的对象直接访问XML数据,从而确保键入安全性,而不是使用DOM或SAX从XML的直接表示中检索数据本身。这是通过自动在文档的XML架构XSD的元素与要在内存中表示的类的成员之间创建映射来完成的。
其他批评试图驳斥XML是一种自称语言的说法(尽管XML规范本身并没有这样的主张)。
JSON , YAML和S表达通常是更简单的替代方案(请参阅数据序列化格式的比较),这些替代方案的重点是表示高度结构化的数据而不是文档,这可能包含高度结构化和相对非结构化的内容。但是,与简单的序列化格式相比,W3C标准化XML架构规范提供了更广泛的结构化XSD数据类型,并通过XML名称空间提供模块化和重复使用。