<?xml version="1.0"?> <xs:schema targetNamespace="urn:test:foo" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:foo="urn:test:foo" elementFormDefault="qualified" attributeFormDefault="qualified"> <xs:element name="Link"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="linkKey" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <!-- --> <xs:element name="Foo"> <xs:complexType> <xs:sequence> <xs:element name="Def"> <xs:complexType> <xs:sequence> <xs:element ref="foo:Link"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="Ref"> <xs:complexType> <xs:attribute name="linkRef" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="LinkKey"> <xs:selector xpath=".//foo:Link | .//foo:Link"/> <xs:field xpath="@foo:linkKey"/> </xs:key> <xs:keyref name="LinkKeyRef" refer="foo:LinkKey"> <xs:selector xpath=".//foo:Ref"/> <xs:field xpath="@foo:linkRef"/> </xs:keyref> </xs:element> </xs:schema>