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" 的元素。 唯一可接受的值是序列中的五个数字,并且每个数字的范围必须在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";唯一可接受的值为 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 指定如何处理空格(换行符,制表符,空格和回车符)