使用 XQuery/schema 识别 Xml 中的重复标签

Identify duplicate tags in Xml using XQuery/schema

我有一个 Xml 片段,我需要在其中验证每个节点在第一层(从 0 开始)只出现一次。

一个不好的例子Xml是这样的:

<library>
  <book1>
    <title>My first book</title>
    <PageNum>101</PageNum>
  </book1>
  <book2>
    <title>My second book</title>
  </book2>
  <book1>
    <title>Another of my first book</title>
  </book1>
  <book3>
    <title>My third book</title>
    <PageNum>101</PageNum>
  </book3>
</library>

...因为元素名称为"book1"的元素在第一层出现两次。

子节点的结构并不重要 - 只是不存在具有相同 "top-level" 元素名称的节点。我也不知道子节点的名称。

我该怎么做 - 使用 RelaxNg、XSD 或 XQuery?

谢谢, 杰斯帕

使用XPath/XQuery你可以比较所有标签名称的序列长度是否与所有distinctive标签名称的序列长度相等:

count(*/name()) = count(distinct-values(*/name()))