<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="Passenger">
        <xs:annotation>
            <xs:documentation> A passenger. </xs:documentation>
        </xs:annotation>        
        <xs:complexType>
            <xs:sequence>
                <xs:element name="name" type="xs:string"/>
                <xs:element name="passportnumber" type="xs:string"/>
                <xs:element name="address" type="xs:string"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <xs:element name="Flight">
        <xs:complexType>
            <xs:sequence>
                <!-- <xs:element name="flightId" type="xs:string"/>-->
                <xs:element name="seats">
                    <xs:simpleType>
                        <xs:restriction base="xs:int">
                            <xs:minExclusive value="30"/>
                            <xs:maxInclusive value="1000"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>
                <xs:element name="date" type="xs:date"/>
              <xs:element name="departure" type="xs:time"/>
              <xs:element name="arrival" type="xs:time"/>
              <xs:element name="source" type="xs:string"/>
              <xs:element name="destination" type="xs:string"/>
            </xs:sequence>
            <xs:attribute name="flightId">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0"/>
                        <xs:maxLength value="5"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>

    <xs:element name="Airport">
        <xs:complexType>
            <xs:sequence>              
                <xs:element name="name" type="xs:string"/>
                <xs:element name="tax" type="xs:float"/>
            </xs:sequence>
            <xs:attribute name="airId">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="0"/>
                        <xs:maxLength value="3"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:attribute>
        </xs:complexType>
    </xs:element>
    
    <xs:element name="Reservation">
        <xs:complexType>
            <xs:sequence>              
                <xs:element name="date" type="xs:date"/>
                <xs:element name="flightRef" type="xs:string"/>
                <xs:element name="passRef" type="xs:string"/>
            </xs:sequence>
            <!-- to define a key or a complex key -->
        </xs:complexType>
    </xs:element>
            
    <xs:element name="doc">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="Airport" minOccurs="2" maxOccurs="unbounded" />
                <xs:element ref="Flight" minOccurs="1" maxOccurs="unbounded" />
                <xs:element ref="Passenger" minOccurs="1" maxOccurs="unbounded" />                
                <xs:element ref="Reservation" minOccurs="1" maxOccurs="unbounded" />                
            </xs:sequence>
        </xs:complexType>
        
        <!-- Key for airport -->
        <xs:key name="airportKey" id="airportKey">
            <xs:selector xpath=".//Airport"/>
            <xs:field xpath="@airId"/>
        </xs:key>
        
        <!-- Key for Flight -->
        <xs:key name="flightKey">
            <xs:selector xpath=".//Flight"/>
            <xs:field xpath="@flightId"/>
        </xs:key>
        
        <!-- Key for Person -->
        <xs:key name="personKey">
            <xs:selector xpath=".//Passenger/passportnumber"/>
            <xs:field xpath="."/>
        </xs:key>
        
        <!-- source and destination for FlightId-->
        <xs:keyref refer="airportKey" name="srcKeyRef">
            <xs:selector xpath=".//Flight"/>
            <xs:field xpath="source"/>
        </xs:keyref>
        <xs:keyref refer="airportKey" name="destKeyRef">
            <xs:selector xpath=".//Flight"/>
            <xs:field xpath="destination"/>
        </xs:keyref>
        
        <!-- keys for Reservation --> 
        <!-- source and destination for FlightId-->
        <xs:keyref refer="flightKey" name="flightKeyRef">
            <xs:selector xpath=".//Reservation"/>
            <xs:field xpath="flightRef"/>
        </xs:keyref>
        <xs:keyref refer="personKey" name="passKeyRef">
            <xs:selector xpath=".//Reservation"/>
            <xs:field xpath="passRef"/>            
        </xs:keyref>

    </xs:element>
</xs:schema>
