【问题标题】:XSD: Validate that only a single element in a group is presentXSD:验证组中仅存在一个元素
【发布时间】:2016-04-04 22:38:58
【问题描述】:

给定以下 xml 结构:

<root>
  <definitions>
    <definition key="def1" group="group1" isExclusiveInGroup="true" />
    <definition key="def2" group="group1" isExclusiveInGroup="false" />
    <definition key="def3" group="group1" isExclusiveInGroup="false" />
    <definition key="def4" group="group2" isExclusiveInGroup="true" />
  </definitions>
  <items>
    <item key="item1" definitionKey="def1" />
    <item key="item2" definitionKey="def4" />
  </items>
</root>

我要验证的内容,用英语:

  1. items 元素包含一个 item 元素可以接受的 引用 def2 和另一个引用 def3 的 item 元素。他们 在 group1 中不独占。

  2. items 元素可以包含一个引用 def1 的 item 元素和另一个引用 def4 的 item 元素。他们属于不同的群体,因此他们的排他性并不冲突。

  3. items 元素可以包含一个引用 def1 的 item 元素和另一个引用具有等于 group1 的 group 属性的任何其他定义的 item 元素。 Def1 是其组独有的,因此不能有任何其他项目引用同一组中的定义

我将使用哪些 xsd 结构/元素来执行这样的规范?

【问题讨论】:

  • 你有什么问题?提示:如果它是“你会按照我的规范为我写一个 XSD 吗?”,那就太宽泛了。
  • 我将使用哪些 xsd 结构/元素来执行这样的规范?我知道 xsd:key 和 xsd:unique,但我不知道如何执行我所描述的约束。
  • 由于约束的复杂性,您可能需要使用 xsd:assert,这需要 XSD 1.1。
  • 很遗憾,我无法使用 XSD 1.1。我对 XPath 不是特别熟悉,但是是否没有可以编写的查询允许我使用 xsd:unique 元素来实现所需的约束?
  • 鉴于该构造中允许的 XPath 1.0 的严格限制子集,无法使用 xsd:unique 编写约束。

标签: xml xpath xsd xsd-validation


【解决方案1】:

这超出了 XSD 1.0 的能力。您将需要使用不同的验证技术,例如 XSD 1.1 或 Schematron。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2018-09-05
    • 2014-04-16
    • 1970-01-01
    相关资源
    最近更新 更多