0

次のように、大きな 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]") の適用を制限できますか?

よろしくお願いします。

4

1 に答える 1

4

O'Reilly の「XML Schema」で答えを見つけました。それは大丈夫です:

  • 子要素を持つ相対パス
  • 名前空間
  • すべての要素 ("*")
  • 任意の子要素 ​​(私の場合は ".//bookauthor" でうまくいきます)

次のような派手なものを含めることはできません。

  • 親要素
  • テスト (「[@nameAlias]」なので、nameAlias 属性を持つノードにのみ制約を適用する方法はありません)
  • 絶対パス

これが後で誰かが問題に遭遇するのに役立つことを願っています.

于 2010-09-03T19:15:30.310 に答える