制限付きXPaths(制約)で許可されているものは何ですか?
-
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>
有効な著者を参照するには、各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>
動作しますが、私のファイルは実際にはよりネストされているので、本当に乱雑になります。さらに、「ライブラリ/ブック/共著者」の新しい制約を作成する必要があります。これ以上エレガントなことはありませんか?セレクターを省略できませんか?
制約の適用を制限できますか( "bookauthor [@namealias])?
よろしくお願いします。
解決
O'Reillyの「XML Schema」で答えを見つけました。持っていても大丈夫です:
- 子要素を持つ相対パス
- 名前空間
- すべての要素( "*")
- 任意の子要素(私の場合の「.//bookauthor」がトリックを行います)
次のような派手なものを含めても大丈夫ではありません。
- 親要素
- テスト( [@namealias]なので、namealias属性を持つノードにのみ制約を適用する方法はありません)
- 絶対パス
これが誰かが後で問題につまずくのに役立つことを願っています。
所属していません StackOverflow