2017-01-13 10 views
0

一部の製品インデックスのXSDで作業しています。問題は、私の "artikelgruppe"(= Product-Group)にユニークな "GRUPPE"(= GroupNumber)を持たせたいということです。同じことが "artikel"/"ARTNR"にも当てはまります。XSD - 一意のステートメントは重複を防止しません。

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:element name="artikelkatalog"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="artikelgruppen"> 
       <xsd:complexType> 
        <xsd:sequence> 
         <xsd:element name="artikelgruppe" maxOccurs="unbounded"> 
          <xsd:complexType> 
           <xsd:sequence> 
            <xsd:element name="GRUPPE" type="xsd:integer"> 
            </xsd:element> 
            <xsd:element name="GRUP_TXT" type="xsd:string"> 
            </xsd:element> 
           </xsd:sequence> 
          </xsd:complexType> 
         </xsd:element> 
        </xsd:sequence> 
       </xsd:complexType> 
       <xsd:unique name="unique_GRUPPE"> 
       <xsd:selector xpath="artikelgruppe" /> 
       <xsd:field xpath="@GRUPPE" /> 
       </xsd:unique> 
      </xsd:element> 
     <xsd:element name="alle_artikel"> 
      <xsd:complexType> 
       <xsd:sequence> 
        <xsd:element name="artikel" minOccurs="0" maxOccurs="unbounded"> 
         <xsd:complexType> 
          <xsd:sequence> 
           <xsd:element name="ARTNR" type="xsd:integer"> 
           </xsd:element> 
           <xsd:element name="ARTBEZ" type="xsd:string"> 
           </xsd:element> 
           <xsd:element name="EKPREIS" type="xsd:float"> 
           </xsd:element> 
           <xsd:element name="EKWAEHRUNG" type="xsd:string"> 
           </xsd:element> 
           <xsd:element name="VPREIS" type="xsd:float"> 
           </xsd:element> 
           <xsd:element name="VWAEHRUNG" type="xsd:string"> 
           </xsd:element> 
           <xsd:element name="GRUPPE" type="xsd:integer"> 
           </xsd:element> 
          </xsd:sequence> 
         </xsd:complexType> 
        </xsd:element> 
       </xsd:sequence> 
      </xsd:complexType> 
      <xsd:unique name="unique_ARTNR"> 
      <xsd:selector xpath="artikel" /> 
      <xsd:field xpath="@ARTNR" /> 
      <!--<xsd:keyref name="keyref_GRUPPE_REFERENZ" refer="unique_ARTNR"> 
      <xsd:selector xpath="artikelgruppe" /> 
      <xsd:field xpath="@ARTNR"/> 
      </xsd:keyref>--> 
      </xsd:unique> 
     </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

私のコードは、エラーが発生しませんが、仕事をしていません:(私はこれを与え:

<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?> 
<artikelkatalog> 
    <artikelgruppen> 
     <artikelgruppe> 
      <GRUPPE>20</GRUPPE> 
      <GRUP_TXT>Workstation</GRUP_TXT> 
     </artikelgruppe> 
     <artikelgruppe> 
      <GRUPPE>20</GRUPPE> 
      <GRUP_TXT>Server</GRUP_TXT> 
     </artikelgruppe> 
     <artikelgruppe> 
      <GRUPPE>30</GRUPPE> 
      <GRUP_TXT>Monitor</GRUP_TXT> 
     </artikelgruppe> 
    </artikelgruppen> 
    <alle_artikel> 
     <artikel> 
      <ARTNR>1100</ARTNR> 
      <ARTBEZ>Transtec 800</ARTBEZ> 
      <EKPREIS>720.00</EKPREIS> 
      <EKWAEHRUNG>€</EKWAEHRUNG> 
      <VPREIS>749.00</VPREIS> 
      <VWAEHRUNG>€</VWAEHRUNG> 
      <GRUPPE>10</GRUPPE> 
     </artikel> 
     <artikel> 
      <ARTNR>1100</ARTNR> 
      <ARTBEZ>Trinitron 17"</ARTBEZ> 
      <EKPREIS>375.00</EKPREIS> 
      <EKWAEHRUNG>$</EKWAEHRUNG> 
      <VPREIS>399.00</VPREIS> 
      <VWAEHRUNG>$</VWAEHRUNG> 
      <GRUPPE>20</GRUPPE> 
     </artikel> 
    </alle_artikel> 
</artikelkatalog> 

そして、それが問題だ何:(持つマシンは大丈夫でしたか?

答えて

1

XPath式では、@文字は属性を選択しますが、例では、キーが格納されています要素値として、属性としてではなく、 単にフィールドセレクタから@を削除し、一意性制約が正常に動作する必要があります:artikelgruppeには ARTNRがないため

<xsd:field xpath="GRUPPE" /> 
... 
<xsd:field xpath="ARTNR" /> 

コメントセクションでは、あまり意味がありません。 2つの要素グループ間でGRUPPE番号を と参照したいとします。その場合

keyrefは、共通の祖先要素で指定する必要があり、すなわちartikelkatalog

<xsd:element name="artikelkatalog"> 
    <xsd:complexType> 
    ... 
    </xsd:complexType> 

    <xsd:keyref name="keyref_GRUPPE_REFERENZ" refer="unique_GRUPPE"> 
    <xsd:selector xpath="alle_artikel/artikel" /> 
    <xsd:field xpath="GRUPPE"/> 
    </xsd:keyref> 

</xsd:element> 
関連する問題