XSD 限制/方面
限制用于定义XML元素或属性的可接受值。对XML元素的限制称为facet。
对值的限制
下面的实例定义了一个名为"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元素的内容限制为一组可接受的值,我们将使用枚举约束。
下面的实例定义了一个名为";汽车;有限制的。唯一可接受的数值是:奥迪、高尔夫、宝马:
<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"的元素,其中包含一个限制。唯一可接受的值是序列中的五位数字,每个数字必须在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"的元素,其中有一个限制。值必须至少为五个字符,最多为八个字符:
<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 | 指定如何处理空格(换行符、制表符、空格和回车符) |