0
我需要在一個大的XML文件,以應用約束,就像這樣:受限制的XPath(約束)允許什麼?
<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]」)?
在此先感謝您的幫助。
這個問題不是關於一般的XPath表達式。來自:http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions'{selector}指定一個受限制的XPath([XPath])表達式,相對於正在聲明的元素的實例.'。所以,我編輯了你的標籤。另外,從http://www.w3.org/TR/xmlschema-1/#coss-identity-constraint看起來,您可以使用'|'節點集合並運算符。所以,也許你可以使用'library/book/bookauthor |圖書館/書/ CoAuthor',但我不是XSchema專家... – 2010-09-03 18:41:47
@Alejandro:是的,你是完全正確的,我已經閱讀了架構並按照你的建議嘗試了聯盟運營商。謝謝。 – PeerBr 2010-09-03 19:06:44