考虑“标签组”的两种可能的实现方式:
允许作者使用名为<tag-group>
的元素或任何具有属性role="tag-group"
的元素。
我想编写一个XSD架构来验证两种情况。
理想情况下,该模式还可以验证子代在给定父代内是否有效。例如,“标签组”允许子元素成为名为<tag>
的元素或具有属性role="tag"
的任何元素。
因此理想方案将验证,给定<tag-group>
,子级应为<tag>
;或给定带有role="tag-group"
的任何元素,则子级应该是带有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的新手,如果您链接了参考文档,他们很乐意浏览。
答案 0 :(得分:2)
从元素名称定义的类型中获得的距离越远,您通常越会发现与XSD的本质背道而驰。
XSD 1.1的Conditional Type Assignment (CTA)允许内容模型随属性值而变化。 XSD 1.1的断言允许基于数据依赖项进行进一步的类型变化。您可以尝试为此类其他类型的“灵活性”创建断言,但我会提醒您,很快就会有一个更好的方法来重新考虑您的设计。
另请参阅CTA: