XML

此條目翻譯品質不佳。 |
![]() | |
扩展名 |
.xml |
---|---|
互联网媒体类型 |
|
统一类型标识 | public.xml |
UTI结构 | public.text |
开发者 | 万维网联盟 |
格式类型 | 标记语言 |
扩展自 | SGML |
扩展为 | |
标准 | |
免费格式? | 是 |
可扩展标记语言(英語:Extensible Markup Language,简称:XML)是一种标记语言和用于存储、传输和重构松散数据的文件格式。它定义了一系列编码文档的规则以使其在人类可读的同时机器可读。万维网联盟于1998年[2]发布的 XML 1.0 规范[3]和其他相关[4]开源标准共同定义了 XML[5]。
XML 的设计目标是注重简洁、通用和因特网可用性[6]。它是一种通过 Unicode 编码实现对多种语言有强大支持的文本数据格式。尽管 XML 的设计重心在于文档,它被广泛应用于网络服务中松散数据结构的表示。[7]
总览
XML 的主要目的是序列化(如存储、传输和重构松散数据)。对于两个需要传输信息的不同系统,它们也需要在文件格式上达成一致。XML 规范了这个流程,因此其类似于用于表示信息的通用语言。[8]
作为一个标记语言,XML 标记,分类和在结构方面组织数据。[8]XML 标签代表结构且包含元数据,标签内是照 XML 标准编码的数据。[8]一个附加的 XML 结构(XSD)定义了用于解释和验证 XML 的必要的元数据(这也被称为结构典范)[8]。一个符合 XML 基本语法的文档是“结构良好”的(well-formed),一个符合其附加结构的是“有效”(valid)的。[8]
互联网工程任务组的 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 的语言的各个方面)提出。
应用
XML 在互联网信息交换中已经被广泛应用。数以百计使用 XML 语法的文档格式(包括 RSS、Atom、Office Open XML、OpenDocument、SVG、COLLADA 和 XHTML)被开发出来[9]。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;
,例如, &
将绘制为&.
名字 | 字符 | Unicode码位(十进制) | 标准 | 描述 |
---|---|---|---|---|
quot | " | U+0022 (34) | XML 1.0 | 双引号 |
amp | & | U+0026 (38) | XML 1.0 | & |
apos | ' | U+0027 (39) | XML 1.0 | 撇号 |
lt | < | U+003C (60) | XML 1.0 | 小于号 |
gt | > | U+003E (62) | XML 1.0 | 大于号 |
处理器( Processor )与应用( Application )
XML 处理器(Processor,也称作XML parser)分析标记语言并传递结构化信息给应用(application)。
XML 规范规定了处理器要做什么不能做什么,但是应用并不在其讨论范围内。规范称之为处理器的东西一般被通俗的称为 XML 解析器。
标记( Markup )与内容( Content )
XML文档的字符分为标记(Markup)与内容(content)两类。可由简单的语法判断出来:标记通常以<
开头,以>
结尾;或者以字符&
开头,以;
结尾。不是标记的字符就是内容。但是CDATA部分,分解符号<![CDATA[
与]]>
是标记,二者之间的文本为内容。 最外界的空白符是标记。
标签( Tag )
一个tag属于标记结构,以<
开头,以>
结尾。Tag名字是大小写敏感,不能包括任何字符 !"#$%&'()*+,/;<=>?@[\]^`{|}~, 也不能有空格符, 不能以"-"或"."或数字开始。可分为三
- 起始标签 start-tag,如
<section>
; - 结束标签 end-tag,如
</section>
; - 空白标签 empty-element tag,如
<line-break />
.
- 起始标签 start-tag,如
元素( Element )
元素是文档逻辑组件,它在起始标签与匹配的结束标签之间,或者仅由一个空白标签组成。例如:<greeting>Hello, world!</greeting>
. 另一个例子是: <line-break />
.在标签间的内容可以包含其他元素(称为子元素)
属性( Attribute )
属性是一种在起始标签或空白标签中的标记结构,由键值对组成。例如:<img src="madonna.jpg" alt="Madonna" />
,其中 src 和 alt 是属性,它们的值分别是"madonna.jpg"和"Madonna"。每个元素中,一个属性最多出现一次,一个属性只能有一个值。
如果属性有多个值,这需要采取XML协议以外的方式来表示,如采用逗号或分号间隔,对于CSS类或标识符的名字可用空格来分隔。
XML 声明( Declaration )
XML文档如果以XML declaration开始,则表述了文档的一些信息。如<?xml version="1.0" encoding="UTF-8"?>
.
字符与转义
XML 文档完全由 Unicode 字符库中的字符组成。 除了少数特殊排除的控制字符外,Unicode 定义的任何字符都可以出现在 XML 文档的内容中。
XML 包含用于识别构成文档的 Unicode 字符编码的工具,以及用于表达由于某种原因不能直接使用的字符的工具。
有效字符
以下范围内的Unicode字码在 XML 1.0 文档中是有效的:[10]
- U+0009 ( 水平制表符 ), U+000A ( 换行 ), U+000D ( 回车 ): 这些是在 XML 1.0 中唯一接受的控制字符
- U+0020 - U+D7FF, U+E000 - U+FFFD: 这些排除了BMP中的一些非字符(所有代理项,U+FFFE和U+FFFF是不被允许的)
- U+10000 - U+10FFFF: 这些包含所有在增补计划中的字码,包含非字符
XML 1.1 扩充了允许的字符集以包含上述内容和U+0001 - U+001F[11],但同时,它限制使用 U+0009( 水平制表符 )、U+000A( 换行 )、U+000D( 回车 )和 U+0085(下一行)以外的 C0 和 C1 控制字符 ),要求它们以转义形式编写(例如 U+0001 必须写为  或其等效形式)。 对于 C1 字符,此限制是向后不兼容; 引入它是为了检测常见的编码错误。
U+0000 ( 空 )是唯一在任何 XML 1.1 文档中都不被允许的字码。
编码检测
Unicode 字符集可被编码为二进制字节以存储或通过多种方式传输,这个过程被称为编码。Unicode 本身定义了一个覆盖全字符集的编码格式,其中知名的包含 UTF-8(不包含位顺序记号,是XML 标准文档推荐使用的格式)和 UTF-16。还有许多早于 Unicode 的文字编码,如 ASCII 和多种 ISO/IEC 8859 字符集,但是它们的字符集都是 Unicode 字符集的子集。
例
XML定义结构、存储信息、传送信息。下例為小张发送给大元的便条,存储为XML。
<?xml version="1.0"?>
<小紙條>
<收件人>大元</收件人>
<發件人>小張</發件人>
<主題>問候</主題>
<具體內容>早啊,飯吃了沒? </具體內容>
</小紙條>
这XML文档仅是纯粹的信息标签,这些标签意义的展开依赖于应用它的程序。
结构
每个XML文档都由XML声明开始,在上面的代码中的第一行就是XML声明,<?xml version="1.0"?>。这一行代码会告诉解析器或浏览器,这个文件应该按照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消息是否已经结束。
参考文献
- ^ XML Media Types, RFC 7303. Internet Engineering Task Force. July 2014 [2016-07-06]. (原始内容存档于2022-04-18).
- ^ Extensible Markup Language (XML) 1.0. www.w3.org. [2024-02-14].
- ^ Extensible Markup Language (XML) 1.0 (Fifth Edition). World Wide Web Consortium. 2008-11-26 (英语).
- ^ Wayback Machine (PDF). [2024-02-14].
- ^ Document license - 2015 version. W3C. [2024-02-14] (英语).
- ^ Document license - 2015 version. W3C.
- ^ Fennell, Philip. Extremes of XML. XML London: 80-86. 2013-09-14. ISBN 978-0-9926471-0-0. doi:10.14337/XMLLondon13.Fennell01 (英语).
- ^ 8.0 8.1 8.2 8.3 8.4 Dykes, Lucinda. XML for Dummies 4th ed. Hoboken, N.J: Wiley. 2005. ISBN 978-0-7645-8845-7.
- ^ Cover, Robin. XML Applications and Initiatives. xml.coverpages.org. [2024-02-15].
- ^ Characters. Extensible Markup Language (XML) 1.0 (Fifth Edition).
- ^ Characters. Extensible Markup Language (XML) 1.1 (Second Edition).
延伸閱讀
- Annex A of ISO 8879:1986 (SGML)
- Lawrence A. Cunningham. Language, Deals and Standards: The Future of XML Contracts. Washington University Law Review. 2005. SSRN 900616
.
- Bosak, Jon; Bray, Tim. XML and the Second-Generation Web. Scientific American. May 1999 [2018-01-19]. (原始内容存档于2009-10-01).
- Kelly, Sean. Making Mistakes with XML. Developer.com. 2006-02-06 [2010-10-26]. (原始内容存档于2013-01-02).
- St. Laurent, Simon. Five years later, XML... O'Reilly XML Blog. O'Reilly Media. 2003-02-12 [2010-10-26]. (原始内容存档于2013-12-03).
- W3C XML is Ten!. World Wide Web Consortium. 2008-02-12 [2010-10-26]. (原始内容存档于2022-02-12).
- Introduction to XML (PDF). Course Slides. Pierre Geneves. October 2012 [2018-01-19]. (原始内容存档 (PDF)于2015-10-16).
外部链接
- XML及SGML名词英汉翻译表 (繁體中文)
- XML格式化工具 (中文) (页面存档备份,存于互联网档案馆)
- XML验证器 (页面存档备份,存于互联网档案馆) (英文)
- XML在线格式化工具[永久失效連結] (中文)