将字符串限制添加到 XSD

Add string restriction to XSD

我有以下 Languages 元素。对于每种语言,我希望属性为 "Subbed" 或 "Dubbed"。例如:

<Languages>
    <Language Type="Subbed">EN</Language>
    <Language Type="Dubbed">FR</Language>
</Languages>

这是我目前拥有的 XSD -- 我该如何添加 "subbed|dubbed" 限制?

<xs:element name="Languages">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Language" maxOccurs="unbounded" minOccurs="0">
        <xs:complexType>
          <xs:simpleContent>
            <xs:extension base="xs:string">
              <xs:attribute type="xs:string" name="Type" use="optional"/>
            </xs:extension>
          </xs:simpleContent>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

您可以通过枚举实现您的目标:

替换

<xs:attribute type="xs:string" name="Type" use="optional"/>

<xs:attribute type="LanguageType" name="Type" use="optional"/>

并添加

<xs:simpleType name="LanguageType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Subbed"/>
    <xs:enumeration value="Dubbed"/>
  </xs:restriction>
</xs:simpleType>

限制Language/@TypeSubbedDubbed之一。


上面的调整是完整的 XSD:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           version="1.0">
  <xs:element name="Languages">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="Language" maxOccurs="unbounded" minOccurs="0">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute type="LanguageType" name="Type" use="optional"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:simpleType name="LanguageType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Subbed"/>
      <xs:enumeration value="Dubbed"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

这将根据要求验证您的 XML。