XSD 验证 1 到 4 个特定字符的列表

XSD to validate a list of 1 to 4 specific characters

我想验证我的 XML 中的属性值在一组中是否包含至少一个字符和最多 4 个字符。我正在寻找的值是 "T"、"C"、"S" 和 "R"。它们可以是任何顺序和组合,必须至少是这些字符之一,也可以是全部四个。

我在下面使用枚举创建了一个包含所有可能组合的长列表。我想通过一些模式检查来简化它。

<xs:attribute name="valid-types" use="required">
  <xs:simpleType>
    <xs:restriction base="xs:string">   
        <xs:enumeration value="T"/>
        <xs:enumeration value="S"/>
        <xs:enumeration value="C"/>
        <xs:enumeration value="R"/>
        <xs:enumeration value="TS"/>
        <xs:enumeration value="TC"/>
        <xs:enumeration value="TR"/>
        <!-- and so on  -->
    </xs:restriction>
  </xs:simpleType>
</xs:attribute>

最后,可接受的 XML 值将是 "T"、"TC"、"TSC"、"TSCR" 或 TSCR 的任何其他组合。

只需将 xs:pattern 与正则表达式一起使用:

<xs:attribute name="valid-types" use="required">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:pattern value="[TCSR]{1,4}"/>
    </xs:restriction>
  </xs:simpleType>
</xs:attribute>