<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<!--     definition of simple elements     -->
<xs:simpleType name="colorType">
<xs:restriction base="xs:string">
<xs:enumeration value="red"/>
<xs:enumeration value="green"/>
<xs:enumeration value="blue"/>
<xs:enumeration value="yellow"/>
<xs:enumeration value="purple"/>
<xs:enumeration value="orange"/>
<xs:enumeration value="black"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="sortType">
<xs:restriction base="xs:string">
<xs:enumeration value="name"/>
<xs:enumeration value="coordinate"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="cityName">
<xs:restriction base="xs:string">
<xs:pattern value="[_a-zA-Z][_a-zA-Z0-9]*"/>
</xs:restriction>
</xs:simpleType>
<!--     definition of attributes     -->
<xs:attributeGroup name="commandAttributes">
<xs:attribute name="localSpatialWidth" type="xs:positiveInteger" use="required"/>
<xs:attribute name="localSpatialHeight" type="xs:positiveInteger" use="required"/>
<xs:attribute name="remoteSpatialWidth" type="xs:positiveInteger" use="required"/>
<xs:attribute name="remoteSpatialHeight" type="xs:positiveInteger" use="required"/>
<xs:attribute name="pmOrder" use="optional">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:enumeration value="1"/>
<xs:enumeration value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="leafOrder" use="required">
<xs:simpleType>
<xs:restriction base="xs:positiveInteger">
<xs:minInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:attributeGroup>
<!--     definition of complex types     -->
<xs:complexType name="emptyCommandType">
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="nameType">
<xs:attribute name="name" type="cityName" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="cityType">
<xs:attribute name="name" type="cityName" use="required"/>
<xs:attribute name="localX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="localY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="radius" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="color" type="colorType" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="roadType">
<xs:attribute name="start" type="cityName" use="required"/>
<xs:attribute name="end" type="cityName" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="terminalType">
<xs:attribute name="name" type="cityName" use="required"/>
<xs:attribute name="localX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="localY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="cityName" type="cityName" use="required"/>
<xs:attribute name="airportName" type="cityName" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="airportType">
<xs:attribute name="name" type="cityName" use="required"/>
<xs:attribute name="localX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="localY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="terminalName" type="cityName" use="required"/>
<xs:attribute name="terminalX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="terminalY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="terminalCity" type="cityName" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="printPMType">
<xs:attribute name="remoteX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="listType">
<xs:attribute name="sortBy" type="sortType" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="nearestType">
<xs:attribute name="localX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="localY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="rangeType">
<xs:attribute name="localX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="localY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="radius" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="saveMap" type="xs:NCName" use="optional"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="outerRangeType">
<xs:attribute name="remoteX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="radius" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="saveMapType">
<xs:attribute name="name" type="xs:NCName" use="required"/>
<xs:attribute name="remoteX" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="remoteY" type="xs:nonNegativeInteger" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<xs:complexType name="MSTType">
<xs:attribute name="start" type="cityName" use="required"/>
<xs:attribute name="id" type="xs:positiveInteger" use="required"/>
</xs:complexType>
<!--     definition of elements     -->
<xs:element name="commands">
<xs:complexType>
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="clearAll" type="emptyCommandType"/>
<xs:element name="createCity" type="cityType"/>
<xs:element name="deleteCity" type="nameType"/>
<xs:element name="listCities" type="listType"/>
<xs:element name="mapAirport" type="airportType"/>
<xs:element name="mapTerminal" type="terminalType"/>
<xs:element name="mapRoad" type="roadType"/>
<xs:element name="unmapAirport" type="nameType"/>
<xs:element name="unmapRoad" type="roadType"/>
<xs:element name="unmapTerminal" type="nameType"/>
<xs:element name="printDodekaTrie" type="emptyCommandType"/>
<xs:element name="printPMQuadtree" type="printPMType"/>
<xs:element name="nearestCity" type="nearestType"/>
<xs:element name="nearestAirport" type="nearestType"/>
<xs:element name="globalRangeCities" type="outerRangeType"/>
<xs:element name="saveMap" type="saveMapType"/>
<xs:element name="mst" type="MSTType"/>
</xs:choice>
</xs:sequence>
<xs:attributeGroup ref="commandAttributes"/>
</xs:complexType>
</xs:element>
</xs:schema>