一部のバリデーターでは、次の xsd は、有効に思われる xml ファイルを検証するときにいくつかの問題を引き起こします。バリデータに応じて、エラー メッセージは次のようになります (libxml):
Schemas validity error : Element 'referringElement': No match found for key-sequence ['1'] of keyref 'reference'. Start location: 8:0
参照されたキー (id=1) が定義されているように見えるため、エラー メッセージはわかりにくいです。
これは問題を引き起こす xsd です:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="document">
<xs:complexType>
<xs:sequence>
<xs:element ref="listOfReferencedElements"/>
<xs:element ref="referringElement"/>
</xs:sequence>
</xs:complexType>
<xs:keyref name="reference" refer="id">
<xs:selector xpath=".//*"/>
<xs:field xpath="@reference"/>
</xs:keyref>
</xs:element>
<xs:element name="listOfReferencedElements">
<xs:complexType>
<xs:sequence>
<xs:element name="referencedElement" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:key name="id">
<xs:selector xpath="./referencedElement"/>
<xs:field xpath="@id"/>
</xs:key>
</xs:element>
<xs:element name="referringElement">
<xs:complexType>
<xs:attribute name="reference" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
...そして、これは上記のエラーメッセージにつながるサンプルxmlです:
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="file:/C:/Users/jakob/dev/projects/integration/trading-contracts/trunk/playground/Reference.xsd">
<listOfReferencedElements>
<referencedElement id="1"/>
<referencedElement id="2"/>
</listOfReferencedElements>
<referringElement reference="1"/>
</document>