<?xml version=“1.0”?> <xsd:schema xmlns:xsd=“www.w3.org/2001/XMLSchema”>

<xsd:simpleType name="codeType">
  <xsd:restriction base="xsd:string">
    <xsd:pattern value="[A-Z]+"/>
  </xsd:restriction>
</xsd:simpleType>

<xsd:element name="Test">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="Country"
                   maxOccurs="unbounded"/>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

<xsd:element name="Country">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="City"
                   maxOccurs="unbounded"/>
    </xsd:sequence>
    <xsd:attribute name="code"
                   type="codeType"
                   use="required"/>
  </xsd:complexType>
  <xsd:key name="CountryDummyKey">
    <xsd:selector xpath="."/>
    <xsd:field xpath="@code"/>
  </xsd:key>
  <xsd:keyref name="PartRefCountryDummy"
    refer="CountryDummyKey">
    <xsd:selector xpath=".//Part"/>
    <xsd:field xpath="@country"/>
  </xsd:keyref>
</xsd:element>

<xsd:element name="City">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element ref="Part"
                   minOccurs="2"
                   maxOccurs="2"/>
    </xsd:sequence>
    <xsd:attribute name="name"
                   type="xsd:string"
                   use="required"/>
    <xsd:attribute name="code"
                   type="xsd:string"
                   use="required"/>
  </xsd:complexType>
</xsd:element>

<xsd:element name="Part">
  <xsd:complexType>
    <xsd:attribute name="country"
                  type="codeType"
                  use="required"/>
  </xsd:complexType>
</xsd:element>

</xsd:schema>