在xsd架构中是否有办法要求某个元素在某个地方有另一个元素作为后代?
例如,元素parent需要后代desc。这是有效的:
<parent>
<a>
<b>
<desc></desc>
</b>
</a>
</parent>
就是这样:
<parent>
<c>
<desc></desc>
</c>
</parent>
但这不是:
<a>
<parent>
<b/>
</parent>
</a>
父级的潜在子元素很多且复杂,因此很难枚举每个可能的有效配置。
类似于键/选择器模式元素似乎可以工作,我可以提供定义desc元素的有效位置的xpath表达式,但我发现的所有示例都旨在匹配属性的值
答案 0 :(得分:2)
不,(几乎)所有XML Schema验证都很浅,在规范中称为“本地”。这是一个强调类型验证为“本地”验证的摘录。
按类型验证的元素如果是 元素信息项有效· 关于·类型定义·as 每个元素本地有效(类型) (§3.3.4),[标记为]·已验证·。
唯一的例外是身份限制,例如唯一性和键引用,它们在XML文档中具有广泛的范围,但使用范围很窄。
答案 1 :(得分:1)
我不知道XSD是否支持您尝试做的事情,但有一种解决方法。
您可以通过两个步骤进行复杂的验证:
这可能无法很好地插入您正在使用的任何框架,但可能适用于(部分)自定义代码。它还具有(可以在代码中执行额外验证)的优势,您可以发布这两个文档。
通过快速谷歌搜索,为此目的的一个努力是Schematron。它实际上完全取决于XSD,并且只使用XSLT。它似乎是一个已发布的标准: