📅  最后修改于: 2023-12-03 15:06:05.318000             🧑  作者: Mango
XML Schema Definition (XSD) 是一种用于定义 XML 文档结构,并验证 XML 文档是否符合定义的强类型 XML 格式规范,它使得 XML 数据可以按照预定义规范被解析和序列化。 XSD 是一种 XML 文件,它定义了元素、属性、数据类型等,可以用它约束一个 XML 文件的结构和内容。
一个 XSD 文件由两部分组成:schema 和 element。以下是最基本的 XSD 语法示例:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="xs:string"/>
<xs:element name="author" type="xs:string"/>
<xs:element name="publisher" type="xs:string"/>
<xs:element name="price" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
可以看到,schema 标签代表整个 XSD 文件,同时包含了 namespace 的声明,element 元素是 XSD 的最上层元素,定义了 XML 文档的元素结构。可以通过 type 属性定义元素的数据类型,sequence 表示元素的出现次序是按照定义的顺序。
XSD 支持的数据类型可以分为两类:内置数据类型和自定义数据类型。
除了内置数据类型外,可以通过 simpleType 定义自定义数据类型,也可以通过 complexType 定义复合数据类型。
<xs:simpleType name="ISBNType">
<xs:restriction base="xs:string">
<xs:pattern value="\d{13}"/>
</xs:restriction>
</xs:simpleType>
<xs:complexType name="BookType">
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author" type="xs:string" />
<xs:element name="isbn" type="ISBNType" />
</xs:sequence>
</xs:complexType>
上述示例中,通过 simpleType 定义了 ISBNType 类型,它是字符串类型,并使用 pattern 属性定义了 13 位数字的格式,通过 complexType 定义了 BookType 类型,它是由若干个元素组成,并且其中包含一个名称为 isbn 的元素,类型为 ISBNType。
XML Schema 还提供了一些约束,用于对元素和属性的值、出现次数等进行限制,这些约束主要包括:
minOccurs 和 maxOccurs 属性用于指定元素出现的次数,它们可以用于 sequence 和 choice 元素中,当 maxOccurs 为 1 时,可以省略该属性。
<xs:complexType name="BookType">
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author" type="xs:string" />
<xs:element name="publisher" type="xs:string" minOccurs="0" />
<xs:element name="price" type="xs:decimal" minOccurs="1" maxOccurs="1" />
</xs:sequence>
</xs:complexType>
上述例子中 publisher 和 price 元素分别定义了 minOccurs 属性和 minOccurs、maxOccurs 属性,其中 publisher 可以出现 0 或 1 次,而 price 必须出现 1 一次。
enumeration 约束可以用于限制元素的值只能在一定范围内。
<xs:simpleType name="ColorType">
<xs:restriction base="xs:string">
<xs:enumeration value="red"/>
<xs:enumeration value="green"/>
<xs:enumeration value="blue"/>
</xs:restriction>
</xs:simpleType>
上述例子中定义了一个颜色类型,只能取 red、green、blue 三个值。
pattern 约束可以用于限制元素值的正则表达式。
<xs:simpleType name="IDType">
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]{3}\d{3}"/>
</xs:restriction>
</xs:simpleType>
上述例子中定义了一个 ID 类型,只能由三个小写字母和三个数字组成。
totalDigits 和 fractionDigits 约束可以用于限制数字类型的精度和小数位数。
<xs:simpleType name="PriceType">
<xs:restriction base="xs:decimal">
<xs:totalDigits value="7"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
上述例子中定义了一个 PriceType 类型,精度为 7 位,小数精度为 2 位。
通过对 XSD 的介绍,我们了解了 XSD 是什么,以及它的基本语法、支持的数据类型、常用约束等。掌握 XSD 不仅可以帮助我们在编写 XML 时遵循规范,同时也有助于我们解析和验证 XML 数据,提高代码的可靠性。