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

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

  <xs:element name="response" type="currentFlightStatusResponse"/>

  <xs:complexType name="currentFlightStatusResponse" final="extension restriction">
    <xs:all>
      <xs:element name="appendix" type="appendixWithWrapper" minOccurs="0"/>
      <xs:element name="error" type="apiResponseError" minOccurs="0"/>
      <xs:element name="flightStatus" type="flightStatus" minOccurs="0"/>
      <xs:element name="flightStatuses" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="flightStatus" type="flightStatus" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="request" type="interpretedRequest" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="appendixWithWrapper" final="extension restriction">
    <xs:sequence>
      <xs:element name="airlines" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="airline" type="airline" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="airports" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="airport" type="airport" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="equipments" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="equipment" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="airline" final="extension restriction">
    <xs:sequence>
      <xs:element name="fs" type="xs:string" minOccurs="0"/>
      <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" minOccurs="0"/>
      <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:element name="category" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="airport" final="extension restriction">
    <xs:sequence>
      <xs:element name="fs" type="xs:string" minOccurs="0"/>
      <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" minOccurs="0"/>
      <xs:element name="cityCode" type="xs:string" minOccurs="0"/>
      <xs:element name="district" 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" minOccurs="0"/>
      <xs:element name="countryName" type="xs:string" minOccurs="0"/>
      <xs:element name="regionName" type="xs:string" minOccurs="0"/>
      <xs:element name="regionIata" type="xs:string" minOccurs="0"/>
      <xs:element name="timeZoneRegionName" type="xs:string" minOccurs="0"/>
      <xs:element name="weatherZone" type="xs:string" minOccurs="0"/>
      <xs:element name="localTime" type="xs:string" minOccurs="0"/>
      <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="equipment" final="extension restriction">
    <xs:sequence>
      <xs:element name="iata" type="xs:string" minOccurs="0"/>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
      <xs:element name="turboProp" type="xs:boolean" minOccurs="0"/>
      <xs:element name="jet" type="xs:boolean" minOccurs="0"/>
      <xs:element name="widebody" type="xs:boolean" minOccurs="0"/>
      <xs:element name="regional" type="xs:boolean" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

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

  <xs:complexType name="flightStatus" final="extension restriction">
    <xs:sequence>
      <xs:element name="flightId" type="xs:long" minOccurs="0"/>
      <xs:element name="carrier" type="airline" minOccurs="0"/>
      <xs:element name="carrierFsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="flightNumber" type="xs:string" minOccurs="0"/>
      <xs:element name="departureAirport" type="airport" minOccurs="0"/>
      <xs:element name="departureAirportFsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="arrivalAirport" type="airport" minOccurs="0"/>
      <xs:element name="arrivalAirportFsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="divertedAirport" type="airport" minOccurs="0"/>
      <xs:element name="divertedAirportFsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="departureDate" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="arrivalDate" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="status" type="xs:string" minOccurs="0"/>
      <xs:element name="schedule" type="schedule" minOccurs="0"/>
      <xs:element name="operationalTimes" type="operationalTimes" minOccurs="0"/>
      <xs:element name="codeshares" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="codeshare" type="codeshare" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="delays" type="delays" minOccurs="0"/>
      <xs:element name="flightDurations" type="flightDurations" minOccurs="0"/>
      <xs:element name="airportResources" type="airportResources" minOccurs="0"/>
      <xs:element name="flightEquipment" type="flightEquipment" minOccurs="0"/>
      <xs:element name="flightStatusUpdates" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="flightStatusUpdate" type="flightStatusUpdate" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="irregularOperations" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="irregularOperation" type="irregularOperation" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="operatingCarrier" type="airline" minOccurs="0"/>
      <xs:element name="operatingCarrierFsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="primaryCarrier" type="airline" minOccurs="0"/>
      <xs:element name="primaryCarrierFsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="confirmedIncident" type="confirmedIncident" minOccurs="0"/>
      <xs:element name="lastDataAcquiredDate" type="zonedDateTime" minOccurs="0"/>
      <xs:element name="emissions" type="emissions" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="dateUtcAndLocal" final="extension restriction">
    <xs:sequence>
      <xs:element name="dateLocal" type="xs:string" minOccurs="0"/>
      <xs:element name="dateUtc" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="schedule" final="extension restriction">
    <xs:sequence>
      <xs:element name="flightType" type="xs:string" minOccurs="0"/>
      <xs:element name="serviceClasses" type="xs:string" minOccurs="0"/>
      <xs:element name="restrictions" type="xs:string" minOccurs="0"/>
      <xs:element name="uplines" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="upline" type="flightStatusReferenceUplines" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="downlines" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="downline" type="flightStatusReferenceDownlines" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="flightStatusReferenceUplines">
    <xs:sequence>
      <xs:element name="fsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="flightId" type="xs:long" minOccurs="0"/>
      <xs:element name="departureAirport" type="airport" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="flightStatusReferenceDownlines">
    <xs:sequence>
      <xs:element name="fsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="flightId" type="xs:long" minOccurs="0"/>
      <xs:element name="arrivalAirport" type="airport" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="operationalTimes" final="extension restriction">
    <xs:sequence>
      <xs:element name="publishedDeparture" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="publishedArrival" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="scheduledGateDeparture" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="estimatedGateDeparture" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="actualGateDeparture" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="flightPlanPlannedDeparture" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="scheduledRunwayDeparture" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="estimatedRunwayDeparture" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="actualRunwayDeparture" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="scheduledGateArrival" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="estimatedGateArrival" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="actualGateArrival" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="scheduledRunwayArrival" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="flightPlanPlannedArrival" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="estimatedRunwayArrival" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="actualRunwayArrival" type="dateUtcAndLocal" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="codeshare">
    <xs:sequence>
      <xs:element name="carrier" type="airline" minOccurs="0"/>
      <xs:element name="fsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="flightNumber" type="xs:string" minOccurs="0"/>
      <xs:element name="relationship" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="delays" final="extension restriction">
    <xs:sequence>
      <xs:element name="departureGateDelayMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="departureRunwayDelayMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="arrivalGateDelayMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="arrivalRunwayDelayMinutes" type="xs:int" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="flightDurations" final="extension restriction">
    <xs:sequence>
      <xs:element name="scheduledBlockMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="blockMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="scheduledAirMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="airMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="scheduledTaxiOutMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="taxiOutMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="scheduledTaxiInMinutes" type="xs:int" minOccurs="0"/>
      <xs:element name="taxiInMinutes" type="xs:int" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="airportResources" final="extension restriction">
    <xs:sequence>
      <xs:element name="departureTerminal" type="xs:string" minOccurs="0"/>
      <xs:element name="departureGate" type="xs:string" minOccurs="0"/>
      <xs:element name="arrivalTerminal" type="xs:string" minOccurs="0"/>
      <xs:element name="arrivalGate" type="xs:string" minOccurs="0"/>
      <xs:element name="baggage" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="flightEquipment" final="extension restriction">
    <xs:sequence>
      <xs:element name="scheduledEquipment" type="equipment" minOccurs="0"/>
      <xs:element name="scheduledEquipmentIataCode" type="xs:string" minOccurs="0"/>
      <xs:element name="actualEquipment" type="equipment" minOccurs="0"/>
      <xs:element name="actualEquipmentIataCode" type="xs:string" minOccurs="0"/>
      <xs:element name="tailNumber" type="xs:string" minOccurs="0"/>
      <xs:element name="fleetAircraftId" type="xs:long" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="flightStatusUpdate" final="extension restriction">
    <xs:sequence>
      <xs:element name="updatedAt" type="dateUtcAndLocal" minOccurs="0"/>
      <xs:element name="source" type="xs:string" minOccurs="0"/>
      <xs:element name="updatedTextFields" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="updatedTextField" type="updatedTextField" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="updatedDateFields" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="updatedDateField" type="updatedDateField" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="updatedTextField" final="extension restriction">
    <xs:all>
      <xs:element name="field" type="xs:string" minOccurs="0"/>
      <xs:element name="originalText" type="xs:string" minOccurs="0"/>
      <xs:element name="newText" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="updatedDateField" final="extension restriction">
    <xs:all>
      <xs:element name="field" type="xs:string" minOccurs="0"/>
      <xs:element name="originalDateLocal" type="xs:string" minOccurs="0"/>
      <xs:element name="newDateLocal" type="xs:string" minOccurs="0"/>
      <xs:element name="originalDateUtc" type="xs:string" minOccurs="0"/>
      <xs:element name="newDateUtc" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="irregularOperation" final="extension restriction">
    <xs:sequence>
      <xs:element name="type" type="xs:string" minOccurs="0"/>
      <xs:element name="newArrivalAirportFsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="relatedFlightId" type="xs:long" minOccurs="0"/>
      <xs:element name="dateUtc" type="xs:string" minOccurs="0"/>
      <xs:element name="message" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="confirmedIncident" final="extension restriction">
    <xs:sequence>
      <xs:element name="publishedDate" type="xs:string" minOccurs="0"/>
      <xs:element name="message" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="zonedDateTime" final="extension restriction">
    <xs:sequence/>
  </xs:complexType>

  <xs:complexType name="emissions" final="extension restriction">
    <xs:sequence>
      <xs:element name="zeroFuelMassKgCalc" type="xs:double" minOccurs="0"/>
      <xs:element name="blockFuelKg" type="xs:double" minOccurs="0"/>
      <xs:element name="co2EmissionsKg" type="xs:double" minOccurs="0"/>
      <xs:element name="departureTaxiFuelKg" type="xs:double" minOccurs="0"/>
      <xs:element name="departureTaxiCo2EmissionsKg" type="xs:double" minOccurs="0"/>
      <xs:element name="arrivalTaxiFuelKg" type="xs:double" minOccurs="0"/>
      <xs:element name="arrivalTaxiCo2EmissionsKg" type="xs:double" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="interpretedRequest" final="extension restriction">
    <xs:all>
      <xs:element name="flightId" type="inputParameter" minOccurs="0"/>
      <xs:element name="tailNumber" type="inputParameter" minOccurs="0"/>
      <xs:element name="airline" type="inputParameter" minOccurs="0"/>
      <xs:element name="carrier" type="inputParameter" minOccurs="0"/>
      <xs:element name="hourOfDay" type="inputParameter" minOccurs="0"/>
      <xs:element name="flight" type="inputParameter" minOccurs="0"/>
      <xs:element name="utc" type="inputParameter" minOccurs="0"/>
      <xs:element name="codeType" type="inputParameter" minOccurs="0"/>
      <xs:element name="numHours" type="inputParameter" minOccurs="0"/>
      <xs:element name="numDays" type="inputParameter" minOccurs="0"/>
      <xs:element name="maxFlights" type="inputParameter" minOccurs="0"/>
      <xs:element name="url" type="xs:string" minOccurs="0"/>
      <xs:element name="nonstopOnly" type="inputParameter" minOccurs="0"/>
      <xs:element name="airport" type="inputParameter" minOccurs="0"/>
      <xs:element name="arrivalAirport" type="inputParameter" minOccurs="0"/>
      <xs:element name="departureAirport" type="inputParameter" minOccurs="0"/>
      <xs:element name="extendedOptions" type="inputParameter" minOccurs="0"/>
      <xs:element name="date" type="interpretedDateFields" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="inputParameter">
    <xs:all>
      <xs:element name="airport" type="airport" minOccurs="0"/>
      <xs:element name="airline" type="airline" minOccurs="0"/>
      <xs:element ref="equipment" minOccurs="0"/>
      <xs:element name="fsCode" type="xs:string" minOccurs="0"/>
      <xs:element name="interpreted" type="xs:string" minOccurs="0"/>
      <xs:element name="requestedCode" type="xs:string" minOccurs="0"/>
      <xs:element name="requested" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <xs:complexType name="interpretedDateFields">
    <xs:all>
      <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="hour" type="xs:string" minOccurs="0"/>
      <xs:element name="minute" type="xs:string" minOccurs="0"/>
      <xs:element name="interpreted" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>
</xs:schema>

