XSD通过名称或备用属性定义元素

时间:2020-03-05 20:55:14

标签: xml xsd xsd-validation xml-validation xsd-1.1

考虑“标签组”的两种可能的实现方式:

允许作者使用名为<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的新手,如果您链​​接了参考文档,他们很乐意浏览。

1 个答案:

答案 0 :(得分:2)

从元素名称定义的类型中获得的距离越远,您通常越会发现与XSD的本质背道而驰。

XSD 1.1的Conditional Type Assignment (CTA)允许内容模型随属性值而变化。 XSD 1.1的断言允许基于数据依赖项进行进一步的类型变化。您可以尝试为此类其他类型的“灵活性”创建断言,但我会提醒您,很快就会有一个更好的方法来重新考虑您的设计。

另请参阅CTA: