【发布时间】: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>
我要验证的内容,用英语:
items 元素包含一个 item 元素是可以接受的 引用 def2 和另一个引用 def3 的 item 元素。他们 在 group1 中不独占。
items 元素可以包含一个引用 def1 的 item 元素和另一个引用 def4 的 item 元素。他们属于不同的群体,因此他们的排他性并不冲突。
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