私のドキュメントには、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でのみエラーが発生します。