我的文档包含带有 ID 的 A 元素和引用 As 的 B 元素,如下所示:
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:\\\refissue.xsd">
<A id="x"/>
<A id="y"/>
<B><Aref idref="x" /></B>
</root>
当我验证我的简单模式时(见下文),我收到以下错误:
cvc-identity-constraint.4.3: Key 'ref' with value 'x' not found for identity constraint of element 'root'.
如果我将 A 元素的顺序更改为
<A id="y"/>
<A id="x"/>
文档验证没有任何错误。
为什么验证结果取决于元素的顺序?
这是验证器或我的架构中的错误吗?
<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="A">
<xs:complexType>
<xs:attribute name="id" type="xs:ID" />
</xs:complexType>
<xs:key name="A.KEY">
<xs:selector xpath="." />
<xs:field xpath="@id" />
</xs:key>
</xs:element>
<xs:element maxOccurs="unbounded" name="B">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="Aref">
<xs:complexType>
<xs:attribute name="idref" type="xs:IDREF" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:keyref name="ref" refer="A.KEY">
<xs:selector xpath="B/Aref" />
<xs:field xpath="@idref" />
</xs:keyref>
</xs:element>
</xs:schema>
我尝试使用 Eclipse(我认为它使用 xerces)、xerces-c 3.1.1、xmlstarlet 1.5.0 和 libxml2 2.7.8 进行验证,但只有 eclipse 和 xerces 才会出现错误。