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 没有强制执行密钥。据我了解,关键值应该是强制性的和唯一的。我是否需要一个 keyref 或唯一的解析器来强制执行 key 约束,或者我做错了什么?

4

2 回答 2

1

您的数据可能在命名空间中吗?如果是这样,您就陷入了著名的陷阱,即在 XPath 表达式中使用非限定名称来引用命名空间元素。

于 2012-04-17T21:53:45.123 回答
0

您可能想查看以下站点上的示例 17-2,因为它看起来涵盖了您正在尝试执行的操作http://www.datypic.com/books/defxmlschema/chapter17.html

编辑:反馈是关键确实需要是唯一的,所以我删除了我的回复的那部分以避免混淆。

于 2012-04-17T20:28:29.850 回答