<?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>