XML Schema(XSD)是W3C制定的用于定义XML文档结构、内容和数据类型的规范,它可以对XML文档中的元素、属性、数据类型、出现次数等进行严格约束,避免不符合要求的XML数据被处理,在接口数据校验、配置文件格式约定等场景中应用广泛。
XSD的核心概念
XSD本身也是一个XML文档,它的核心作用是对目标XML文档做合法性校验,核心概念主要包含以下几个部分:
- 命名空间:用来区分不同来源的Schema定义,避免元素名称冲突,XSD默认使用http://www.w3.org/2001/XMLSchema作为自身的命名空间。
- 目标命名空间:指的是当前XSD要约束的XML文档所使用的命名空间,通过targetNamespace属性指定。
- 数据类型:XSD内置了大量常用数据类型,比如字符串、整数、日期等,也支持用户自定义复杂数据类型。
- 元素与属性:对应XML文档中的元素和属性,XSD中可以定义它们的名称、数据类型、是否必填、出现次数等规则。
XSD的基本语法
1. XSD文档的基本结构
一个最简单的XSD文档结构如下,所有XSD的定义都需要放在<schema>根元素内部:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ipipp.com/user"
xmlns="http://www.ipipp.com/user"
elementFormDefault="qualified">
<!-- 这里写具体的元素、属性、类型定义 -->
</xs:schema>
上面的代码中,xmlns:xs绑定了XSD自身的命名空间,targetNamespace指定了要约束的XML的目标命名空间,xmlns绑定了目标命名空间的默认前缀,elementFormDefault="qualified"表示目标XML中的元素必须使用目标命名空间限定。
2. 简单元素定义
简单元素指的是只包含文本内容、没有子元素和属性的元素,定义语法如下:
<xs:element name="username" type="xs:string"/> <xs:element name="age" type="xs:integer" minOccurs="0" maxOccurs="1"/>
name属性指定元素名称,type指定元素的数据类型,minOccurs和maxOccurs分别指定元素最少和最多出现的次数,默认都是1,设置为0表示该元素可选。
3. 属性定义
属性定义在对应的元素内部,使用<xs:attribute>标签,语法如下:
<xs:element name="user">
<xs:complexType>
<xs:attribute name="id" type="xs:integer" use="required"/>
<xs:attribute name="role" type="xs:string" default="normal"/>
</xs:complexType>
</xs:element>
use属性指定属性是否必填,required表示必填,optional表示可选,default可以指定属性的默认值。
4. 复杂元素定义
复杂元素指的是包含子元素或者属性的元素,需要使用<xs:complexType>标签定义,常见的子元素顺序约束有两种:
- 顺序出现:使用<xs:sequence>标签,子元素必须按照定义的顺序出现。
- 任选出现:使用<xs:choice>标签,子元素中只能选择其中一个出现。
顺序出现的复杂元素示例:
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:integer"/>
<xs:element name="email" type="xs:string" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="id" type="xs:integer" use="required"/>
</xs:complexType>
</xs:element>
5. 自定义数据类型
如果内置数据类型无法满足需求,可以自定义简单类型或者复杂类型,简单类型通常是对内置类型的约束,比如限制字符串长度、整数范围:
<xs:simpleType name="ageType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
<xs:element name="age" type="ageType"/>
上面的代码定义了一个ageType类型,限制整数范围在0到120之间,然后age元素使用该类型,就自动具备了范围约束。
对应的XML示例
上面定义的XSD对应的合法XML文档如下:
<?xml version="1.0" encoding="UTF-8"?>
<user xmlns="http://www.ipipp.com/user"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.ipipp.com/user user.xsd"
id="1">
<name>张三</name>
<age>25</age>
<email>test@ipipp.com</email>
</user>
只要XML文档符合XSD的定义规则,就可以通过XSD校验器完成合法性校验,避免错误格式的数据进入后续处理流程。
XML_SchemaXSDXML语法规则数据类型修改时间:2026-07-15 09:03:43