2017-02-28 11 views
1

私は、当時、スキーマ内のすべての要素によって使用されるグローバル属性を作成する方法を見つけようとしており、それらのキー/ユニーク属性として機能します。 は、次の例を見て:今、たとえば言うことができます xsdのグローバルキー/ユニーク属性

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
attributeFormDefault="unqualified" targetNamespace="http://www.NameSpace/Family" xmlns:tns="http://www.NameSpace/Family"> 
<xs:attribute name="id" type="xs:string"/> 
<xs:complexType name="parentType"> 
    <xs:sequence> 
    <xs:element name="Name" type="xs:string"/> 
    <xs:element name="Child" type="tns:childType" minOccurs="1" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute ref="tns:id" use="required"/> 
</xs:complexType> 
<xs:complexType name="childType"> 
    <xs:sequence> 
    <xs:element name="Name" type="xs:string"/> 
    </xs:sequence> 
    <xs:attribute ref="tns:id" use="required"/> 
</xs:complexType> 
<xs:element name="Family"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="Parent" type="tns:parentType" minOccurs="1" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

が、私は、id属性に一意のキーを定義/んしたい、1親2との子供を作成するように すべての要素のidを(両親子ども)はお互いに異なるでしょう

答えて

1

あなたはこのようにタイプxsd:IDを持つものとしてidを宣言することができます。

<xs:attribute name="id" type="xs:ID"/> 

(すでにやるように)そして、あなたが宣言した属性を参照:

<xs:complexType name="parentType"> 
... 
    <xs:attribute ref="tns:id" use="required"/> 
</xs:complexType> 

あなたはまた、単にid属性を宣言することができ型または要素に直接的に影響します。

xs:IDタイプは、文書内のIDすべての属性でグローバルにセマンティクスをグローバルに適用します。

0

キーを作成するには、<xs:key>要素を使用します。あなたの場合、<Family>要素内にある一連の要素に渡ってキーを設定する必要があります。したがって、あなたの鍵はタグ内にあり、Familyとなります。

<xs:element name="Family"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="Parent" type="tns:parentType" minOccurs="1" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 

    <!-- SOMETHING LIKE THIS WILL DO --> 
    <xs:key name="id"> 
    <xs:selector xpath="tns:Parent|tns:Parent/tns:Child" /> 
    <xs:field xpath="@tns:id" /> 
    </xs:key> 
</xs:element> 

また<xs:unique>の代わり<xs:key>を使用することができます。両者の唯一の違いは、<xs:unique>はフィールドをオプションにすることができるということです。あなたの場合、id属性がスキーマの定義によって必要とされる場合、<xs:unique>または<xs:key>のいずれかを使用して差異はありません。

+0

また、XSDの5つのタイプミスを修正するためにあなたの投稿を編集しました。 –

関連する問題