XSD:如何检查只有最后一个元素包含属性

XSD : How to check that only last element contains attributes

我有一个 XML 文档 :

<Feature> 
    <Filter> ... </Filter>
    <Filter> ... </Filter>
    <Filter isTargetFilter="true"> ... </Filter>
</Feature>

功能最多可容纳 3 个过滤器元素。

使用 XSD 我想检查是否只有最后一个 Filter 元素包含属性“isTargetFilter”。

没有其他过滤器元素可以包含此属性。

我没有找到任何可以帮助我的 XSD 表达式。

不胜感激。

在XSD(1.0和1.1)中,如果两个元素是同胞并且同名,那么它们必须有相同的类型。 (如果您想查找,该约束称为 Element Declarations Consistent)。

所以唯一的方法是使用 XSD 1.1 断言。在 Feature 元素上定义断言:

<xs:assert test="every $f in Filter[not(position()=last())] satisfies empty(@isTargetFilter)"/>
<xs:assert test="Filter[position()=last()][@isTargetFilter]"/>