在XML文件中实现子级别的唯一性

时间:2017-04-20 09:49:49

标签: xml xpath xsd key

我试图在xml-schema中的子级别上强制执行唯一性,但是我在制定xpath表达式时遇到了问题以强制执行此操作。

<root>
    <level1>
        <level2>
            <id></id>
        <level2>
            <id></id>
        <level2>
            <id></id>
        <level2>
    </level1>
</root>

从本质上讲,我想要做的是确保id在level1中是唯一的,而不仅仅是2级。

我在密钥定义中尝试了几种不同的xpath表达式,但要么无法编译,要么验证明显不正确的XML,这意味着我的密钥定义不正确或者至少没有做我想做的事情。

<xs:key name="ID">
    <xs:selector xpath="level1"/>
    <xs:field xpath="//ID"/>
</xs:key>

我的理解是选择器设置范围,而字段用于标识必须唯一的元素。根据我对Xpath的基本理解,//应该匹配任何ID,无论它在结构中的位置,但上面的定义无效。

1 个答案:

答案 0 :(得分:0)

field的{​​{1}}字段仅根据the XSD RFC接受XPath的子集:

  

key

看起来Path ::= ('.' '//')? ( Step '/' )* ( Step | '@' NameTest )(这意味着当前文档中的任何地方)不被接受,但可以使用//selector(意味着当前上下文中的任何位置)。

相关问题