2012-04-17 3 views
0

誰かが私のキーが強制されていない理由を説明できますか?xsdキーが検証されていない

<xs:element name="Cats"> 
    <xs:complexType> 
    <xs:sequence maxOccurs="Unbounded"> 
     <xs:element name="cat" type="cattype"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:key name="CatsKey"> 
    <xs:selector xpath="cat" /> 
    <xs:field xpath="cat_id"/> 
    </xs:key> 
</xs:element> 

<xs:complexType name="cattype"> 
<xs:sequence> 
    <xs:element name="cat_id" type="xs:nonNegativeInteger"/> 
</xs:sequence> 
</xs:complexType> 

今XML

<cats> 
    <cat> 
     <cat_id>1</cat_id> 
    </cat> 
    <cat> 
     <cat_id>1</cat_id> <-- this should fail, as cat_id 1 already exists 
    </cat> 
    </cats> 

しかし、XMLParserのキーを強制されていません。私の理解には、重要な価値は必須かつユニークでなければなりません。私はkeyrefを必要とするか、またはキー制約を実施するためにパーサに固有のものか、根本的に何かを間違ってやっていますか?

答えて

1

あなたのデータはおそらく名前空間にありますか?もしそうなら、XPath式で未修飾の名前を使用して名前空間要素を参照するという有名なトラップに陥ってしまいました。

0

http://www.datypic.com/books/defxmlschema/chapter17.htmlを実行しようとしているので、次のサイトの例17-2を参照してください。

編集:フィードバックは、キーがユニークである必要があるということです。そのため、私は混乱を避けるためにその部分を削除しています。

+0

いいえ、キーは一意である必要があります。 –

+0

清算していただきありがとうございます。私は自分のレスポンスを編集して、他人に混乱させないようにします! –

関連する問題