假设我有以下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
是相同的。等待创意!
答案 0 :(得分:0)
使用通配符更改选择器将确保该键在所有后代中都是唯一的。
<xs:key name="item1">
<xs:selector xpath=".//*" />
<xs:field xpath="@id" />
</xs:key>
(单/
代替//
只会选择直接子项
但是,如果意图是整个文档中具有该类型的所有属性的唯一性,则使用类型xs:ID
可能更适合此用例。
<xs:attribute name="id" type="xs:ID"/>