首页 > 解决方案 > XSD 验证元素至少具有指定的属性之一

问题描述

使用 XSD 模式验证 1.0 我想验证一个元素是否至少指定了一个属性。

例如,像这样的简单元素:

<foo a="1" b="2" c="3" />

我想验证至少属性borc被指定。但请注意,也可以指定两者——它们不是相互排斥的。

我尝试使用以下键:

    <xs:key name="AttributeSpecified">
        <xs:selector xpath="." />
        <xs:field xpath="@b|@c" />
    </xs:key>

但是当两个属性都被指定时它会失败(因为返回了多个结果)。

可以做到吗?

标签: validationxsdxsd-validation

解决方案


这在 XSD 1.0 中是不可能的。在XSD 1.1 中可能是可能的。

我是 XML Schema 的粉丝,但我不会选择它来进行这种类型的验证。您也许可以使用 XSD1.1 使其工作,但如果您的要求变得稍微复杂一点,您最终可能会遇到一些看起来很可怕的约束。另一方面,XPath 表达式可以优雅地表达您能想到的任何约束,并且您无需修改​​语言即可使其工作。


推荐阅读