XSD文件以<xs:schema>为根元素,需声明命名空间;简单元素用type指定内置类型,复杂结构用<xs:complexType>包裹并配合<xs:sequence>等指示器定义嵌套关系,支持类型复用与正则、枚举等约束。

写一个可用的 XSD 文件不难,关键在于理解它的核心结构和常用写法。它本质是一个 XML 文件,用来描述另一个 XML 文档“长什么样、能填什么、怎么嵌套”。下面直接讲实用要点。
最简 XSD 结构
所有 XSD 文件都以 <xs:schema> 为根元素,必须声明命名空间:
-
xmlns:xs="http://www.w3.org/2001/XMLSchema"—— 这是固定写法,告诉解析器你用的是标准 XSD 语法 - 可选但推荐加
elementFormDefault="qualified",表示 XML 实例中所有元素都要带命名空间前缀(或按 targetNamespace 自动限定) - 如果要定义自己的命名空间,加上
targetNamespace和默认命名空间声明xmlns="..."
最简示例(验证 <greeting>Hello</greeting>):
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="greeting" type="xs:string"/>
</xs:schema>
定义简单元素和属性
没有子元素、没有属性的元素叫“简单元素”,直接用 type 指定内置类型:
-
<xs:element name="price" type="xs:decimal"/>→ 允许<price>29.99</price> -
<xs:element name="age" type="xs:integer"/>→ 只接受整数 -
<xs:element name="published" type="xs:date"/>→ 格式必须是YYYY-MM-DD
属性只能出现在 xs:complexType 内部,用 xs:attribute 定义:
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
定义含子元素的复杂结构
只要元素里有子元素或属性,就必须用 xs:complexType 包裹,并用容器指示器说明子元素关系:
-
<xs:sequence>:子元素必须按声明顺序出现,各出现一次(默认) -
<xs:choice>:子元素中**只选其一**,如<email>或<phone> -
<xs:all>:子元素可任意顺序,且最多出现一次(XSD 1.0 限制) - 控制次数:加
minOccurs="0"(可选)、maxOccurs="unbounded"(可重复多次)
例如允许多个 <book> 的图书列表:
<xs:complexType>
<xs:sequence>
<xs:element name="book" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
复用类型与数据约束
避免重复写结构,把公共类型抽成 xs:complexType 或 xs:simpleType 并命名,再通过 type 引用:
- 定义可重用类型:
<xs:complexType name="PersonType">...</xs:complexType> - 引用它:
<xs:element name="author" type="PersonType"/> - 对字符串加格式限制(如 ISBN):
<xs:simpleType name="ISBN"><xs:restriction base="xs:string"><xs:pattern value="[0-9]{13}"/></xs:restriction></xs:simpleType>
常见约束还包括:minInclusive、maxLength、enumeration(枚举值)等,都在 xs:restriction 内使用。










