代码之家  ›  专栏  ›  技术社区  ›  Nate

枚举值的XSD定义

xsd
  •  41
  • Nate  · 技术社区  · 17 年前

    我一直在尝试定义一个包含字段的XSD,该字段只能有以下三个值之一:

    • 绿色
    • 红色
    • 蓝色

    本质上,我想在模式级别定义一个严格的枚举。

    我的第一次尝试似乎是错误的,我不确定如何“正确”修复它。

    <xs:element name="color">
        <xs:complexType>
            <xs:choice>
                <xs:element name="green"/>
                <xs:element name="red"/>
                <xs:element name="blue"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
    

    通过使用自动XML生成器,它将这些元素名称视为字符串对象:

    <xs0:color>
        <xs0:green>text</xs0:green>
    </xs0:color>
    
    1 回复  |  直到 12 年前
        1
  •  106
  •   Colin Cochrane    17 年前

    您可以在simpleType的上下文中定义枚举。

     <xs:simpleType name="color" final="restriction" >
        <xs:restriction base="xs:string">
            <xs:enumeration value="green" />
            <xs:enumeration value="red" />
            <xs:enumeration value="blue" />
        </xs:restriction>
    </xs:simpleType>
    <xs:element name="SomeElement">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Color" type="color" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
        2
  •  2
  •   salerokada    6 年前

    这个解决方案对我有效:

    <xs:element name="color">
       <xs:simpleType>
          <xs:restriction base="xs:string">
              <xs:enumeration value="green"/>
              <xs:enumeration value="red"/>
              <xs:enumeration value="blue"/>
          </xs:restriction>
       </xs:simpleType>
    </xs:element>