目录

XSD 限制


限制用于定义 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