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