限制XPATH(约束)中允许什么?
-
30-09-2019 - |
题
我需要在大型XML文件中应用约束,这样:
<library>
<book>
<bookAuthor ID="1" nameAlias="PeerBR jr"/>
</book>
<book>
<bookAuthor ID="1"/>
</book>
</library>
<authorCatalogue>
<author ID="1" name="PeerBr"/>
</authorCatalogue>
我需要每个书房的ID来参考有效的作者。
我发现“受限的Xpath”非常笨拙,但也许忽略了一些东西。我有权以这种方式定义约束:
<xs:keyref name="bookAuthor" refer="author">
<xs:selector xpath="library/book/bookauthor"/>
<xs:field xpath="@ID"/>
</xs:keyref>
<xs:key name="author">
<xs:selector xpath="authorCatalogue/author"/>
<xs:field xpath="@ID"/>
</xs:key>
它有效,但是我的文件实际上更加嵌套,所以它真的很混乱。另外,我必须为“图书馆/书/合着者”写一个新约束。我无能为力吗?我不能缩写选择器吗?
我可以限制约束的应用(“ bookauthor [@namealias]”)?
在此先感谢您的帮助。
解决方案
在O'Reilly的“ XML模式”中找到了答案。可以:
- 带子元素的相对路径
- 名称空间
- 所有元素(“*”)
- 任何子元素(“ .//bookauthor”在我的情况下都可以做到这一点)
包括任何花哨的东西,例如:
- 父元素
- 测试(“ [@namealias]”,因此无法仅将约束应用于Namealias属性)
- 绝对路径
希望这可以帮助某人以后绊倒这个问题。
不隶属于 StackOverflow