如果有一个XML格式的形式。
<msg>
<item id="0" valueType="xxx"/>
<item id="1" valueType="xxx"/>
<item id="2" valueType="xxx"/>
...
<item id="n" valueType="yyy"/>
</msg>
项目是复杂的类型,其元素和属性由一个模式管理。valueType
属性可以使用枚举中定义的多个字符串之一。然而,这些字符串中的一个 valueType
字符串可 只是 在列表的最后一项中使用。
有没有一种简单的方法可以在模式中添加这样的限制?
( 我可以创建一个 itemLast
彷彿 item
但对 valueType
但这感觉很乱,并且给任何XSLT文件增加了额外的复杂性。)
您的 itemLast
的想法,以区别对待XSD 1.0中的其他项目,因为XSD 1.0不支持依赖类型。
如果您可以使用 XSD 1.1,您可以在内容模型的 msg
对最后一个人施加特别的限制。item
:
<xs:assert test="item[last()]/@valueType = 'yyy'"/>
此项主张将放在结尾之前。xs:complexType
标签的 msg
类型定义。
这里是对上述断言的一个改进,允许一个空列表的 item
元素。
<xs:assert test="not(item) or item[last()]/@valueType = 'yyy'"/>
感谢@MichaelKay指出了这个未被发现的案例。