3

XML スキーマでkey & keyrefを使用して、xml ドキュメントに参照整合性を実装したいと考えています。

私のXMLが次のようになっているとしましょう:

<root>
  <parents>
     <parent parentID="P01">XXX</parent>
     <parent parentID="P02">XXX</parent>
  </parents>

  <sons>
     <son sonID="S01" parentID="P01">XXX</son>
     <son sonID="S02" parentID="P02">XXX</son>
     <son sonID="S03" parentID="P02">XXX</son>
  </sons>
</root>

たとえば、私の XML では、parentID属性を要素の主キーとして定義したいと考えています。

ルート要素内で対応するxs:keyを宣言します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="root" type="myRootType" >
  <xs:key name="parentKey">
    <xs:selector xpath="./parents/parent" />
    <xs:field xpath="@parentID"/>
  </xs:key>  
</xs:element>

<xs:complexType name="myRootType">
   <xs:sequence>
   ....

上記の例のように、 xs:selector要素のxpath属性で相対パス ("./parents/parent) を使用すると、問題なく動作します (2 つの親が同じ ID を持つ場合、検証でエラーが発生します) 。

ただし、代わりに絶対パス ("/root/parents/parent") を使用すると、ID 制限は機能しません。

どうしてこれなの?私の理解では、両方の方法で機能するはずです(XPath式で絶対パスまたは相対パスを使用します。

4

1 に答える 1

1

実際、XML スキーマはのXPath 式をサポート<xs:selector>ていませんが、で始まる式を含まないサブセット/です。それはここで正式に説明されています。

/root/parents/parent動作しないだけでなく、は無効な式であるため、プロセッサはエラー メッセージを生成するはずです。

于 2014-03-12T13:22:31.310 に答える