<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="response" >
        <xsd:complexType >
            <xsd:sequence >
                <xsd:element ref="request_index" />
                <xsd:element ref="data_source" />
                <xsd:element ref="request"/>
                <xsd:element ref="errors"/>
                <xsd:element ref="warnings"/>
                <xsd:element ref="time_taken_ms"/>
                <xsd:element ref="data"/>
            </xsd:sequence>
            <xsd:attribute name="version" type="xsd:string" default="1.3"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="request_index" type="xsd:int"/>
    <xsd:element name="data_source" >
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Specific source from dataserver request
                ex: tafs
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:attribute name="name" type="xsd:string"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="request" >
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Request type
                ex: retrieve
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:attribute name="type" type="xsd:string" />
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="errors">
        <xsd:complexType>
            <xsd:sequence minOccurs="0" >
                <xsd:element ref="error" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="warnings">
        <xsd:complexType>
            <xsd:sequence minOccurs="0">
                <xsd:element ref="warning" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="data" >
        <xsd:complexType>
            <xsd:sequence minOccurs="0" maxOccurs="unbounded">
                <xsd:element ref="TAF"/>
            </xsd:sequence>
            <xsd:attribute name="num_results" type="xsd:int"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="warning" type="xsd:string"/>
    <xsd:element name="error" type="xsd:string"/>
    <xsd:element name="time_taken_ms" type="xsd:int">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Time to process database request in milliseconds
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:attribute name="num_results" type="xsd:int"/>

    <xsd:element name="TAF">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="raw_text" minOccurs="0"/>
                <xsd:element ref="station_id" minOccurs="0"/>
                <xsd:element ref="issue_time" minOccurs="0"/>
                <xsd:element ref="bulletin_time" minOccurs="0"/>
                <xsd:element ref="valid_time_from" minOccurs="0"/>
                <xsd:element ref="valid_time_to" minOccurs="0"/>
                <xsd:element ref="remarks" minOccurs="0"/>
                <xsd:element ref="latitude" minOccurs="0"/>
                <xsd:element ref="longitude" minOccurs="0"/>
                <xsd:element ref="elevation_m" minOccurs="0"/>
                <xsd:element ref="forecast" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="raw_text" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Raw text of forecast
                ex: KORD 032151Z 23006KT 10SM BKN110 OVC250 14/03 A3000 RMK AO2 SLP162 VIRGA OHD T01440028
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="station_id" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                ICAO identifier
                ex: KORD
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="issue_time" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The time the product was issued (ISO 8601 date format)
                ex: 2023-11-04T08:50:00Z
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="bulletin_time" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The official time of the bulletin (ISO 8601 date format)
                ex: 2023-11-04T08:50:00Z
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="valid_time_from" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The time the period of validity starts (ISO 8601 date format)
                ex: 2023-11-03T21:00:00Z
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="valid_time_to" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The time the period of validity ends (ISO 8601 date format)
                ex: 2023-11-05T03:00:00Z
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="remarks" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Any additional remarks for TAF
                ex: RMK PCG
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="latitude" type="xsd:float">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Latitude of site in degrees
                ex: 41.9602
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="longitude" type="xsd:float">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Longitude of site in degrees
                ex: -87.9316
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="elevation_m" type="xsd:float">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Elevation of site in meters
                ex: 202
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:element name="forecast">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Each forecast within the TAF
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="fcst_time_from" minOccurs="0"/>
                <xsd:element ref="fcst_time_to" minOccurs="0"/>
                <xsd:element ref="change_indicator" minOccurs="0"/>
                <xsd:element ref="time_becoming" minOccurs="0"/>
                <xsd:element ref="probability" minOccurs="0"/>
                <xsd:element ref="wind_dir_degrees" minOccurs="0"/>
                <xsd:element ref="wind_speed_kt" minOccurs="0"/>
                <xsd:element ref="wind_gust_kt" minOccurs="0"/>
                <xsd:element ref="wind_shear_hgt_ft_agl" minOccurs="0"/>
                <xsd:element ref="wind_shear_dir_degrees" minOccurs="0"/>
                <xsd:element ref="wind_shear_speed_kt" minOccurs="0"/>
                <xsd:element ref="visibility_statute_mi" minOccurs="0"/>
                <xsd:element ref="altim_in_hg" minOccurs="0"/>
                <xsd:element ref="vert_vis_ft" minOccurs="0"/>
                <xsd:element ref="wx_string" minOccurs="0"/>
                <xsd:element ref="not_decoded" minOccurs="0"/>
                <xsd:element ref="sky_condition" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element ref="turbulence_condition" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element ref="icing_condition" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element ref="temperature" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="fcst_time_from" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The time the forecast validity starts (ISO 8601 date format)
                ex: 2023-11-08T00:00:00Z
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="fcst_time_to" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The time the forecast validity ends (ISO 8601 date format)
                ex: 2023-11-08T03:00:00Z
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="change_indicator" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Change type for each forecast
                ex: "TEMPO", "FM", "BECMG", "PROB"
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="time_becoming" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The time the forecast transitoin ends BECMG 0501/0503 - last time in sequence (ISO 8601 date format)
                ex: 2023-11-05T03:00:00Z
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="probability" type="xsd:int">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                The probability of occurrence from PROB30 change group
                ex: 30
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="wind_dir_degrees" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Wind direction in degrees of VRB for variable winds
                ex: VRB, 340, 10
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="wind_speed_kt" type="xsd:int"/>
    <xsd:element name="wind_gust_kt" type="xsd:int"/>
    <xsd:element name="wind_shear_hgt_ft_agl" type="xsd:short">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Wind shear layer top in feet
                ex: 2000
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="wind_shear_dir_degrees" type="xsd:short">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Wind direction at top of wind shear layer in degrees
                ex: 200
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="wind_shear_speed_kt" type="xsd:int">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Wind speed at top of wind shear layer in knots
                ex: 40
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="visibility_statute_mi" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Visibility in statute miles, 6+ is greater than 6 sm
                ex: 2, 6+
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="altim_in_hg" type="xsd:float"/>
    <xsd:element name="vert_vis_ft" type="xsd:short"/>
    <xsd:element name="wx_string" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Encoded present weather string
                ex: -SHRA, SN, TSRA, FG
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>
    <xsd:element name="not_decoded" type="xsd:string">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Any text that wasn't decoded
                ex: ROTOR CONEXIST
            </xsd:documentation>
        </xsd:annotation>
    </xsd:element>

    <xsd:element name="sky_condition">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Sky cover ex: CLR, CAVOK, FEW, SCT, BKN, OVC, OVX
                Cloud type ex: TCU
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:attribute name="sky_cover" type="xsd:string"/>
            <xsd:attribute name="cloud_base_ft_agl" type="xsd:int"/>
            <xsd:attribute name="cloud_type" type="xsd:string"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="turbulence_condition">
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Intensity is an integer from 0-9, see TAF implementation table
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:attribute name="turbulence_intensity" type="xsd:string"/>
            <xsd:attribute name="turbulence_min_alt_ft_agl" type="xsd:int"/>
            <xsd:attribute name="turbulence_max_alt_ft_agl" type="xsd:int"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="icing_condition" >
        <xsd:annotation>
            <xsd:documentation xml:lang="en">
                Intensity is an integer from 0-9, see TAF implementation table
            </xsd:documentation>
        </xsd:annotation>
        <xsd:complexType>
            <xsd:attribute name="icing_intensity" type="xsd:string"/>
            <xsd:attribute name="icing_min_alt_ft_agl" type="xsd:int"/>
            <xsd:attribute name="icing_max_alt_ft_agl" type="xsd:int"/>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="temperature">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="valid_time" />
                <xsd:element ref="sfc_temp_c" minOccurs="0"/>
                <xsd:element ref="max_temp_c" minOccurs="0" />
                <xsd:element ref="min_temp_c" minOccurs="0"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>

    <xsd:element name="valid_time" type="xsd:string" />
    <xsd:element name="sfc_temp_c" type="xsd:float"/>
    <xsd:element name="max_temp_c" type="xsd:string"/>
    <xsd:element name="min_temp_c" type="xsd:string"/>

</xsd:schema>
