1<?xml version="1.0"?>
2<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
3
4  <xsd:simpleType name="codeType">
5    <xsd:restriction base="xsd:string">
6      <xsd:pattern value="[A-Z]+"/>
7    </xsd:restriction>
8  </xsd:simpleType>
9
10  <xsd:element name="Test">
11    <xsd:complexType>
12      <xsd:sequence>
13        <xsd:element ref="Country"
14                     maxOccurs="unbounded"/>
15      </xsd:sequence>
16    </xsd:complexType>
17  </xsd:element>
18
19  <xsd:element name="Country">
20    <xsd:complexType>
21      <xsd:sequence>
22        <xsd:element ref="City"
23                     maxOccurs="unbounded"/>
24      </xsd:sequence>
25      <xsd:attribute name="code"
26                     type="codeType"
27                     use="required"/>
28    </xsd:complexType>
29    <xsd:key name="CountryDummyKey">
30      <xsd:selector xpath="."/>
31      <xsd:field xpath="@code"/>
32    </xsd:key>
33    <xsd:keyref name="PartRefCountryDummy"
34      refer="CountryDummyKey">
35      <xsd:selector xpath=".//Part"/>
36      <xsd:field xpath="@country"/>
37    </xsd:keyref>
38  </xsd:element>
39
40  <xsd:element name="City">
41    <xsd:complexType>
42      <xsd:sequence>
43        <xsd:element ref="Part"
44                     minOccurs="2"
45                     maxOccurs="2"/>
46      </xsd:sequence>
47      <xsd:attribute name="name"
48                     type="xsd:string"
49                     use="required"/>
50      <xsd:attribute name="code"
51                     type="xsd:string"
52                     use="required"/>
53    </xsd:complexType>
54  </xsd:element>
55
56  <xsd:element name="Part">
57    <xsd:complexType>
58      <xsd:attribute name="country"
59                    type="codeType"
60                    use="required"/>
61    </xsd:complexType>
62  </xsd:element>
63</xsd:schema>