最后更新: 2025年3月25日

什么是 XML?
XML(可扩展标记语言) 是一种用于存储、传输和重建数据的标记语言和文件格式。它提供了一种结构化的方法来编码信息,使其既可被人类读取,也可被机器读取。
XML 的主要特性
1. 由开放标准定义
- 由 万维网联盟(W3C) 于1998年根据 XML 1.0规范 建立。
- 遵循严格的规则以保证数据结构化且易于解释。
2. 设计目标
- XML 的设计着重于在不同平台上的简洁性、普遍性和可用性。
- 采用基于文本的格式,便于阅读和编辑。
3. 支持 Unicode
- XML 支持 Unicode,允许存储和处理多语言文本。
4. 适用性
- 最初为文档创建,现在 XML 被广泛用于各个领域的数据表示,包括网络服务、API 和配置文件。
5. 模式和 API
- XML 结构可以使用文档类型定义(DTD)、 XML 架构(XSD) 或 Relax NG 来定义。
- 各种 API,如 DOM(文档对象模型) 和 SAX(简单 API for XML),支持 XML 处理。
6. XML 的常见用途
- 不同系统之间的数据交换(如网络服务、API)。
- 软件应用中的配置文件。
- 存储结构化信息(如 RSS 提要、SVG 图形、文档格式如 DOCX)。
- 网络开发(如 XHTML、SOAP、基于 AJAX 的应用)。
XML 概述
1. XML 的主要目的:序列化
在 XML 中,序列化意味着:
- 以结构化格式存储数据。
- 在不同系统之间传输数据。
- 以可用形式重建数据。
当两个系统需要交换信息时,XML 提供了一种标准化的文件格式以实现互操作性。它充当结构化数据交换的**“通用语言”**。
2. 作为标记语言的 XML
XML 是一种标记语言,这意味着它:
- 用标签标记数据以确保清晰结构。
- 以分层方式组织信息。
- 用元数据分类数据。
示例:
<book>
<title>XML Basics</title>
<author>John Doe</author>
</book>
这里,<book>
、<title>
和 <author>
是定义数据元素的标签。
3. XML 架构(XSD)和验证
XML 架构(XSD) 定义 XML 文档的结构规则。
XML 文档可以是:
- 格式良好 → 遵循基本语法规则(正确的嵌套、正确的标签关闭)。
- 有效 → 符合模式规则(必需元素、正确的数据类型)。
XSD 规则示例:
<xs:element name="title" type="xs:string"/>
这确保 <title>
必须包含字符串值。
4. XML 媒体类型(RFC 7303)
IETF RFC 7303 定义了用于数据传输的 XML 媒体类型:
- application/xml → 标准 XML 数据。
- application/xml-external-parsed-entity → 解析后的 XML 实体。
- application/xml-dtd → XML DTD 文档。
对于基于 XML 的格式,使用 +xml 后缀(例如,image/svg+xml
用于 SVG 图像)。
5. 网络应用中的 XML(RFC 3470 / IETF BCP 70)
IETF BCP 70(RFC 3470) 概述了在基于网络的应用中使用 XML 的最佳实践,确保系统间的无缝数据互操作性。
1. XML 的应用
XML 是一种为互联网数据交换设计的灵活标记语言。其语法影响了众多文档格式和通信协议,使其在许多行业中成为基础技术。
常见基于 XML 的格式:
- 网络提要: RSS、Atom
- 办公文档: Office Open XML、OpenDocument
- 图形和3D模型: SVG、COLLADA
- 网络技术: XHTML
- 数据交换协议: SOAP、XMPP
- AJAX: 使用 XML 进行异步数据交换
使用 XML 的行业标准:
- 医疗保健: HL7(Health Level 7)
- 旅游行业: OpenTravel Alliance
- 金融: FpML(金融产品标记语言)
- 房地产和抵押: MISMO
- 政府数据交换: 国家信息交换模型
XML 在科学中的应用:
在气象学中,XML 被用于 IWXXM 标准下的操作性天气数据表示。类似地,Darwin Information Typing Architecture(DITA) 是一种广泛应用于出版的 XML 标准。
2. XML 中的关键术语
理解 XML 中的核心术语对于有效处理 XML 文档至关重要。
字符
XML 文档是 Unicode 字符的序列。XML 1.1 允许几乎所有的 Unicode 字符,除了严格禁止的 空字符(U+0000
)。
处理器和应用程序
- **XML 处理器(或解析器)**读取并分析 XML 标记。
- 应用程序从处理器接收结构化数据并进行操作。
标记和内容
XML 将字符分为标记和内容:
- 标记: 包括元素、属性和实体(如
<tag>
和&
)。 - 内容: 元素内部的实际数据。
- CDATA 部分: 允许不作为标记解析的文本,封装在
<![CDATA[ ... ]]>
中。
标签和元素
- 标签:用
< >
包围的标记结构。<section>
(开始标签)</section>
(结束标签)<line-break />
(空元素标签)
- 元素:由标签定义的逻辑组件。
- 示例:
<greeting>Hello, world!</greeting>
- 示例:
属性
属性通过使用名称-值对为元素提供元数据。示例:
<img src="image.jpg" alt="Description" />
src="image.jpg"
和alt="Description"
是<img>
元素的属性。
3. XML 中的字符和转义
XML 中的有效 Unicode 字符
XML 文档仅允许特定的 Unicode 字符以确保正确解析。
XML 1.0 中允许的字符:
- 控制字符:
U+0009
(制表符)U+000A
(换行符)U+000D
(回车符)
- 文本字符:
U+0020–U+D7FF
U+E000–U+FFFD
U+10000–U+10FFFF
XML 1.1 的增强:
- 允许所有的 U+0001–U+001F 控制字符,但需要转义。
- U+0000(空字符)仍然禁止使用。
4. XML 中的编码
常见的 XML 编码:
XML 支持 基于 Unicode 的编码,包括:
- UTF-8(推荐的默认编码)
- UTF-16(所有 XML 解析器必须支持)
- ASCII、ISO-8859-X(旧编码)
XML 中的编码声明:
XML 头部可以指定编码:
<?xml version="1.0" encoding="UTF-8"?>
- 如果未指定编码,则假定为 UTF-8。
- UTF-16 需要 BOM(字节顺序标记) 以实现正确检测。
5. 在 XML 中转义特殊字符
由于 XML 语法保留某些字符,因此它们必须转义以避免冲突。
预定义的 XML 实体:
字符 | 转义形式 | 示例 |
---|---|---|
< (小于号) | < | I <3 XML → I <3 XML |
> (大于号) | > | x > y → x > y |
& (和号) | & | AT&T → AT&T |
' (单引号) | ' | "O'Reilly" → O’Reilly |
" (双引号) | " | She said "hello" → She said “hello” |
数字字符引用:
对于无法输入的特殊字符,使用数字引用:
- 十进制:
中 <!-- 中文字符 "中" -->
- 十六进制:
中 <!-- 中文字符 "中" -->
- 示例:呈现为: I <3 Jörg
<message>I <3 Jörg</message>
处理二进制数据:
XML 不支持原始二进制数据。取而代之的是使用 Base64 编码。
6. XML 中的注释
XML 注释语法:
<!-- 这是一个有效的 XML 注释 -->
XML 注释规则:
- 不能出现在 XML 声明之前。
- 注释内部不能包含
--
(双连字符)。 - 实体引用在注释中被忽略。
示例:
<!-- 这是一个包含 < 和 & 符号的注释 -->
结论
XML 是实现结构化数据交换的关键技术,支持网络提要、办公文档、科学数据和行业标准。了解 XML 的关键术语、编码规则和转义机制 确保创建格式良好的 XML 文档,使其在不同系统中正常工作。
通过遵循字符编码和转义的最佳实践,开发人员可以避免解析错误并确保兼容性,从而在基于 XML 的应用程序中取得成功。