<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://msearch.amazonaws.com/doc/2007-03-15/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://www.w3.org/2005/08/addressing"
                  xmlns:tns="http://msearch.amazonaws.com/doc/2007-03-15/">
    <wsdl:types>
        <xs:schema targetNamespace="http://msearch.amazonaws.com/doc/2007-03-15/"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://msearch.amazonaws.com/doc/2007-03-15/"
                   elementFormDefault="qualified">
            <!-- **************************** AlexaMSR Interface *************************** -->
            <!-- GetStatus Action -->
            <xs:element name="GetStatus">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Query the search engine to find out the status of a StartSearch or StartGrep
                        request. If the status is 'Completed' then the URL where you can download your
                        results from is returned.
                    </xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ActionRequestId" type="xs:string"/>
                        <xs:element name="AWSAccessKeyId" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="Timestamp" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="Signature" type="xs:string" minOccurs="0" maxOccurs="1"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- GetStatus Action Response -->
            <xs:element name="GetStatusResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:GetStatusResult"/>
                        <xs:element ref="tns:ResponseMetadata"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- ListActiveIds Action -->
            <xs:element name="ListActiveIds">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        List the request ids of all Million Search Results StartSearch or StartGrep actions
                        that are either executing or available for download.
                        You can ask for the status of any of these request IDs.
                    </xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="AWSAccessKeyId" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="Timestamp" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="Signature" type="xs:string" minOccurs="0" maxOccurs="1"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- ListActiveIds Action Response -->
            <xs:element name="ListActiveIdsResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:ListActiveIdsResult"/>
                        <xs:element ref="tns:ResponseMetadata"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- StartGrep Action -->
            <xs:element name="StartGrep">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        The StartGrep action finds documents matching a regular expression. When a
                        document is initially added to the Alexa search index, about fifty different
                        document attributes are indexed in separate search fields. The StartGrep action
                        allows you to filter your search results using criteria that Alexa has not
                        indexed. The regular expression is run against the actual document. You could
                        use this action, for example, to select documents containing a specific HTML tag.
                    </xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="InputFileUrl" type="xs:anyURI"/>
                        <xs:element name="RegExPattern" type="xs:string"/>
                        <xs:element name="MaxNumberOfDocuments" type="xs:integer"/>
                        <xs:element name="MaxNumberOfCPUHours" type="xs:float"/>
                        <xs:element name="AWSAccessKeyId" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="Timestamp" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="Signature" type="xs:string" minOccurs="0" maxOccurs="1"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- StartGrep Action Response -->
            <xs:element name="StartGrepResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:StartGrepResult"/>
                        <xs:element ref="tns:ResponseMetadata"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- StartSearch Action -->
            <xs:element name="StartSearch">
                <xs:annotation>
                    <xs:documentation xml:lang="en">
                        Start an offline search query that will return up to 1,000,000 results in a
                        downloadable text file.
                    </xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Query" type="xs:string"/>
                        <xs:element name="MaxNumberOfDocuments" type="xs:integer"/>
                        <xs:element name="MaxTime" type="xs:integer" minOccurs="0"/>
                        <xs:element name="CachedDocumentsOnly" type="xs:boolean" minOccurs="0"/>
                        <xs:element name="AWSAccessKeyId" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="Timestamp" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="Signature" type="xs:string" minOccurs="0" maxOccurs="1"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- StartSearch Action Response -->
            <xs:element name="StartSearchResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element ref="tns:StartSearchResult"/>
                        <xs:element ref="tns:ResponseMetadata"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- ******************************* AlexaMSR Types ************************* -->
            <!-- GetStatus Result Data -->
            <xs:element name="GetStatusResult">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Status" type="tns:Status"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- ListActiveIds Result Data -->
            <xs:element name="ListActiveIdsResult">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ActiveRequestId" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- StartGrep Result Data -->
            <xs:element name="StartGrepResult">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ActionRequestId" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- StartSearch Result Data -->
            <xs:element name="StartSearchResult">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="ActionRequestId" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- Status -->
            <xs:complexType name="Status">
                <xs:sequence>
                    <xs:element name="ActionRequestId" type="xs:string"/>                    
                    <xs:element name="Code">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="Queued"/>
                                <xs:enumeration value="Executing"/>
                                <xs:enumeration value="Completed"/>
                                <xs:enumeration value="Error"/>
                                <xs:enumeration value="Unknown"/>
                                <xs:enumeration value="Expired"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="Message" type="xs:string" minOccurs="0"/>
                    <xs:element name="ActionName" type="xs:string"/>
                    <xs:element name="StartDate" type="xs:string" minOccurs="0"/>
                    <xs:element name="DownloadUrl" type="xs:anyURI" minOccurs="0"/>
                </xs:sequence>
            </xs:complexType>
            <!-- ******************************** AWS Types *********************************** -->
            <xs:element name="ResponseMetadata">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="RequestId" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <!-- // REST Error Response // -->
            <xs:element name="ErrorResponse">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="Error" type="tns:Error" maxOccurs="unbounded"/>
                        <xs:element name="RequestId" type="xs:string"/>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:complexType name="Error">
                <xs:sequence>
                    <xs:element name="Type">
                        <xs:simpleType>
                            <xs:restriction base="xs:string">
                                <xs:enumeration value="Receiver"/>
                                <xs:enumeration value="Sender"/>
                            </xs:restriction>
                        </xs:simpleType>
                    </xs:element>
                    <xs:element name="Code" type="xs:string"/>
                    <xs:element name="Message" type="xs:string"/>
                    <xs:element name="Detail" minOccurs="0">
                        <xs:complexType>
                            <xs:sequence>
                                <xs:any namespace="##any" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
                            </xs:sequence>
                            <xs:anyAttribute namespace="##other" processContents="lax"/>
                        </xs:complexType>
                    </xs:element>
                </xs:sequence>
            </xs:complexType>
        </xs:schema>
    </wsdl:types>
    <!-- ******************************** Messages ********************************* -->
    <wsdl:message name="GetStatusRequestMsg">
        <wsdl:part name="body" element="tns:GetStatus"/>
    </wsdl:message>
    <wsdl:message name="GetStatusResponseMsg">
        <wsdl:part name="body" element="tns:GetStatusResponse"/>
    </wsdl:message>
    <wsdl:message name="ListActiveIdsRequestMsg">
        <wsdl:part name="body" element="tns:ListActiveIds"/>
    </wsdl:message>
    <wsdl:message name="ListActiveIdsResponseMsg">
        <wsdl:part name="body" element="tns:ListActiveIdsResponse"/>
    </wsdl:message>
    <wsdl:message name="StartGrepRequestMsg">
        <wsdl:part name="body" element="tns:StartGrep"/>
    </wsdl:message>
    <wsdl:message name="StartGrepResponseMsg">
        <wsdl:part name="body" element="tns:StartGrepResponse"/>
    </wsdl:message>
    <wsdl:message name="StartSearchRequestMsg">
        <wsdl:part name="body" element="tns:StartSearch"/>
    </wsdl:message>
    <wsdl:message name="StartSearchResponseMsg">
        <wsdl:part name="body" element="tns:StartSearchResponse"/>
    </wsdl:message>
    <!-- ********************************* Ports *********************************** -->
    <wsdl:portType name="AlexaMSRPortType">
        <wsdl:operation name="GetStatus">
            <wsdl:documentation>
                Query the search engine to find out the status of a StartSearch or StartGrep
                request. If the status is 'Completed' then the URL where you can download your
                results from is returned.
            </wsdl:documentation>
            <wsdl:input message="tns:GetStatusRequestMsg" wsa:Action="urn:GetStatus"/>
            <wsdl:output message="tns:GetStatusResponseMsg" wsa:Action="urn:GetStatus:Response"/>
        </wsdl:operation>
        <wsdl:operation name="ListActiveIds">
            <wsdl:documentation>
                List the request ids of all Million Search Results StartSearch or StartGrep
                actions that are either executing or available for download. You can ask for
                the status of any of these request IDs.
            </wsdl:documentation>
            <wsdl:input message="tns:ListActiveIdsRequestMsg" wsa:Action="urn:ListActiveIds"/>
            <wsdl:output message="tns:ListActiveIdsResponseMsg" wsa:Action="urn:ListActiveIds:Response"/>
        </wsdl:operation>
        <wsdl:operation name="StartGrep">
            <wsdl:documentation>
                The StartGrep action finds documents matching a regular expression. When a
                document is initially added to the Alexa search index, about fifty different
                document attributes are indexed in separate search fields. The StartGrep action
                allows you to filter your search results using criteria that Alexa has not
                indexed. The regular expression is run against the actual document. You could
                use this action, for example, to select documents containing a specific HTML tag.
            </wsdl:documentation>
            <wsdl:input message="tns:StartGrepRequestMsg" wsa:Action="urn:StartGrep"/>
            <wsdl:output message="tns:StartGrepResponseMsg" wsa:Action="urn:StartGrep:Response"/>
        </wsdl:operation>
        <wsdl:operation name="StartSearch">
            <wsdl:documentation>
                Start an offline search query that will return up to 1,000,000 results in a
                downloadable text file.
            </wsdl:documentation>
            <wsdl:input message="tns:StartSearchRequestMsg" wsa:Action="urn:StartSearch"/>
            <wsdl:output message="tns:StartSearchResponseMsg" wsa:Action="urn:StartSearch:Response"/>
        </wsdl:operation>
    </wsdl:portType>
    <!-- ******************************** Bindings ********************************** -->
    <wsdl:binding name="AlexaMSRBinding" type="tns:AlexaMSRPortType">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <wsdl:operation name="GetStatus">
            <soap:operation soapAction="GetStatus"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="ListActiveIds">
            <soap:operation soapAction="ListActiveIds"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="StartGrep">
            <soap:operation soapAction="StartGrep"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
        <wsdl:operation name="StartSearch">
            <soap:operation soapAction="StartSearch"/>
            <wsdl:input>
                <soap:body use="literal"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="literal"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <!-- ******************************** Service ********************************** -->
    <wsdl:service name="AlexaMSR">
        <wsdl:documentation>
            The Million Search Results Service gives you access to up to 1,000,000 results
            that match a query. When your search process has completed, the results are
            sorted, gzipped and uploaded to the Amazon S3 service as a single file.
        </wsdl:documentation>
        <wsdl:port name="AlexaMSRPort" binding="tns:AlexaMSRBinding">
            <soap:address location="http://msearch.amazonaws.com"/>
        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>