我需要在大型XML文件中应用约束,如下所示:
<library>
<book>
<bookAuthor ID="1" nameAlias="PeerBR jr"/>
</book>
<book>
<bookAuthor ID="1"/>
</book>
</library>
<authorCatalogue>
<author ID="1" name="PeerBr"/>
</authorCatalogue>
我需要每本bookAuthor的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>
它有效,但我的文件实际上更嵌套,所以它变得非常混乱。另外,我必须为“library / book / CoAuthor”写一个新约束。我能做什么更优雅?我不能缩写选择器吗?
我可以限制约束的应用(“bookauthor [@nameAlias]”)吗?
提前感谢您的帮助。
答案 0 :(得分:4)
在O'Reilly的“XML Schema”中找到答案。可以:
包含任何花哨的东西都不行,例如:
希望这可以帮助有人在以后绊倒这个问题。