XSD 约束/限制
约束用于定义 XML 元素或属性的可接受值。对 XML 元素的约束称为 facet。
值约束
以下示例定义了一个名为“age”的元素,并带有约束。age 的值不能低于 0 或高于 120。
<xs:element name="age">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="120"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
一组值的约束
要将 XML 元素的内容限制为一组可接受的值,我们将使用 enumeration(枚举)约束。
下面的示例定义了一个名为“car”的元素,并带有约束。唯一可接受的值是:Audi、Golf、BMW。
<xs:element name="car">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
上面的示例也可以这样写:
<xs:element name="car" type="carType"/>
<xs:simpleType name="carType">
<xs:restriction base="xs:string">
<xs:enumeration value="Audi"/>
<xs:enumeration value="Golf"/>
<xs:enumeration value="BMW"/>
</xs:restriction>
</xs:simpleType>
注意:在这种情况下,“carType”类型可以被其他元素使用,因为它不是“car”元素的一部分。
一系列值的约束
要限制 XML 元素的内容以定义可以使用的一系列数字或字母,我们将使用 pattern(模式)约束。
下面的示例定义了一个名为“letter”的元素,并带有约束。唯一可接受的值是 a 到 z 中的一个小写字母。
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
下一个示例定义了一个名为“initials”的元素,并带有约束。唯一可接受的值是 a 到 z 中的三个大写字母。
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[A-Z][A-Z][A-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
下一个示例也定义了一个名为“initials”的元素,并带有约束。唯一可接受的值是 a 到 z 中的三个小写字母或大写字母。
<xs:element name="initials">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z][a-zA-Z][a-zA-Z]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
下一个示例定义了一个名为“choice”的元素,并带有约束。唯一可接受的值是以下字母之一:x、y 或 z。
<xs:element name="choice">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[xyz]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
下一个示例定义了一个名为“prodid”的元素,并带有约束。唯一可接受的值是连续的五个数字,并且每个数字必须在 0 到 9 的范围内。
<xs:element name="prodid">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:pattern value="[0-9][0-9][0-9][0-9][0-9]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
其他一系列值的约束
下面的示例定义了一个名为“letter”的元素,并带有约束。可接受的值是零个或多个小写字母(a 到 z)。
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z])*"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
下一个示例也定义了一个名为“letter”的元素,并带有约束。可接受的值是零个或多个字母对,每对由一个 lowercase 字母后跟一个 uppercase 字母组成。例如,“sToP”将通过此模式验证,但“Stop”或“STOP”或“stop”则不行。
<xs:element name="letter">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="([a-z][A-Z])+"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
下一个示例定义了一个名为“gender”的元素,并带有约束。唯一可接受的值是 male 或 female。
<xs:element name="gender">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="male|female"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
下一个示例定义了一个名为“password”的元素,并带有约束。必须有正好八个连续字符,这些字符必须是 a 到 z 的小写或大写字母,或 0 到 9 的数字。
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[a-zA-Z0-9]{8}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
对空格字符的约束
要指定如何处理空格字符,我们将使用 whiteSpace(空格)约束。
此示例定义了一个名为“address”的元素,并带有约束。whiteSpace 约束设置为“preserve”(保留),这意味着 XML 处理器 **不会** 删除任何空格字符。
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
此示例也定义了一个名为“address”的元素,并带有约束。whiteSpace 约束设置为“replace”(替换),这意味着 XML 处理器将 **用空格替换** 所有空格字符(换行符、制表符、空格和回车符)。
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
此示例也定义了一个名为“address”的元素,并带有约束。whiteSpace 约束设置为“collapse”(折叠),这意味着 XML 处理器将 **删除所有空格字符**(换行符、制表符、空格、回车符被替换为空格,前导和尾随空格被移除,多个空格被缩减为单个空格)。
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
长度约束
要限制元素中值的长度,我们将使用 length(长度)、maxLength(最大长度)和 minLength(最小长度)约束。
此示例定义了一个名为“password”的元素,并带有约束。该值必须正好是八个字符。
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
此示例定义了另一个名为“password”的元素,并带有约束。该值必须至少有五个字符,最多八个字符。
<xs:element name="password">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="5"/>
<xs:maxLength value="8"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
数据类型的约束
约束 | 描述 |
---|---|
enumeration(枚举) | 定义一组可接受的值 |
fractionDigits(小数位数) | 指定允许的小数位数。必须大于或等于零 |
length | 指定允许的字符或列表项的确切数量。必须大于或等于零 |
maxExclusive(最大值不包含) | 指定数值的上限(值必须小于此值) |
maxInclusive(最大值包含) | 指定数值的上限(值必须小于或等于此值) |
maxLength | 指定允许的字符或列表项的最大数量。必须大于或等于零 |
minExclusive(最小值不包含) | 指定数值的下限(值必须大于此值) |
minInclusive(最小值包含) | 指定数值的下限(值必须大于或等于此值) |
minLength(最小长度) | 指定允许的字符或列表项的最小数量。必须大于或等于零 |
pattern | 定义可接受的字符的确切序列 |
totalDigits(总位数) | 指定允许的数字的确切数量。必须大于零 |
whiteSpace | 指定如何处理空格(换行符、制表符、空格和回车符) |