有人可以解释为什么我的密钥没有被强制执行吗?
<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或者解析器的唯一来强制执行关键约束,或者我在做一些有趣的错误吗?
答案 0 :(得分:1)
您的数据是否可能在命名空间中?如果是这样,你就陷入了在XPath表达式中使用非限定名称来引用命名空间元素的着名陷阱。
答案 1 :(得分:0)
您可能希望查看以下网站上的示例17-2,因为它可以涵盖您要执行的操作http://www.datypic.com/books/defxmlschema/chapter17.html。
编辑:反馈是密钥确实需要是唯一的,所以我删除了我的响应部分以避免混淆。