Blob Blame History Raw
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://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>