Xsd 考虑到属性的值,是否有方法指定元素是唯一的?

Xsd 考虑到属性的值,是否有方法指定元素是唯一的?,xsd,Xsd,考虑到属性的值,是否有方法指定元素是唯一的 <fruit>orange</fruit> <!-- valid --> <fruit>apple</fruit> <!-- valid --> <fruit>apple</fruit> <-- invalid, duplicate value --> <fruit color=green">apple</fruit> &

考虑到属性的值,是否有方法指定元素是唯一的

<fruit>orange</fruit> <!-- valid -->
<fruit>apple</fruit> <!-- valid -->
<fruit>apple</fruit> <-- invalid, duplicate value -->
<fruit color=green">apple</fruit> <!-- valid, because attributes are different -->
<fruit color=red">apple</fruit> <!-- valid, because attributes are different -->
橙色
苹果
苹果
XSD1.1解决方案
这可以在XSD1.1中使用断言来解决。此示例断言测试每个有颜色的水果是唯一具有该颜色和名称的水果,并测试每个无颜色的水果是唯一具有该名称且无颜色的水果:

<assert test="every $fruit in ./fruit satisfies
    if ($fruit/@color)
        then count(fruit[@color=$fruit/@color and text()=$fruit/text()])=1
    else
        count(fruit[text()=$fruit/text() and not(@color)])=1"/>


我不认为在XSD1.0中使用xs:unique可以直接做到这一点,因为允许的XPath子集有限