3

我想在 XML 架构中使用keykeyref在 xml 文档中实现参照完整性。

假设我的 XML 如下所示:

<root>
  <parents>
     <parent parentID="P01">XXX</parent>
     <parent parentID="P02">XXX</parent>
  </parents>

  <sons>
     <son sonID="S01" parentID="P01">XXX</son>
     <son sonID="S02" parentID="P02">XXX</son>
     <son sonID="S03" parentID="P02">XXX</son>
  </sons>
</root>

例如,在我的 XML 中,我想将parentID属性定义为父元素的主键。

我在根元素内声明了相应的xs:key :

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

<xs:element name="root" type="myRootType" >
  <xs:key name="parentKey">
    <xs:selector xpath="./parents/parent" />
    <xs:field xpath="@parentID"/>
  </xs:key>  
</xs:element>

<xs:complexType name="myRootType">
   <xs:sequence>
   ....

使用xs:selector元素的xpath属性中的相对路径(“./parents/parent”)可以正常工作(如果两个父级具有相同的 ID,则验证会出错),如上例所示。

但是如果我改用绝对路径(“/root/parents/parent”),则身份限制不起作用。

为什么是这样?我的理解是它应该以两种方式工作(在 XPath 表达式中使用绝对路径或相对路径。

4

1 回答 1

1

实际上 XML Schema 不支持任何XPath 表达式<xs:selector>,而是一个不包含以 . 开头的表达式的子集/。这是正式的描述here

除了不工作之外,您的处理器应该产生错误消息,因为/root/parents/parent它是一个无效的表达式。

于 2014-03-12T13:22:31.310 回答