<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:agg="http://datafed.net/xs/Aggregator" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://datafed.net/xs/Aggregator" xmlns="http://schemas.xmlsoap.org/wsdl/">
    <documentation>Performs aggregation operations on tables.</documentation>
    <types>
        <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dp="http://datafed.net/xs/DataPrimitives" targetNamespace="http://datafed.net/xs/AggregatorOptions" xmlns="http://datafed.net/xs/AggregatorOptions">
            <xs:import namespace="http://datafed.net/xs/DataPrimitives" schemaLocation="DataPrimitives.xsd" />
            <xs:complexType name="AggSettingsType">
                <xs:sequence>
                    <xs:element name="data_columns" type="xs:string" default="" />
                    <xs:element name="agg_oper" type="AggOperatorType" default="avg" />
                    <xs:element name="agg_limit" type="xs:float" default="50" />
                    <xs:element name="min_count" type="xs:int" default="5" />
                    <xs:element name="group_by" type="xs:string" default="datetime" />
                    <xs:element name="additional_dimension_fields" type="xs:string" default="" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="AggCyclicSettingsType">
                <xs:sequence>
                    <xs:element name="cycle" type="AggCycleType" default="daily" />
                    <xs:element name="data_columns" type="xs:string" />
                    <xs:element name="agg_oper" type="AggOperatorType" default="avg" />
                    <xs:element name="agg_limit" type="xs:float" default="50" />
                    <xs:element name="min_count" type="xs:int" default="75" />
                    <xs:element name="resolution" type="dp:TimeUnitType" default="hour" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="AggCycleType">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="daily" />
                    <xs:enumeration value="weekly" />
                    <xs:enumeration value="yearly" />
                </xs:restriction>
            </xs:simpleType>
            <xs:simpleType name="AggOperatorType">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="avg" />
                    <xs:enumeration value="count" />
                    <xs:enumeration value="max" />
                    <xs:enumeration value="median" />
                    <xs:enumeration value="min" />
                    <xs:enumeration value="none" />
                    <xs:enumeration value="percentile" />
                    <xs:enumeration value="std" />
                    <xs:enumeration value="sum" />
                </xs:restriction>
            </xs:simpleType>
            <xs:complexType name="AggregatorsType">
                <xs:sequence>
                    <xs:element name="sum" type="xs:boolean" default="false" />
                    <xs:element name="count" type="xs:boolean" default="false" />
                    <xs:element name="avg" type="xs:boolean" default="true" />
                    <xs:element name="std" type="xs:boolean" default="false" />
                    <xs:element name="min" type="xs:boolean" default="false" />
                    <xs:element name="max" type="xs:boolean" default="false" />
                    <xs:element name="median" type="xs:boolean" default="false" />
                    <xs:element name="percentile" type="xs:boolean" default="false" />
                    <xs:element name="percentile_limit" type="xs:float" default="50" />
                    <xs:element name="min_space_dist" type="xs:boolean" default="false" />
                    <xs:element name="min_time_diff" type="xs:boolean" default="false" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="SmootherSettingsType">
                <xs:sequence>
                    <xs:element name="use_smoother" type="SmootherMethodsType" default="none" />
                    <xs:element name="smooth_before" type="xs:string" default="P1D" />
                    <xs:element name="smooth_after" type="xs:string" default="P1D" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="GridSmootherSettingsType">
                <xs:sequence>
                    <xs:element name="use_smoother" type="xs:boolean" default="true" />
                    <xs:element name="extent_lat" type="xs:int" default="2" />
                    <xs:element name="extent_lon" type="xs:int" default="2" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="SmootherMethodsType">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="none" />
                    <xs:enumeration value="statistics" />
                    <xs:enumeration value="gaussian" />
                    <xs:enumeration value="stat_and_gauss" />
                </xs:restriction>
            </xs:simpleType>
        </xs:schema>
        <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dp="http://datafed.net/xs/DataPrimitives" xmlns:aggo="http://datafed.net/xs/AggregatorOptions" xmlns:tbl="http://datafed.net/xs/Table" targetNamespace="http://datafed.net/xs/Aggregator" xmlns="http://datafed.net/xs/Aggregator">
            <xs:import namespace="http://datafed.net/xs/DataPrimitives" schemaLocation="DataPrimitives.xsd" />
            <xs:import namespace="http://datafed.net/xs/Table" schemaLocation="Table.xsd" />
            <xs:import namespace="http://datafed.net/xs/AggregatorOptions" schemaLocation="AggregatorOptions.xsd" />
            <xs:element name="TableAggregate">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                        <xs:element name="Settings" type="aggo:AggSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="CyclicAggregate">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                        <xs:element name="Settings" type="aggo:AggCyclicSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="PeriodicAggregate">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                        <xs:element name="Settings" type="aggo:AggSettingsType" />
                        <xs:element name="Periodicity" type="PeriodicityType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:complexType name="PeriodicityType">
                <xs:sequence>
                    <xs:element name="unit" type="dp:TimeUnitType" />
                    <xs:element name="multiplier" type="xs:int" />
                </xs:sequence>
            </xs:complexType>
            <xs:element name="RangeAggregate">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ReferenceTable" type="tbl:TableType" />
                        <xs:element name="ref_column" type="xs:string" />
                        <xs:element name="DataTable" type="tbl:TableType" />
                        <xs:element name="data_column" type="xs:string" />
                        <xs:element name="Settings" type="RangeSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:complexType name="RangeSettingsType">
                <xs:sequence>
                    <xs:element name="duration" type="xs:duration" default="P1D" />
                    <xs:element name="radius" type="xs:float" default="50" />
                    <xs:element name="min_sites" type="xs:int" default="1" />
                    <xs:element name="max_sites" type="xs:int" default="10" />
                    <xs:element name="aggregators" type="aggo:AggregatorsType" />
                </xs:sequence>
            </xs:complexType>
            <xs:element name="RegionAggregate">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                        <xs:element name="Settings" type="RegionSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:complexType name="RegionSettingsType">
                <xs:sequence>
                    <xs:element name="dataset_abbr" type="dp:DatasetAbbrType" />
                    <xs:element name="data_columns" type="xs:string" />
                    <xs:element name="agg_oper" type="aggo:AggOperatorType" default="avg" />
                    <xs:element name="agg_limit" type="xs:float" default="50" />
                    <xs:element name="min_count" type="xs:float" default="75" />
                </xs:sequence>
            </xs:complexType>
            <xs:element name="RegionFilter">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                        <xs:element name="Settings" type="RegionFilterSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:complexType name="RegionFilterSettingsType">
                <xs:sequence>
                    <xs:element name="dataset_abbr" type="dp:DatasetAbbrType" />
                    <xs:element name="data_columns" type="xs:string" />
                    <xs:element name="loc_code" type="dp:LocCodeType" />
                </xs:sequence>
            </xs:complexType>
            <xs:element name="LocationFilter">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                        <xs:element name="Settings" type="LocationFilterSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:complexType name="LocationFilterSettingsType">
                <xs:sequence>
                    <xs:element name="dataset_abbr" type="dp:DatasetAbbrType" />
                    <xs:element name="data_columns" type="xs:string" />
                    <xs:element name="all_locations" type="xs:boolean" />
                    <xs:element name="loc_code" type="dp:LocCodeType" />
                </xs:sequence>
            </xs:complexType>
            <xs:element name="SmoothTimeSeries">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                        <xs:element name="SmootherSettings" type="aggo:SmootherSettingsType" />
                        <xs:element name="Settings" type="aggo:AggSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="JulianDayTimeSeries">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                        <xs:element name="use_julian_days" type="xs:boolean" />
                        <xs:element name="SmootherSettings" type="aggo:SmootherSettingsType" />
                        <xs:element name="Settings" type="aggo:AggSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Response">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tbl:Table" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
        <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:lin="http://datafed.net/xs/Lineage" targetNamespace="http://datafed.net/xs/Table" xmlns="http://datafed.net/xs/Table">
            <xs:import namespace="http://datafed.net/xs/Lineage" schemaLocation="Lineage.xsd" />
            <xs:element name="Table" type="TableType" />
            <xs:complexType name="TableType">
                <xs:sequence>
                    <xs:element name="TableRef" type="TableRefType" default="http://dataserver.net/uri_pointing_to_.Net_DataSet_with_schema" />
                    <xs:element ref="lin:Statistics" />
                    <xs:element ref="lin:LineageList" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="TableRefType">
                <xs:restriction base="xs:anyURI" />
            </xs:simpleType>
        </xs:schema>
        <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://datafed.net/xs/DataPrimitives" xmlns="http://datafed.net/xs/DataPrimitives">
            <xs:simpleType name="DatasetAbbrType">
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="DateTimeType">
                <xs:union memberTypes="xs:dateTime xs:date" />
            </xs:simpleType>
            <xs:simpleType name="DateTimeListType">
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="DateTimeNowType">
                <xs:union memberTypes="xs:string xs:dateTime xs:date" />
            </xs:simpleType>
            <xs:complexType name="DateTimeRangeType">
                <xs:sequence>
                    <xs:element name="time_min" type="DateTimeType" default="1970-01-01T00:00:00" />
                    <xs:element name="time_max" type="DateTimeNowType" default="now" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="TimeUnitType">
                <xs:restriction base="xs:string">
                    <xs:enumeration value="year" />
                    <xs:enumeration value="month" />
                    <xs:enumeration value="week" />
                    <xs:enumeration value="day" />
                    <xs:enumeration value="hour" />
                    <xs:enumeration value="minute" />
                    <xs:enumeration value="second" />
                </xs:restriction>
            </xs:simpleType>
            <xs:complexType name="LatLonType">
                <xs:sequence>
                    <xs:element name="lat" type="xs:float" default="40" />
                    <xs:element name="lon" type="xs:float" default="-90" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="LatLonRangeType">
                <xs:sequence>
                    <xs:element name="lat_min" type="xs:float" default="-90" />
                    <xs:element name="lat_max" type="xs:float" default="90" />
                    <xs:element name="lon_min" type="xs:float" default="-180" />
                    <xs:element name="lon_max" type="xs:float" default="180" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="RangeType">
                <xs:sequence>
                    <xs:element name="min" type="xs:float" default="0" />
                    <xs:element name="max" type="xs:float" default="1" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="RangeIType">
                <xs:sequence>
                    <xs:element name="min" type="xs:int" default="0" />
                    <xs:element name="max" type="xs:int" default="1" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="LocCodesType">
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="LocCodeType">
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="mlstring">
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="script">
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:complexType name="MonthsType">
                <xs:sequence>
                    <xs:element name="Jan" type="xs:boolean" default="true" />
                    <xs:element name="Feb" type="xs:boolean" default="true" />
                    <xs:element name="Mar" type="xs:boolean" default="true" />
                    <xs:element name="Apr" type="xs:boolean" default="true" />
                    <xs:element name="May" type="xs:boolean" default="true" />
                    <xs:element name="Jun" type="xs:boolean" default="true" />
                    <xs:element name="Jul" type="xs:boolean" default="true" />
                    <xs:element name="Aug" type="xs:boolean" default="true" />
                    <xs:element name="Sep" type="xs:boolean" default="true" />
                    <xs:element name="Oct" type="xs:boolean" default="true" />
                    <xs:element name="Nov" type="xs:boolean" default="true" />
                    <xs:element name="Dec" type="xs:boolean" default="true" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="NumberListType">
                <!-- should be <xs:list itemType="xs:string" /> but list are not implemented in views -->
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="ParamAbbrType">
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="ParamAbbrsType">
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="PositiveFloatType">
                <xs:restriction base="xs:float">
                    <xs:minExclusive value="0" />
                </xs:restriction>
            </xs:simpleType>
            <xs:complexType name="SizeFType">
                <xs:sequence>
                    <xs:element name="width" type="xs:float" />
                    <xs:element name="height" type="xs:float" />
                </xs:sequence>
            </xs:complexType>
            <xs:complexType name="SizeIType">
                <xs:sequence>
                    <xs:element name="width" type="xs:int" />
                    <xs:element name="height" type="xs:int" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="ZeroToOneType">
                <xs:restriction base="xs:float">
                    <xs:minInclusive value="0" />
                    <xs:maxInclusive value="1" />
                </xs:restriction>
            </xs:simpleType>
        </xs:schema>
        <xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://datafed.net/xs/Lineage" xmlns="http://datafed.net/xs/Lineage">
            <xs:element name="LineageList" type="LineageListType" />
            <xs:complexType name="LineageListType">
                <xs:sequence>
                    <xs:any namespace="##any" processContents="skip" minOccurs="0" maxOccurs="unbounded" />
                </xs:sequence>
            </xs:complexType>
            <xs:element name="LineageComment" type="LineageComment" />
            <xs:complexType name="LineageComment">
                <xs:sequence>
                    <xs:element name="subject" type="xs:string" />
                    <xs:element name="body" type="xs:string" />
                </xs:sequence>
            </xs:complexType>
            <xs:element name="Statistics" type="Statistics" />
            <xs:complexType name="Statistics">
                <xs:sequence>
                    <xs:element name="sum" type="xs:float" default="0" />
                    <xs:element name="avg" type="xs:float" default="NaN" />
                    <xs:element name="min" type="xs:float" default="NaN" />
                    <xs:element name="max" type="xs:float" default="NaN" />
                    <xs:element name="null_count" type="xs:int" default="0" />
                    <xs:element name="total_count" type="xs:int" default="0" />
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </types>
    <message name="TableAggregateSoapIn">
        <part name="parameters" element="agg:TableAggregate" />
    </message>
    <message name="CyclicAggregateSoapIn">
        <part name="parameters" element="agg:CyclicAggregate" />
    </message>
    <message name="RegionAggregateSoapIn">
        <part name="parameters" element="agg:RegionAggregate" />
    </message>
    <message name="RegionFilterSoapIn">
        <part name="parameters" element="agg:RegionFilter" />
    </message>
    <message name="LocationFilterSoapIn">
        <part name="parameters" element="agg:LocationFilter" />
    </message>
    <message name="PeriodicAggregateSoapIn">
        <part name="parameters" element="agg:PeriodicAggregate" />
    </message>
    <message name="RangeAggregateSoapIn">
        <part name="parameters" element="agg:RangeAggregate" />
    </message>
    <message name="SmoothTimeSeriesSoapIn">
        <part name="parameters" element="agg:SmoothTimeSeries" />
    </message>
    <message name="JulianDayTimeSeriesSoapIn">
        <part name="parameters" element="agg:JulianDayTimeSeries" />
    </message>
    <message name="SoapOut">
        <part name="parameters" element="agg:Response" />
    </message>
    <portType name="AggregatorSoap">
        <operation name="TableAggregate">
            <input message="agg:TableAggregateSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
        <operation name="CyclicAggregate">
            <input message="agg:CyclicAggregateSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
        <operation name="RegionAggregate">
            <input message="agg:RegionAggregateSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
        <operation name="RegionFilter">
            <input message="agg:RegionFilterSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
        <operation name="LocationFilter">
            <input message="agg:LocationFilterSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
        <operation name="PeriodicAggregate">
            <input message="agg:PeriodicAggregateSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
        <operation name="RangeAggregate">
            <input message="agg:RangeAggregateSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
        <operation name="SmoothTimeSeries">
            <input message="agg:SmoothTimeSeriesSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
        <operation name="JulianDayTimeSeries">
            <input message="agg:JulianDayTimeSeriesSoapIn" />
            <output message="agg:SoapOut" />
        </operation>
    </portType>
    <binding name="AggregatorSoap" type="agg:AggregatorSoap">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
        <operation name="TableAggregate">
            <documentation>Aggregates along group_dimension, yielding an aggregated value with desired dimensionality.</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/TableAggregate" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="CyclicAggregate">
            <documentation>grabs points around a reference point, from a lat/lon/time window.</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/CyclicAggregate" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="RegionAggregate">
            <documentation>For each time: Creates an aggregated value for a region from locations in that region.</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/RegionAggregate" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="RegionFilter">
            <documentation>Selects all the locations from a region.</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/RegionFilter" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="LocationFilter">
            <documentation>Selects data from one location if all_locations==false, else no-op</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/LocationFilter" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="PeriodicAggregate">
            <documentation>Changes the time dimension periodicity. Aggregates values in each period.</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/PeriodicAggregate" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="RangeAggregate">
            <documentation>grabs points around a reference point, from a lat/lon/time window.</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/RangeAggregate" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="SmoothTimeSeries">
            <documentation>Makes Timeseries smoother by aggregating around the point.</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/SmoothTimeSeries" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="JulianDayTimeSeries">
            <documentation>Aggregates for a Julian Day and repeats this for the whole time series.</documentation>
            <soap:operation soapAction="http://datafed.net/Aggregator/JulianDayTimeSeries" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
    </binding>
    <service name="Aggregator">
        <port name="AggregatorSoap" binding="agg:AggregatorSoap">
            <soap:address location="http://webapps.datafed.net/Aggregator.asmx" />
        </port>
    </service>
</definitions>