<?xml version="1.0" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="airline" type="airlineV1"/>

    <xs:element name="airport" type="airportV1"/>

    <xs:element name="alertCapabilities" type="alertCapabilities"/>

    <xs:element name="apiResponseError" type="apiResponseError"/>

    <xs:element name="appendix" type="appendices"/>

    <xs:element name="request" nillable="true" type="xs:anyType"/>

    <xs:element name="response" nillable="true" type="xs:anyType"/>

    <xs:complexType name="responseFlight">
        <xs:complexContent>
            <xs:extension base="responseRule">
                <xs:sequence>
                    <xs:element ref="request" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="responseRule">
        <xs:sequence>
            <xs:element name="rule" type="alertRuleV1" minOccurs="0"/>
            <xs:element name="error" type="apiResponseError" minOccurs="0"/>
            <xs:element ref="appendix" minOccurs="0"/>
            <xs:element ref="alertCapabilities" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="requestFlight">
        <xs:complexContent>
            <xs:extension base="requestRuleCreate">
                <xs:sequence>
                    <xs:element name="airport" type="requestedAirportV1" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="requestRuleCreate" abstract="true">
        <xs:complexContent>
            <xs:extension base="requestBase">
                <xs:sequence>
                    <xs:element name="airlineCode" type="requestedAirlineV1" minOccurs="0"/>
                    <xs:element name="flightNumber" type="requestedString" minOccurs="0"/>
                    <xs:element name="date" type="requestedDate" minOccurs="0"/>
                    <xs:element name="name" type="requestedString" minOccurs="0"/>
                    <xs:element name="description" type="requestedString" minOccurs="0"/>
                    <xs:element name="type" type="requestedEnum" minOccurs="0"/>
                    <xs:element name="deliverTo" type="requestedString" minOccurs="0"/>
                    <xs:element name="events" minOccurs="0">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="event" type="requestedString" minOccurs="0" maxOccurs="unbounded"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="nameValues" minOccurs="0">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="nameValue" type="requestedString" minOccurs="0" maxOccurs="unbounded"/>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="codeType" type="requestedString" minOccurs="0"/>
                    <xs:element name="extendedOptions" type="requestedString" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="requestBase">
        <xs:sequence>
            <xs:element name="url" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="requestedAirportV1">
        <xs:sequence>
            <xs:element name="requestedCode" type="xs:string" minOccurs="0"/>
            <xs:element name="fsCode" type="xs:string" minOccurs="0"/>
            <xs:element ref="airport" minOccurs="0"/>
            <xs:element name="error" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="airportV1">
        <xs:sequence>
            <xs:element name="fs" type="xs:string"/>
            <xs:element name="iata" type="xs:string" minOccurs="0"/>
            <xs:element name="icao" type="xs:string" minOccurs="0"/>
            <xs:element name="faa" type="xs:string" minOccurs="0"/>
            <xs:element name="name" type="xs:string" minOccurs="0"/>
            <xs:element name="street1" type="xs:string" minOccurs="0"/>
            <xs:element name="street2" type="xs:string" minOccurs="0"/>
            <xs:element name="city" type="xs:string"/>
            <xs:element name="cityCode" type="xs:string" minOccurs="0"/>
            <xs:element name="stateCode" type="xs:string" minOccurs="0"/>
            <xs:element name="postalCode" type="xs:string" minOccurs="0"/>
            <xs:element name="countryCode" type="xs:string"/>
            <xs:element name="countryName" type="xs:string"/>
            <xs:element name="regionName" type="xs:string"/>
            <xs:element name="timeZoneRegionName" type="xs:string"/>
            <xs:element name="weatherZone" type="xs:string" minOccurs="0"/>
            <xs:element name="localTime" type="xs:string"/>
            <xs:element name="utcOffsetHours" type="xs:double"/>
            <xs:element name="latitude" type="xs:double"/>
            <xs:element name="longitude" type="xs:double"/>
            <xs:element name="elevationFeet" type="xs:int" minOccurs="0"/>
            <xs:element name="classification" type="xs:int"/>
            <xs:element name="active" type="xs:boolean"/>
            <xs:element name="dateFrom" type="xs:string" minOccurs="0"/>
            <xs:element name="dateTo" type="xs:string" minOccurs="0"/>
            <xs:element name="delayIndexUrl" type="xs:string" minOccurs="0"/>
            <xs:element name="weatherUrl" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="requestedAirlineV1">
        <xs:sequence>
            <xs:element name="requestedCode" type="xs:string" minOccurs="0"/>
            <xs:element name="fsCode" type="xs:string" minOccurs="0"/>
            <xs:element ref="airline" minOccurs="0"/>
            <xs:element name="error" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="airlineV1">
        <xs:sequence>
            <xs:element name="fs" type="xs:string"/>
            <xs:element name="iata" type="xs:string" minOccurs="0"/>
            <xs:element name="icao" type="xs:string" minOccurs="0"/>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="phoneNumber" type="xs:string" minOccurs="0"/>
            <xs:element name="active" type="xs:boolean"/>
            <xs:element name="dateFrom" type="xs:string" minOccurs="0"/>
            <xs:element name="dateTo" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="requestedString">
        <xs:sequence>
            <xs:element name="requested" type="xs:string" minOccurs="0"/>
            <xs:element name="interpreted" type="xs:string" minOccurs="0"/>
            <xs:element name="error" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="requestedDate">
        <xs:sequence>
            <xs:element name="year" type="xs:string" minOccurs="0"/>
            <xs:element name="month" type="xs:string" minOccurs="0"/>
            <xs:element name="day" type="xs:string" minOccurs="0"/>
            <xs:element name="interpreted" type="xs:string" minOccurs="0"/>
            <xs:element name="error" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="requestedEnum">
        <xs:complexContent>
            <xs:extension base="requestedString">
                <xs:sequence/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="alertRuleV1">
        <xs:sequence>
            <xs:element name="id" type="xs:string" minOccurs="0"/>
            <xs:element name="name" type="xs:string" minOccurs="0"/>
            <xs:element name="description" type="xs:string" minOccurs="0"/>
            <xs:element name="carrierFsCode" type="xs:string" minOccurs="0"/>
            <xs:element name="carrier" type="airlineV1" minOccurs="0"/>
            <xs:element name="flightNumber" type="xs:string" minOccurs="0"/>
            <xs:element name="departureAirportFsCode" type="xs:string" minOccurs="0"/>
            <xs:element name="departureAirport" type="airportV1" minOccurs="0"/>
            <xs:element name="arrivalAirportFsCode" type="xs:string" minOccurs="0"/>
            <xs:element name="arrivalAirport" type="airportV1" minOccurs="0"/>
            <xs:element name="departure" type="xs:string" minOccurs="0"/>
            <xs:element name="arrival" type="xs:string" minOccurs="0"/>
            <xs:element name="ruleEvents" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ruleEvent" type="ruleEventV1" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="nameValues" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="nameValue" type="nameValueV1" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="delivery" type="alertDeliveryV1" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ruleEventV1">
        <xs:sequence>
            <xs:element name="type" type="xs:string"/>
            <xs:element name="value" type="xs:int"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="nameValueV1">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="value" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="alertDeliveryV1">
        <xs:sequence>
            <xs:element name="format" type="xs:string"/>
            <xs:element name="destination" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="apiResponseError">
        <xs:sequence>
            <xs:element name="httpStatusCode" type="xs:int"/>
            <xs:element name="errorCode" type="xs:string" minOccurs="0"/>
            <xs:element name="errorId" type="xs:string" minOccurs="0"/>
            <xs:element name="errorMessage" type="xs:string" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="appendices">
        <xs:sequence>
            <xs:element name="airlines" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="airline" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="airports" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="airport" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="alertCapabilities">
        <xs:sequence>
            <xs:element name="baggage" type="xs:boolean"/>
            <xs:element name="departureGateChange" type="xs:boolean"/>
            <xs:element name="arrivalGateChange" type="xs:boolean"/>
            <xs:element name="gateDeparture" type="xs:boolean"/>
            <xs:element name="gateArrival" type="xs:boolean"/>
            <xs:element name="runwayDeparture" type="xs:boolean"/>
            <xs:element name="runwayArrival" type="xs:boolean"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="responseRuleById">
        <xs:complexContent>
            <xs:extension base="responseRule">
                <xs:sequence>
                    <xs:element ref="request" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="requestRuleById">
        <xs:complexContent>
            <xs:extension base="requestBase">
                <xs:sequence>
                    <xs:element name="ruleId" type="requestedString" minOccurs="0"/>
                    <xs:element name="extendedOptions" type="requestedString" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="responseRoute">
        <xs:complexContent>
            <xs:extension base="responseRule">
                <xs:sequence>
                    <xs:element ref="request" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>

    <xs:complexType name="requestRoute">
        <xs:complexContent>
            <xs:extension base="requestRuleCreate">
                <xs:sequence>
                    <xs:element name="departureAirport" type="requestedAirportV1" minOccurs="0"/>
                    <xs:element name="arrivalAirport" type="requestedAirportV1" minOccurs="0"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>

