XML Schema - 将元素限制为枚举或keyref

时间:2011-08-17 08:21:50

标签: xml xsd

我正在尝试编写模式,我想将值或元素限制为枚举列表或键引用。这可能吗?即,我是我的架构

   <xsd:simpleType name="TypeEnum">
      <xsd:restriction base="xsd:string">
         <xsd:enumeration value="uint8" />
         <xsd:enumeration value="uint16" />
         <xsd:enumeration value="uint32" />
         <xsd:enumeration value="uint64" />
      </xsd:restriction>
   </xsd:simpleType>

在我的XML中我有

<root>
   <a>anEnum<a> <!-- This value should be restricted to either anEnum, anotherEnum or anything in TypeEnum -->
   <AdditionalTypes>
      <Enum Name="anEnum" />
      <Enum Name="anotherEnum" />
   </AdditionalTypes>
</root>

我的问题是如何构建<a>

的架构元素定义

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

创建另一个命名的简单类型,允许其余的枚举值(“anEnum”和“anotherEnum”)就像创建“TypeEnum”类型一样。然后使用<xsd:union>组合这些类型并设置<a>以使用此组合类型。

代码示例

<xsd:simpleType name="TypeEnum">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="uint8" />
        <xsd:enumeration value="uint16" />
        <xsd:enumeration value="uint32" />
        <xsd:enumeration value="uint64" />
    </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="TypeAdditionalEnum">
    <xsd:restriction base="xsd:string">
        <xsd:enumeration value="anEnum" />
        <xsd:enumeration value="anotherEnum" />
    </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="TypeUnionEnum">
    <xsd:union memberTypes="TypeAdditionalEnum TypeEnum" />
</xsd:simpleType>

<xsd:element name="a" type="TypeUnionEnum" />