<?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="weatherResponse"/>

  <xs:complexType name="weatherResponse" final="extension restriction">
    <xs:all>
      <xs:element name="request" type="xs:anyType" minOccurs="0"/>
      <xs:element name="error" type="apiResponseError" minOccurs="0"/>
      <xs:element name="metar" type="metar" minOccurs="0"/>
      <xs:element name="taf" type="taf" minOccurs="0"/>
      <xs:element name="zoneForecast" type="zoneForecast" minOccurs="0"/>
      <xs:element name="appendix" type="appendixWithWrapper" minOccurs="0"/>
    </xs:all>
  </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="metar">
    <xs:sequence>
      <xs:element name="report" type="xs:string" minOccurs="0"/>
      <xs:element name="reportTime" type="xs:string" minOccurs="0"/>
      <xs:element name="reportModifier" type="xs:string" minOccurs="0"/>
      <xs:element name="weatherStationIcao" type="xs:string" minOccurs="0"/>
      <xs:element name="tags" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="tag" type="tag" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="conditions" type="conditions" minOccurs="0"/>
      <xs:element name="temperatureCelsius" type="xs:string" minOccurs="0"/>
      <xs:element name="dewPointCelsius" type="xs:string" minOccurs="0"/>
      <xs:element name="runwayVisualRanges" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="runwayVisualRange" type="runwayVisualRange" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="obscurations" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="obscuration" type="obscuration" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="noSignificantChange" type="xs:boolean"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="tag">
    <xs:sequence>
      <xs:element name="key" type="xs:string" minOccurs="0"/>
      <xs:element name="value" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="conditions">
    <xs:sequence>
      <xs:element name="wind" type="wind" minOccurs="0"/>
      <xs:element name="windShear" type="nonConvectiveWindShear" minOccurs="0"/>
      <xs:element name="visibility" type="visibility" minOccurs="0"/>
      <xs:element name="weatherConditions" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="weatherCondition" type="weatherCondition" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="skyConditions" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="skyCondition" type="skyCondition" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="pressureInchesHg" type="xs:string" minOccurs="0"/>
      <xs:element name="icingCondition" type="iceCondition" minOccurs="0"/>
      <xs:element name="turbulence" type="turbulence" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="wind">
    <xs:sequence>
      <xs:element name="direction" type="xs:int" minOccurs="0"/>
      <xs:element name="directionMin" type="xs:int" minOccurs="0"/>
      <xs:element name="directionMax" type="xs:int" minOccurs="0"/>
      <xs:element name="directionIsVariable" type="xs:boolean" minOccurs="0"/>
      <xs:element name="speedKnots" type="xs:string" minOccurs="0"/>
      <xs:element name="gustSpeedKnots" type="xs:string" minOccurs="0"/>
      <xs:element name="shear" type="windShear" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="windShear">
    <xs:sequence>
      <xs:element name="direction" type="xs:int" minOccurs="0"/>
      <xs:element name="height" type="xs:int" minOccurs="0"/>
      <xs:element name="speedKnots" type="xs:decimal" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="nonConvectiveWindShear">
    <xs:sequence>
      <xs:element name="level" type="xs:int" minOccurs="0"/>
      <xs:element name="direction" type="xs:int" minOccurs="0"/>
      <xs:element name="speed" type="xs:int" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="visibility">
    <xs:sequence>
      <xs:element name="miles" type="xs:string" minOccurs="0"/>
      <xs:element name="lessThan" type="xs:boolean" minOccurs="0"/>
      <xs:element name="cavok" type="xs:boolean" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="weatherCondition">
    <xs:sequence>
      <xs:element name="phenomenon" type="xs:string" minOccurs="0"/>
      <xs:element name="descriptor" type="xs:string" minOccurs="0"/>
      <xs:element name="intensity" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="skyCondition">
    <xs:sequence>
      <xs:element name="coverage" type="xs:string" minOccurs="0"/>
      <xs:element name="base" type="xs:int" minOccurs="0"/>
      <xs:element name="modifier" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="iceCondition">
    <xs:sequence>
      <xs:element name="base" type="xs:int" minOccurs="0"/>
      <xs:element name="depth" type="xs:int" minOccurs="0"/>
      <xs:element name="intensity" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="turbulence">
    <xs:sequence>
      <xs:element name="base" type="xs:int" minOccurs="0"/>
      <xs:element name="depth" type="xs:int" minOccurs="0"/>
      <xs:element name="intensity" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="runwayVisualRange">
    <xs:sequence>
      <xs:element name="runwayNumber" type="xs:string" minOccurs="0"/>
      <xs:element name="modifier" type="xs:string" minOccurs="0"/>
      <xs:element name="lowestVisibility" type="xs:int" minOccurs="0"/>
      <xs:element name="highestVisibility" type="xs:int" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="obscuration">
    <xs:sequence>
      <xs:element name="phenomenon" type="xs:string" minOccurs="0"/>
      <xs:element name="Coverage" type="xs:string" minOccurs="0"/>
      <xs:element name="height" type="xs:int" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="taf">
    <xs:sequence>
      <xs:element name="report" type="xs:string" minOccurs="0"/>
      <xs:element name="reportTime" type="xs:string" minOccurs="0"/>
      <xs:element name="observationTime" type="xs:string" minOccurs="0"/>
      <xs:element name="reportType" type="xs:string" minOccurs="0"/>
      <xs:element name="weatherStationIcao" type="xs:string" minOccurs="0"/>
      <xs:element name="forecasts" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="forecast" type="forecast" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="forecast">
    <xs:sequence>
      <xs:element name="type" type="xs:string" minOccurs="0"/>
      <xs:element name="start" type="xs:string" minOccurs="0"/>
      <xs:element name="end" type="xs:string" minOccurs="0"/>
      <xs:element name="conditions" type="conditions" minOccurs="0"/>
      <xs:element name="probability" type="xs:float" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="zoneForecast">
    <xs:sequence>
      <xs:element name="header" type="xs:string" minOccurs="0"/>
      <xs:element name="general" type="xs:string" minOccurs="0"/>
      <xs:element name="zones" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="zone" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="reportTime" type="xs:string" minOccurs="0"/>
      <xs:element name="cities" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="city" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="zoneNames" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="zoneName" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="dayForecasts" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="dayForecast" type="dayForecast" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="dayForecast">
    <xs:sequence>
      <xs:element name="day" type="xs:string" minOccurs="0"/>
      <xs:element name="forecast" type="xs:string" minOccurs="0"/>
      <xs:element name="start" type="xs:string" minOccurs="0"/>
      <xs:element name="end" type="xs:string" minOccurs="0"/>
      <xs:element name="tags" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="tag" type="tag" minOccurs="0" maxOccurs="unbounded"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </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="interpretedRequest" final="extension restriction">
    <xs:sequence>
      <xs:element name="url" type="xs:string" minOccurs="0"/>
      <xs:element name="airport" type="inputParameter" minOccurs="0"/>
      <xs:element name="codeType" type="inputParameter" minOccurs="0"/>
      <xs:element name="extendedOptions" type="inputParameter" minOccurs="0"/>
    </xs:sequence>
  </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:schema>

