2017-01-31 9 views
1

私はthis schemaでの作業、およびキーのセクションで、次の気づいています:両方のキーは、このセクションを参照している2つのxs:複合キーと同じキーですか?

<xs:key name="KeyAnalysisType"> 
     <xs:selector xpath="MasterFiles/AnalysisTypeTable/AnalysisTypeTableEntry"/> 
     <xs:field xpath="AnalysisType"/> 
    </xs:key> 
    <xs:key name="KeyAnalysisID"> 
     <xs:selector xpath="MasterFiles/AnalysisTypeTable/AnalysisTypeTableEntry"/> 
     <xs:field xpath="AnalysisID"/> 
    </xs:key> 

<xs:element name="AnalysisTypeTable" minOccurs="0"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="AnalysisTypeTableEntry" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:sequence> 
         <xs:element name="AnalysisType" type="FAIAcodeType"> 
           <xs:annotation> 
            <xs:documentation>Analysis type identifier: e.g. CC (for Cost Center), DEP (for department), etc.</xs:documentation> 
           </xs:annotation> 
         </xs:element> 
         <xs:element name="AnalysisTypeDescription" type="FAIAlongtextType"> 
           <xs:annotation> 
            <xs:documentation>Description of the AnalysisType, e.g. "Cost Center"</xs:documentation> 
           </xs:annotation> 
         </xs:element> 
         <xs:element name="AnalysisID" type="FAIAmiddle1textType"> 
           <xs:annotation> 
            <xs:documentation>Analysis ID: e.g. 1200-HDOF-TR (for cost center treasury in the headoffice) </xs:documentation> 
           </xs:annotation> 
         </xs:element> 
         <xs:element name="AnalysisIDDescription" type="FAIAlongtextType"> 
           <xs:annotation> 
            <xs:documentation>Description of the AnalysisID: e.g. "Headoffice-Treasury".</xs:documentation> 
           </xs:annotation> 
         </xs:element> 
        </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

だろうと同じように、この二重のキー定義作業両方のフィールドを選択する合成キー?例えば。

<xs:key name="CompositeKeyAnalysis"> 
    <xs:selector xpath="MasterFiles/AnalysisTypeTable/AnalysisTypeTableEntry"/> 
    <xs:field xpath="AnalysisID"/> 
    <xs:field xpath="AnalysisType"/> 
</xs:key> 

答えて

-1

これは、すべての場合で絶対的に同等であることを保証するものではありません。フィールドの1つが存在し、もう1つが存在しないとき。しかし、両方のフィールドが存在する通常のケースでは、2つの構造が同等であると私は考えます。

+1

こんにちは、マイク、私はおそらくですここでは何かが欠落していますが、例えば、(ID、タイプ)の(1,3)、(1,4)、(2,3)、(2,4)のノードがある場合)、インスタンスはすべてのタプルが一意ですが、2つのキーのいずれかに別々に(複合1など)はないので、複合キーに対して有効でしょうか? –

+0

はい。あなたは大丈夫です。私は逃しました。 –

1

ダブルキーの定義は、重要な側面ではコンポジットキーと異なります( )。

<root> 
    <item key1="A" key2="a"/> 
    <item key1="B" key2="b"/> 

    <reference ref1="A" ref2="a"/> 
    <reference ref1="B" ref2="b"/> 
</root> 

およびkey1key2ノードに別々のキーを定義することができます:この例の文書を取る

<xs:key name="Key1"> 
    <xs:selector xpath="item"/> 
    <xs:field xpath="@key1"/> 
</xs:key> 
<xs:key name="Key2"> 
    <xs:selector xpath="item"/> 
    <xs:field xpath="@key2"/> 
</xs:key> 

<xs:keyref name="Keyref1" refer="Key1"> 
    <xs:selector xpath="reference"/> 
    <xs:field xpath="@ref1"/> 
</xs:keyref> 
<xs:keyref name="Keyref2" refer="Key2"> 
    <xs:selector xpath="reference"/> 
    <xs:field xpath="@ref2"/> 
</xs:keyref> 

この場合、キーはお互いの知識がなくても、別々に に一致しています。

<root> 
    <item key1="A" key2="a"/> 
    <item key1="B" key2="b"/> 

    <reference ref1="A" ref2="b"/> <!-- Mix of "A" and "b" --> 
    <reference ref1="B" ref2="a"/> <!-- Mix of "B" and "a" --> 
</root> 

複合キーが使用されている一方場合、上記文書 が無効であろう。したがって、<reference>要素は、または意図されない場合があります異なる<item>要素のキーを参照することができます。その後、キーはグループ、 として一致していると<reference>要素が は、(最初​​の例のように)両方のキーと一致していることを、単一の<item>要素を参照する必要があるため:

<xs:key name="Key12"> 
    <xs:selector xpath="item"/> 
    <!-- Both fields belong to the same <item> element --> 
    <xs:field xpath="@key1"/> 
    <xs:field xpath="@key2"/> 
</xs:key> 

<xs:keyref name="Keyref12" refer="Key12"> 
    <xs:selector xpath="reference"/> 
    <!-- Both fields belong to the same <reference> element --> 
    <xs:field xpath="@ref1"/> 
    <xs:field xpath="@ref2"/> 
</xs:keyref> 
+0

あなたはそのようなdeisgnが使われる理由を考えることができますか?私が理解する限り、別々の2つのキーを持つデザインは、2つのキーを組み合わせてエントリを作成することを妨げます。 1 - 赤、1 - 青、それぞれのキーはそれ自身でユニークでなければなりません。一方、合成キーは、合成キー全体が一意でなければならないため、これらの組み合わせを許可します。 – johankr

+0

個別のキーの使用例については、キーがドキュメントの他の部分で個別に参照される場合があります。 ''です。複合キーではこれは不可能です。 – Meyer

関連する問題