我需要在大型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属性)
  • 绝对路径

希望这可以帮助某人以后绊倒这个问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top