0
<xs:simpleType name="ItemCategoryEnum">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Kitchen"></xs:enumeration>
    <xs:enumeration value="Bathroom"></xs:enumeration>
  </xs:restriction>
</xs:simpleType>

是否可以定义一个元素“Inventory”,它应该有尽可能多的节点,命名为“Category”,因为“ItemCategoryEnum”有可能的枚举值?

因此,对于上面的示例,兼容的 XML 应该如下所示:

<Inventory>
  <Category name="Kitchen">
    <Item></Item>
    <Item></Item>
    <Item></Item>
  </Category>
  <Category name="Bathroom">
    <Item></Item>
    <Item></Item>
    <Item></Item>
  </Category>
</Inventory> 

仅将“Category”的“name”属性指定为“ItemCategoryEnum”类型是不够的,因为这只能确保“name”属性不能具有枚举中列出的任何其他值。如果某些枚举值从未使用过,它不会抱怨。这意味着以下 XML 也将是兼容的:

<Inventory>
  <Category name="Kitchen">
    <Item></Item>
    <Item></Item>
    <Item></Item>
  </Category>
</Inventory>

这里没有与“浴室”对应的类别。我希望将这一事实视为错误。

-桑迪普

4

1 回答 1

1

最简单的方法是将类别名称从属性值提升为元素名称。

否则,您可以使用 XSD 1.1 断言来检查约束(尽管您将负责使断言与类型的枚举值保持同步)。

于 2012-10-25T19:58:25.793 回答