限制用于定义 XML 元素或属性的可接受值。对 XML 元素的限制称为构面。
以下示例定义了一个名为 "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 元素的内容限制为一组可接受的值,我们将使用枚举约束。
下面的示例定义了一个名为 "car" 的元素,并带有限制。唯一可接受的值是:奥迪、高尔夫、宝马:
<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 元素的内容以定义一系列可以使用的数字或字母,我们将使用模式约束。
下面的示例定义了一个名为 "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" 的元素,并带有限制。唯一可接受的值是序列中的 5 个数字,每个数字必须在 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" 的元素,并带有限制。可接受的值是一对或多对字母,每对由一个小写字母后跟一个大写字母组成。例如,"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" 的元素,并带有限制。唯一可接受的值是男性或女性:
<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>
为了指定如何处理空白字符,我们将使用空白约束。
此示例定义了一个名为 "address" 的元素,并带有限制。空格约束设置为 "preserve",这意味着 XML 处理器不会删除任何空格字符:
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="preserve"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
此示例还定义了一个名为 "address" 的元素,并带有限制。空白约束设置为 "replace",这意味着 XML 处理器将用空格替换所有空白字符(换行符、制表符、空格和回车符):
<xs:element name="address">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:whiteSpace value="replace"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
此示例还定义了一个名为 "address" 的元素,并带有限制。空白约束设置为 "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" 的元素,并带有限制。该值必须至少为 5 个字符,最多为 8 个字符:
<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>
Constraint | Description |
---|---|
enumeration | Defines a list of acceptable values |
fractionDigits | Specifies the maximum number of decimal places allowed. Must be equal to or greater than zero |
length | Specifies the exact number of characters or list items allowed. Must be equal to or greater than zero |
maxExclusive | Specifies the upper bounds for numeric values (the value must be less than this value) |
maxInclusive | Specifies the upper bounds for numeric values (the value must be less than or equal to this value) |
maxLength | Specifies the maximum number of characters or list items allowed. Must be equal to or greater than zero |
minExclusive | Specifies the lower bounds for numeric values (the value must be greater than this value) |
minInclusive | Specifies the lower bounds for numeric values (the value must be greater than or equal to this value) |
minLength | Specifies the minimum number of characters or list items allowed. Must be equal to or greater than zero |
pattern | Defines the exact sequence of characters that are acceptable |
totalDigits | Specifies the exact number of digits allowed. Must be greater than zero |
whiteSpace | Specifies how white space (line feeds, tabs, spaces, and carriage returns) is handled |