XML Schema(XSD)简介
XML Schema(简称 XSD,XML Schema Definition)是 W3C 发布的官方标准,用于严格定义 XML 文档的合法结构、数据类型和约束。它是 DTD 的现代替代品,目前在 SOAP Web Service、配置文件、企业数据交换(如金融、医疗、电信)中广泛使用。
核心作用(一句话总结)
XML Schema 就是 XML 的“设计图纸 + 数据类型检查器”,它规定了:
- 能出现哪些元素和属性
- 出现顺序和次数
- 每个元素/属性的数据类型(字符串、整数、日期等)
- 必填/选填、默认值、固定值
- 命名空间使用规则
与老的 DTD 对比(为什么大家都用 XSD)
| 项目 | DTD | XML Schema (XSD) |
|---|---|---|
| 本身语法 | 不是 XML | 完全是 XML 语法 |
| 数据类型支持 | 几乎没有(只有文本) | 40+ 种内置类型(int、date、decimal 等) |
| 命名空间支持 | 不支持 | 原生完美支持 |
| 可读性和维护性 | 极差 | 优秀(可以用 IDE 高亮、自动补全) |
| 支持继承和复用 | 不支持 | 支持 complexType 继承、类型派生 |
| 行业采用情况 | 基本被淘汰 | 实际项目标配(尤其是 Web Service) |
一个最直观的例子
合法的 XML(符合 Schema):
<person>
<name>张三</name>
<age>28</age>
<email>zhangsan@example.com</email>
</person>
对应的 XML Schema 片段:
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:integer" minOccurs="1"/>
<xs:element name="email" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
如果 XML 写成 <age>twenty-eight</age> 或缺少 <name>,验证时就会报错。
常见应用场景
- SOAP/WSDL Web Service(强制要求用 XSD 定义消息格式)
- Android layout 文件(早期版本)
- Maven pom.xml、Spring 配置、各种 *.xsd 配置文件
- 金融行业 SWIFT、SEPA、FIX 协议
- 电子病历 HL7 CDA、FHIR 等
记住这几点就够日常使用了
- XSD 文件后缀通常是
.xsd - 根元素永远是
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> - 简单数据用
simpleType,有子元素或属性的用complexType - 推荐使用 targetNamespace(命名空间),避免冲突
- XML 实例通过
xsi:schemaLocation或xsi:noNamespaceSchemaLocation关联 XSD
简而言之:XML Schema 就是让 XML 从“能写就行”变成“必须按规则严格写”的利器,是所有需要数据严谨交换场景的必备技术。