<?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:cagg="http://datafed.net/xs/CubeAggregator" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://datafed.net/xs/CubeAggregator" xmlns="http://schemas.xmlsoap.org/wsdl/">
    <documentation>Performs aggregation operations on cubes.</documentation>
    <types>
        <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:cube="http://datafed.net/xs/Cube" targetNamespace="http://datafed.net/xs/CubeAggregator" xmlns="http://datafed.net/xs/CubeAggregator">
            <xs:import namespace="http://datafed.net/xs/DataPrimitives" schemaLocation="DataPrimitives.xsd" />
            <xs:import namespace="http://datafed.net/xs/Cube" schemaLocation="Cube.xsd" />
            <xs:import namespace="http://datafed.net/xs/AggregatorOptions" schemaLocation="AggregatorOptions.xsd" />
            <xs:element name="CubeAggregate">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="cube:Cube" />
                        <xs:element name="Settings" type="aggo:AggSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="CyclicAggregate">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="cube:Cube" />
                        <xs:element name="Settings" type="aggo:AggCyclicSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="SmoothTimeSeries">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="cube:Cube" />
                        <xs:element name="SmootherSettings" type="aggo:SmootherSettingsType" />
                        <xs:element name="Settings" type="aggo:AggSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="SmoothGrid">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="cube:Cube" />
                        <xs:element name="SmootherSettings" type="aggo:GridSmootherSettingsType" />
                        <xs:element name="Settings" type="aggo:AggSettingsType" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="Response">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="cube:Cube" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
        <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:lin="http://datafed.net/xs/Lineage" targetNamespace="http://datafed.net/xs/Cube" xmlns="http://datafed.net/xs/Cube">
            <xs:import namespace="http://datafed.net/xs/Lineage" schemaLocation="Lineage.xsd" />
            <xs:element name="Cube" type="CubeType" />
            <xs:complexType name="CubeType">
                <xs:sequence>
                    <xs:element name="CubeRef" type="CubeRefType" default="http://dataserver.net/uri_pointing_to_NetCDF_with_CF2_conventions" />
                    <xs:element ref="lin:Statistics" minOccurs="0" />
                    <xs:element ref="lin:LineageList" minOccurs="0" />
                </xs:sequence>
            </xs:complexType>
            <xs:simpleType name="CubeFormatType">
                <xs:annotation>
                    <xs:appinfo>xs_handler:CAPITA.Wui,CAPITA.Wui.CubeFormats</xs:appinfo>
                </xs:annotation>
                <xs:restriction base="xs:string" />
            </xs:simpleType>
            <xs:simpleType name="CubeRefType">
                <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="CubeAggregateSoapIn">
        <part name="parameters" element="cagg:CubeAggregate" />
    </message>
    <message name="CyclicAggregateSoapIn">
        <part name="parameters" element="cagg:CyclicAggregate" />
    </message>
    <message name="SmoothTimeSeriesSoapIn">
        <part name="parameters" element="cagg:SmoothTimeSeries" />
    </message>
    <message name="SmoothGridSoapIn">
        <part name="parameters" element="cagg:SmoothGrid" />
    </message>
    <message name="SoapOut">
        <part name="parameters" element="cagg:Response" />
    </message>
    <portType name="CubeAggregatorSoap">
        <operation name="CubeAggregate">
            <input message="cagg:CubeAggregateSoapIn" />
            <output message="cagg:SoapOut" />
        </operation>
        <operation name="CyclicAggregate">
            <input message="cagg:CyclicAggregateSoapIn" />
            <output message="cagg:SoapOut" />
        </operation>
        <operation name="SmoothTimeSeries">
            <input message="cagg:SmoothTimeSeriesSoapIn" />
            <output message="cagg:SoapOut" />
        </operation>
        <operation name="SmoothGrid">
            <input message="cagg:SmoothGridSoapIn" />
            <output message="cagg:SoapOut" />
        </operation>
    </portType>
    <binding name="CubeAggregatorSoap" type="cagg:CubeAggregatorSoap">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
        <operation name="CubeAggregate">
            <documentation>Aggregates along some dimensions, yielding an aggregated value in each remaining location.</documentation>
            <soap:operation soapAction="http://datafed.net/CubeAggregator/CubeAggregate" 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/CubeAggregator/CyclicAggregate" 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/CubeAggregator/SmoothTimeSeries" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
        <operation name="SmoothGrid">
            <documentation>Makes Grids smoother by aggregating around the point.</documentation>
            <soap:operation soapAction="http://datafed.net/CubeAggregator/SmoothGrid" style="document" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
            </output>
        </operation>
    </binding>
    <service name="CubeAggregator">
        <port name="CubeAggregatorSoap" binding="cagg:CubeAggregatorSoap">
            <soap:address location="http://webapps.datafed.net/CubeAggregator.asmx" />
        </port>
    </service>
</definitions>