xsd - 要求一个元素有另一个元素作为后代

标签 xsd

在 xsd 模式中是否有办法要求一个元素在某处有另一个元素作为后代?

例如,元素父元素需要后代 desc。这是有效的:

<parent>
  <a>
   <b>
     <desc></desc>
   </b>
  </a>
</parent>

是这样的:

<parent>
  <c>
    <desc></desc>
  </c>
</parent>

但这不是:

<a>
  <parent>
    <b/>
  </parent>
</a>

parent 的潜在子元素很多且复杂,因此很难枚举每种可能的有效配置。

诸如键/选择器架构元素之类的东西似乎可以工作,我可以在其中提供定义 desc 元素的有效位置的 xpath 表达式,但我发现的所有示例都旨在匹配属性的值.

最佳答案

不,(几乎)所有 XML 模式验证都是浅层的,在规范中称为“本地”。以下摘录强调类型验证是“本地”验证。

Element Validated by Type If an element information item is ·valid· with respect to a ·type definition· as per Element Locally Valid (Type) (§3.3.4), [it is marked as] ·validated·.

唯一的异常(exception)是身份约束,例如唯一性和键引用,它们在 XML 文档中具有广泛的范围,但用途很窄。

关于xsd - 要求一个元素有另一个元素作为后代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6432075/

相关文章:

java - 如何同时使用同一类的不同版本

xml - nillable 和 minOccurs XSD 元素属性

sql - 如何根据XSD从数据库导出数据到xml

xsd - 在没有新元素的 XSD 复杂类型中包含元素

xsd - 将 XSD 文档转换为 DocBook

java - SchemaCompiler bind() 返回 null

c# - xml 架构将范围添加到属性和文本 block

java - 解析 XSD 以列出元素

java - 验证一个巨大的 XML 文件

XSD 两个同名但属性值不同的元素