使用XSD架构验证1.0,我要验证元素至少指定了一个属性。
例如,像这样的简单元素:
<foo a="1" b="2" c="3" />
我想确认至少指定了属性b
或c
。但请注意,也可以同时指定两者-它们并不互斥。
我尝试使用以下方式的键:
<xs:key name="AttributeSpecified">
<xs:selector xpath="." />
<xs:field xpath="@b|@c" />
</xs:key>
但是在同时指定了两个属性时会失败(因为返回了多个结果)。
可以完成吗?
这在XSD 1.0中是不可能的。在XSD 1.1中,可能是可能的。
我是XML Schema的粉丝,但是我不会选择这种类型的验证。您也许可以使用XSD1.1使其工作,但是如果您的要求变得更加复杂,最终可能会遇到一些可怕的约束。另一方面,XPath表达式可以优雅地表达您可以想到的任何约束,并且您无需弯曲语言即可使其发挥作用。