2012-04-17 139 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或唯一的解析器來執行關鍵約束,或者我是否做了一些fundementally錯誤的事情?

回答

1

您的數據是否在命名空間中?如果是這樣,你已經陷入了在XPath表達式中使用非限定名稱引用命名空間元素的着名陷阱。

0

您可能想查看下面的網站上的示例17-2,因爲它看起來涵蓋了您正在嘗試執行的操作http://www.datypic.com/books/defxmlschema/chapter17.html

編輯:反饋意見是關鍵確實需要是唯一的,所以我刪除了我的部分迴應以避免混淆。

+0

不,密鑰應該是唯一的。 – 2012-04-17 21:53:37

+0

感謝您的澄清。我會編輯我的回覆,這樣不會讓其他人感到困惑! – 2012-04-17 21:55:28