<?xml version="1.0" encoding="UTF-8"?>

<!-- WSDL Description of the Open Access Plagiarism Search.
     The API is located at http://oaps.eu/api/ -->

<definitions name="OapsAPI"
             targetNamespace="urn:OapsAPI"
             xmlns:typens="urn:OapsAPI"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
             xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
             xmlns="http://schemas.xmlsoap.org/wsdl/">


  <!-- 
       Special messages types
  -->
  <types>
    <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:OapsAPI">
      <xsd:complexType name="login">
        <xsd:all>
          <xsd:element name="user" type="xsd:string"/>		<!-- username -->
          <xsd:element name="key" type="xsd:string"/>		<!-- md5 hash of password -->
        </xsd:all>
      </xsd:complexType>
      <xsd:complexType name="reportResult">
        <xsd:all>
          <xsd:element name="jobid" type="xsd:string"/>			<!-- empty if no report available -->
          <xsd:element name="status" type="xsd:string"/>		<!-- the status of the job wich may be OK, ERROR or PROCESSING -->
          <xsd:element name="rating" type="xsd:int"/>			<!-- rating in percent -->
          <xsd:element name="file" type="xsd:base64Binary"/>    <!-- the report in HTML format base64 encoded -->
        </xsd:all>
      </xsd:complexType>
    </xsd:schema>
  </types>


  <!-- 
       Message initiating a new job
  -->
  <message name="startJob">
    <part name="login" type="typens:login"/>            <!-- login information, see above -->
    <part name="data" type="xsd:base64Binary"/>         <!-- the file to be checked base64 encoded -->
    <part name="lang" type="xsd:string"/>				<!-- report language: de=deutsch; en=english; fr=francais -->
  </message>
  <message name="startJobResponse">
    <part name="jobid" type="xsd:string"/>			    <!-- new unique ID for the started job -->
  </message>
  <!-- 
       Message getting one report
  -->
  <message name="getReport">
    <part name="login" type="typens:login"/>            <!-- login information, see above -->
    <part name="jobid" type="xsd:string"/>              <!-- the id of the job -->
  </message>
  <message name="getNextReport">
    <part name="login" type="typens:login"/>            <!-- login information, see above -->
  </message>
  <message name="getReportResponse">
    <part name="report" type="typens:reportResult"/>    <!-- details of the report (see above) or NULL if the report is not available -->
  </message>
  <!-- 
       Message to delete a job completely 
  -->
  <message name="deleteJob">
    <part name="login" type="typens:login"/>            <!-- login information, see above -->
    <part name="jobid" type="xsd:string"/>              <!-- the id of the job -->
  </message>
  <message name="deleteJobResponse">
    <part name="deleted" type="xsd:boolean"/>		    <!-- true/false -->
  </message>

  <!-- 
       Port for OAPS WS APIs 
  -->
  <portType name="OapsAPIPort">
    <operation name="startJob">
      <input message="typens:startJob"/>
      <output message="typens:startJobResponse"/>
    </operation>
    <operation name="getReport">
      <input message="typens:getReport"/>
      <output message="typens:getReportResponse"/>
    </operation>
    <operation name="getNextReport">
      <input message="typens:getNextReport"/>
      <output message="typens:getReportResponse"/>
    </operation>
    <operation name="deleteJob">
      <input message="typens:deleteJob"/>
      <output message="typens:deleteJobResponse"/>
    </operation>
  </portType>


  <!-- 
       Binding for OAPS APIs - RPC over SOAP over HTTP 
  -->
  <binding name="OapsAPIBinding" type="typens:OapsAPIPort">
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="startJob">
      <soap:operation soapAction="urn:OapsAPIAction"/>
      <input>
        <soap:body use="encoded" namespace="urn:OapsAPI" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded" namespace="urn:OapsAPI" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>
    <operation name="getReport">
      <soap:operation soapAction="urn:OapsAPIAction"/>
      <input>
        <soap:body use="encoded" namespace="urn:OapsAPI" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded" namespace="urn:OapsAPI" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>
    <operation name="getNextReport">
      <soap:operation soapAction="urn:OapsAPIAction"/>
      <input>
        <soap:body use="encoded" namespace="urn:OapsAPI" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded" namespace="urn:OapsAPI" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>
    <operation name="deleteJob">
      <soap:operation soapAction="urn:OapsAPIAction"/>
      <input>
        <soap:body use="encoded" namespace="urn:OapsAPI" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded" namespace="urn:OapsAPI" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>
  </binding>

  <service name="OapsAPI">
    <port name="OapsAPIPort" binding="typens:OapsAPIBinding">
        <soap:address location="http://oaps.eu/api/soap.php"/>
    </port>
  </service>

</definitions>
