关键元素的XML Schema唯一性

时间:2016-08-30 07:15:33

标签: xml xsd

假设我有以下xml架构代码:

 <xs:key name="item1">
      <xs:selector xpath=".//tns:itemone" />
      <xs:field xpath="@id" />
 </xs:key>

 <xs:key name="item2">
      <xs:selector xpath=".//tns:itemtwo" />
      <xs:field xpath="@id" />
 </xs:key>

每个项目(itemone,itemtwo)都有一个id,它是唯一的,但仅限于其“范围”。我想要的只是在全球范围内实现这一独特性。

例如,我希望在应用架构时这不应该有效:

<items>
        <itemone id="sameitem">
                ...
        </itemone>
        <itemtwo id="sameitem">
                ...
        </itemtwo>
</items>

这是无效的,因为id是相同的。等待创意!

1 个答案:

答案 0 :(得分:0)

使用通配符更改选择器将确保该键在所有后代中都是唯一的。

 <xs:key name="item1">
     <xs:selector xpath=".//*" />
     <xs:field xpath="@id" />
 </xs:key>

(单/代替//只会选择直接子项

但是,如果意图是整个文档中具有该类型的所有属性的唯一性,则使用类型xs:ID可能更适合此用例。

<xs:attribute name="id" type="xs:ID"/>