XML 核心知识点
XML(可扩展标记语言)是一种用于描述数据结构的标记语言,曾在数据交换、配置文件等领域广泛应用。本文将围绕其概述、文档组成、元素、约束及 Schema 展开系统讲解。
一、XML 概述
- 定义:XML 是一种可扩展的标记语言,用于结构化、存储和传输数据,注重 “数据是什么” 而非 “如何展示”(区别于 HTML 的 “展示导向”)。
- 核心价值:
- 自描述性:标签可自定义,语义清晰(如
<user><name>张三</name></user>直观表达用户数据)。 - 跨平台 / 跨语言兼容:任何系统都能解析 XML 格式的数据。
- 可扩展性:标签和结构可根据业务需求自由定义,无固定约束(除非显式添加 Schema 或 DTD 约束)。
- 自描述性:标签可自定义,语义清晰(如
二、XML 文档组成部分
一个完整的 XML 文档通常包含以下核心部分:
- 文档声明:位于文档最开头,声明 XML 版本、编码等基础信息。
- 根元素:XML 文档必须有且仅有一个根元素,所有其他元素都嵌套在根元素内。
- 子元素:根元素下的各级嵌套元素,用于组织和描述数据。
- 属性:元素的附加信息,以 “键值对” 形式存在(如
<book id="1001">中id是属性)。 - 文本内容:元素内的具体数据(如
<name>张三</name>中 “张三” 是文本内容)。
示例文档:
<?xml version="1.0" encoding="UTF-8"?> <!-- 文档声明 -->
<library> <!-- 根元素 --><book id="1001"> <!-- 子元素 + 属性 --><title>XML 入门指南</title> <!-- 子元素 + 文本内容 --><author>李四</author></book>
</library>
三、XML 文档声明
文档声明是 XML 文档的 “身份说明”,格式为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
version:必选,指定 XML 版本(目前主流是 1.0)。encoding:可选,指定文档编码(如 UTF-8、GBK 等,若省略默认 UTF-8)。standalone:可选,值为yes表示文档不依赖外部约束(如 DTD/Schema),no表示依赖,默认no。
四、XML 元素
XML 元素是数据的 “容器”,由开始标签、结束标签和内容组成,语法规则严格:
- 命名规则:
- 可包含字母、数字、下划线,不能以数字或标点开头。
- 不能包含空格,建议用下划线或驼峰命名(如
user_info或userInfo)。 - 区分大小写(
<Name>和<name>是两个不同元素)。
- 嵌套规则:元素必须正确嵌套,不能交叉(如
<a><b></a></b>是错误的,正确应为<a><b></b></a>)。 - 空元素:没有内容的元素可简写为
<element/>(如<br/>类似 HTML 中的换行标签)。
五、XML 约束
XML 本身是 “可扩展” 的,为了规范文档结构(避免标签随意定义导致解析混乱),需要添加 “约束”。常见约束方式有两种:
- DTD(文档类型定义):早期的约束方式,语法简单但功能有限(不支持数据类型验证,仅约束结构)。
- Schema(XML Schema):更现代的约束方式,支持数据类型验证、命名空间等高级特性,是 DTD 的替代方案。
六、Schema(XML Schema)
Schema 是 XML 约束的 “增强版”,以 XML 自身格式描述约束规则,支持数据类型验证、命名空间隔离、可扩展性等特性。
1. 核心作用
- 定义 XML 文档的元素、属性、数据类型(如字符串长度、数字范围等)。
- 确保 XML 文档结构和数据的 “合法性”,避免脏数据或结构错误。
2. 简单示例(定义一个用户 Schema)
<!-- userSchema.xsd -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://example.com/user"><xs:element name="user"><xs:complexType><xs:sequence><xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1"/> <!-- 必选,字符串 --><xs:element name="age" type="xs:int" minOccurs="1" maxOccurs="1"/> <!-- 必选,整数 --></xs:sequence><xs:attribute name="id" type="xs:ID" use="required"/> <!-- 必选,唯一标识 --></xs:complexType></xs:element>
</xs:schema>
3. 在 XML 中引用 Schema
<?xml version="1.0" encoding="UTF-8"?>
<user id="u001" xmlns="http://example.com/user" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://example.com/user userSchema.xsd"><name>张三</name><age>25</age>
</user>
xmlns:声明命名空间,与 Schema 中的targetNamespace对应。xsi:schemaLocation:指定 Schema 文件的位置,用于验证 XML 结构。
总结
XML 是一种注重 “数据结构” 的标记语言,核心优势是自描述和可扩展。学习时需掌握文档结构(声明、元素、属性)、严格的语法规则,以及通过 Schema 实现的结构约束。虽然如今 JSON 在数据交换场景更流行,但 XML 仍在配置文件(如 Spring 配置)、旧系统集成等领域广泛应用,掌握其知识能帮助你更好地理解和维护历史系统。
