0

我需要在 XML Schema 1.0 下定义一个验证规则,该规则允许一个元素在一组兄弟元素中出现(一次),前提是另一个特定的兄弟元素具有特定值。

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

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

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

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

任何见解都非常感谢。

4

1 回答 1

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 添加了断言,部分原因是很多人想要像你描述的那样的设计,其中两个完全不同的元素,它们对什么是允许的和不允许的有完全不同的影响,但仍然赋予相同的名称以掩盖它们的区别在含义上,而不是通过不同的名称来使它们在语义上的差异显式。

于 2013-11-15T00:02:32.433 回答