元素依赖于兄弟元素值

时间:2013-11-14 21:20:39

标签: xsd xsd-1.0

我需要在XML Schema 1.0下定义一个验证规则,它允许元素在一组兄弟元素中出现(一次),只有当另一个特定的兄弟元素具有某个值时才会发生。

例如,给定实例XML文档片段

<root>
  <parent>
    <child1>A</child1>
  </parent>
  <parent>
    <child1>B</child1>
    <chlld2>C</child2>
  </parent>
</root>

我希望规则允许child2元素仅在必需的child1元素的值为'B'时才出现,否则,child1元素应该在给定的父元素下自行出现。

使用xs:assert在XML Schema 1.1下很容易实现,但1.0版本的解决方案避开了我。

非常感谢任何见解。

1 个答案:

答案 0 :(得分:2)

XSD 1.0中的常用方法是以不同的方式设计XML:如果我们为child1设置了一个特定值B,这使得child2的出现成为可能,那么我们可以将child1拆分为两个元素类型:child1-notB和child1-B 。因为在child1-B的情况下我们知道值,所以实际上不需要存在该值。 XML变为:

<root>
  <parent>
    <child1-notB>A</child1-notB>
  </parent>
  <parent>
    <child1-B/>
    <chlld2>C</child2>
  </parent>
</root>

编写内容模型很简单,其中父元素包含child1-notB或child1-B,后跟可选的child2。

正如Dijkgraaf已经观察到的那样,您描述的具体设计无法在XSD 1.0中表达。 XSD 1.1添加断言的部分原因是因为很多人都想要像你描述的那样设计,其中两个完全不同的元素,对于什么是允许的和不允许的,具有不同的影响,但是它们被赋予相同的名称以掩盖它们的区别在意义上,而不是被不同的名称调用,以使他们在语义上的显着差异。