<?xml version="1.0"?>
<definitions name="FlashCDDB"
             targetNamespace="urn:FlashCDDB"
             xmlns:typens="urn:FlashCDDB"
             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/">

			 
  <types>
    <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:FlashCDDB">
       
	   <!-- Create special data types for returned results, this case an array of artist/album names.-->  
      <xsd:complexType name="SearchResultArray">
        <xsd:all>
          <xsd:element name="searchElements" type="typens:SearchElementArray"/>
        </xsd:all>
      </xsd:complexType>

      <xsd:complexType name="SearchElementArray">
        <xsd:complexContent>
          <xsd:restriction base="soapenc:Array">
             <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:SearchElement[]"/>
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>

      <xsd:complexType name="SearchElement">
        <xsd:all>
          <xsd:element name="category" type="xsd:string"/>
		  <xsd:element name="cdID" type="xsd:string"/>
		  <xsd:element name="name" type="xsd:string"/>
        </xsd:all>
      </xsd:complexType>
	    
	  <!--- Contains an array of CD track listings for any Album. -->
      <xsd:complexType name="TracksResultArray">
        <xsd:all>
			<xsd:element name="TracksElements" type="typens:TracksElementArray" /> 
        </xsd:all>
      </xsd:complexType>
	  
      <xsd:complexType name="TracksElementArray">
        <xsd:complexContent>
          <xsd:restriction base="soapenc:Array">
             <xsd:attribute ref="soapenc:arrayType" wsdl:arrayType="typens:TracksElement[]"/>
          </xsd:restriction>
        </xsd:complexContent>
      </xsd:complexType>	  
      
      <xsd:complexType name="TracksElement">
        <xsd:all>
		  <xsd:element name="num" 			type="xsd:string"/>
          <xsd:element name="songlength" 	type="xsd:string"/>
          <xsd:element name="trackname" 	type="xsd:string"/>
        </xsd:all>
      </xsd:complexType>
	  
      <xsd:complexType name="AlbumInfoResult">
        <xsd:all>
		  <xsd:element name="tracks" 	type="xsd:string"/>
          <xsd:element name="totalTime" type="xsd:string"/>
          <xsd:element name="year" 		type="xsd:string"/>		
          <xsd:element name="genre" 	type="xsd:string"/>		
          <xsd:element name="categoryID" type="xsd:string"/>
        </xsd:all>
      </xsd:complexType>			  
	  
    </xsd:schema>
  </types> 

  
  <!-- Search Artist List -->
  <message name="searchArtistList">
    <part name="username"       type="xsd:string"/>
    <part name="password"       type="xsd:string"/>
    <part name="query"       	type="xsd:string"/>	
    <part name="field"       	type="xsd:string"/>	
  </message>

  <message name="searchArtistListResponse">
    <part name="return" type="typens:SearchResultArray"/>           
  </message>
  
  
  <!-- Gets Track listing of any Album - requires a unique CD ID. -->
  <message name="getTrackListing">
    <part name="username"       type="xsd:string"/>
    <part name="password"       type="xsd:string"/>
	<part name="category"       type="xsd:string"/>
	<part name="cdID"       	type="xsd:string"/>	
  </message>

  <message name="getTrackListingResponse">
    <part name="return"         type="typens:TracksResultArray"/>
  </message>

  <!-- Gets some additional Album Info. -->
  <message name="getAlbumInfo">
    <part name="username"       type="xsd:string"/>
    <part name="password"       type="xsd:string"/>
	<part name="category"       type="xsd:string"/>
	<part name="cdID"       	type="xsd:string"/>
  </message>

  <message name="getAlbumInfoResponse">
    <part name="return"         type="typens:AlbumInfoResult"/> 
  </message>  
  
  
  <portType name="FlashCDDBPort">

    <operation name="searchArtistList">
      <input message="typens:searchArtistList"/>
      <output message="typens:searchArtistListResponse"/>
    </operation>

    <operation name="getTrackListing">
      <input message="typens:getTrackListing"/>
      <output message="typens:getTrackListingResponse"/>
    </operation>

    <operation name="getAlbumInfo">
      <input message="typens:getAlbumInfo"/>
      <output message="typens:getAlbumInfoResponse"/>
    </operation>

  </portType>


  <binding name="FlashCDDBBinding" type="typens:FlashCDDBPort">
    <soap:binding style="rpc"
                  transport="http://schemas.xmlsoap.org/soap/http"/>

    <operation name="searchArtistList">
      <soap:operation soapAction="urn:FlashCDDBAction"/>
      <input>
        <soap:body use="encoded"
                   namespace="urn:FlashCDDB"
                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded"
                   namespace="urn:FlashCDDB"
                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>

    <operation name="getTrackListing">
      <soap:operation soapAction="urn:FlashCDDBAction"/>
      <input>
        <soap:body use="encoded"
                   namespace="urn:FlashCDDB"
                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded"
                   namespace="urn:FlashCDDB"
                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>

	
    <operation name="getAlbumInfo">
      <soap:operation soapAction="urn:FlashCDDBAction"/>
      <input>
        <soap:body use="encoded"
                   namespace="urn:FlashCDDB"
                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </input>
      <output>
        <soap:body use="encoded"
                   namespace="urn:FlashCDDB"
                   encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
      </output>
    </operation>
  </binding>

  <!-- Endpoint for flash-db CDDB Music Service -->
  <service name="FlashCDDBService">
   <documentation>The Flash-DB CDDB Music Service, returns music album information for any CD.</documentation>
    <port name="FlashCDDBPort" binding="typens:FlashCDDBBinding">
      <soap:address location="http://www.flash-db.com/services/ws/flashCDDB.php"/>
    </port>
  </service>

</definitions>