【问题标题】:Element dependency on sibling element value元素对兄弟元素值的依赖
【发布时间】:2015-07-07 08:08:49
【问题描述】:

我需要在 XML Schema 1.0 下定义一个验证规则,该规则仅当另一个特定同级元素具有特定值时才允许一个元素在一组同级元素中出现(一次)。

例如,给定实例 XML 文档 sn-p,

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

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

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

非常感谢任何见解。

【问题讨论】:

  • 很简单,您不能在 XML 1.0 中做到这一点。正如您所说,您可以在 XML 1.1 中执行此操作,但不幸的是,这并未得到广泛支持。

标签: xsd xsd-1.0


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-14
    相关资源
    最近更新 更多