次の方法で共有


key

属性の値または要素の値 (または値セット) が指定したスコープ内のキーである必要があることを指定します。キーのスコープは、インスタンス ドキュメント内のコンテナ element です。キーは、指定したスコープ内でデータが一意であり、null を許容せず、常に存在する必要があることを指定します。

<key
  id = ID 
  name = NCName 
  {any attributes with non-schema Namespace}...>
Content: (annotation?, (selector, field+))
</key>

属性

  • id
    この要素の ID。id の値は ID 型である必要があり、この要素を含んでいるドキュメント内で一意である必要があります。

    省略可能です。

  • name
    key 要素の名前。この名前は、『XML Namespaces』の仕様に定義されているとおり、コロンを含まない名前 (NCName) である必要があります。

    この名前は、ID 制約セット内で一意である必要があります。

    必ず指定します。

要素情報

出現回数 無制限
親要素 element
コンテンツ annotationfieldselector

解説

key 要素には、次の要素を順に含める必要があります。

selector selector 要素には、field で指定する値が一意でなけれならない要素セットの範囲を指定する XML パス言語 (XPath) 式を含めます。

selector 要素は、必ず 1 つ存在する必要があり、また 2 つ以上存在することはできません。

field field 要素には、値 (属性値または要素値) を指定する XPath 式を指定します。これらの値は、selector 要素で指定された要素セットに対して一意である必要があります。

field 要素が複数存在する場合、それらの field 要素の組み合わせは一意である必要があります。field 要素が複数存在する場合、1 つの field 要素は選択した要素の範囲で一意であっても一意でなくてもかまいませんが、すべてのフィールドの組み合わせは一意である必要があります。

1 つ以上の field 要素を指定する必要があります。

このスキーマの key 要素に対応する keyref 要素の定義例を次に示します。

<xs:schema 
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
   targetNamespace="namespace1"
        xmlns:r="namespace1"
        elementFormDefault="qualified">

 <xs:element name="root">
  <xs:complexType>
   <xs:sequence>

    <xs:element name="A" type="r:A" maxOccurs="unbounded">
     <xs:keyref name="dummy" refer="r:pNumKey">
      <xs:selector xpath="r:part"/>
      <xs:field xpath="@ref-number"/>
     </xs:keyref>
    </xs:element>

    <xs:element name="B" type="r:B"/>

   </xs:sequence>
  </xs:complexType>

  <xs:key name="pNumKey">
   <xs:selector xpath="r:B/r:part"/>
   <xs:field xpath="@key-number"/>
  </xs:key>

  </xs:element>

 <xs:complexType name="A">
  <xs:sequence>
   <xs:element name="part" maxOccurs="unbounded">
    <xs:complexType>
     <xs:simpleContent>
      <xs:extension base="xs:string">
       <xs:attribute name="ref-number" type="xs:integer"/>
      </xs:extension>
     </xs:simpleContent>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>

 <xs:complexType name="B">
  <xs:sequence>
   <xs:element name="part" maxOccurs="unbounded">
    <xs:complexType>
     <xs:simpleContent>
      <xs:extension base="xs:string">
       <xs:attribute name="key-number" type="xs:integer"/>
      </xs:extension>
     </xs:simpleContent>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
 </xs:complexType>

</xs:schema>

入力 : key.xml

<root xmlns="namespace1">
  <A>
    <!-- if the ref-number is not equal to one of the key-number, the validation will give error -->
    <part ref-number="1"/>
  </A>
  <A>
    <!-- if the ref-number is not equal to one of the key-number, the validation will give error -->
    <part ref-number="2"/>
  </A>
  <B>
    <part key-number="1"/>
    <part key-number="2"/>
    <part key-number="3"/>
  </B>
</root>

参照

XML スキーマ リファレンス (XSD) | XML スキーマの要素

詳細については、http://www.w3.org/TR/2001/REC-xmlschema-1-20010502/#element-key で、W3C『XML Schema Part 1: Structures Recommendation』を参照してください。