【问题标题】:XSD Definition for Enumerated Value枚举值的 XSD 定义
【发布时间】:2020-05-05 09:17:07
【问题描述】:

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

  • 绿色
  • 红色
  • 蓝色

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

我的第一次尝试出现错误,我不确定修复它的“正确”方法。

<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>

【问题讨论】:

    标签: xsd


    【解决方案1】:

    您可以在 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>
    

    【讨论】:

    • 我建议使用 NMTOKEN 的扩展,而不是 String。我认为它更符合枚举的想法。它也对工具更友好,尤其是代码生成器。
    【解决方案2】:

    这个解决方案对我有用:

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-21
      • 1970-01-01
      相关资源
      最近更新 更多