我试图在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,无论它在结构中的位置,但上面的定义无效。
答案 0 :(得分:0)
field
的{{1}}字段仅根据the XSD RFC接受XPath的子集:
key
看起来Path ::= ('.' '//')? ( Step '/' )* ( Step | '@' NameTest )
(这意味着当前文档中的任何地方)不被接受,但可以使用//selector
(意味着当前上下文中的任何位置)。