XSD 按名称或备用属性定义元素
XSD define element by name or alternate attribute
考虑 "tag group":
的两种可能实现允许作者使用名为 <tag-group>
的元素或任何具有属性 role="tag-group"
.
我想编写一个 XSD 模式来验证这两种情况。
理想情况下,该架构还可以验证 children 在给定的 parent 中是否有效。例如,"tag group" 允许 children 是名为 <tag>
的元素或任何具有属性 role="tag"
.
所以理想的模式会验证,给定 <tag-group>
,child 应该是 <tag>
;或者给定带有 role="tag-group"
的任何元素,child 应该是带有 role="tag"
.
测试用例期望:
通过
<tag-group>
<tag>foo</tag>
</tag-group>
通过
<foo role="tag-group">
<bar role="tag">fum</bar>
</foo>
失败
<tag-group>
<bar role="tag">fum</bar>
</tag-group>
失败
<foo role="tag-group">
<tag>foo</tag>
</foo>
我是 XSD 的新手,如果您 link 他们很乐意查看参考文档。
你越远离由元素名称定义的类型,你就越会发现自己通常与 XSD 的原则背道而驰。
XSD 1.1 的 Conditional Type Assignment (CTA) 允许内容模型因属性值而异。 XSD 1.1 的断言允许基于数据依赖性的进一步类型变化。您可以尝试为此类附加类型制作断言 "flexibility",但我会提醒您,很快就会出现一个问题,最好重新考虑您的设计。
另请参阅 CTA:
- XSD 1.1 Conditional Type Assignment <alternative test=""> to check if an element hasn't an attribute set?