0

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

<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 はキーを強制していません。私の理解では、キー値は必須で一意でなければなりません。パーサーがキー制約を強制するためにキー参照または一意が必要ですか、それとも根本的に間違っていますか?

4

2 に答える 2

1

おそらく名前空間にデータがありますか?そうであれば、XPath 式で修飾されていない名前を使用して名前空間付きの要素を参照するという有名な罠に陥っていることになります。

于 2012-04-17T21:53:45.123 に答える
0

http://www.datypic.com/books/defxmlschema/chapter17.htmlを実行しようとしていることをカバーしているように見えるため、次のサイトの例 17-2 を参照することをお勧めします。

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

于 2012-04-17T20:28:29.850 に答える