<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>WSDL</title>
<link rel="stylesheet" type="text/css" href="../xslides-summary.css"></link>
<meta name="AUTHOR" content="Jose M Vidal"></meta>
<meta name="GENERATOR" content="xslides.el, written by J.M. Vidal"></meta>
</head>
<!--HEADER LEFT "http://jmvidal.cse.sc.edu/talks/wsdl/" --> 
<body>  
<h1 class="slidelist">WSDL</h1><div class="slidebody">
      We introduce the WSDL. This talk is based on:
    <ul>
      <li class="index">James Snell, Doug Tidwell, and Pavel Kulchenko. 
	<span><a href="http://www.amazon.com/exec/obidos/ASIN/0596000952/multiagentcom/">Programming
	  Web Services with SOAP</a> [1]</span>. 2002. Chapter 5</li>

      <li class="index">Erik Christensen, Francisco Curbera, Greg Meredith, and
      Sanjiva Weerawarana <span><a href="http://www.w3.org/TR/wsdl">Web
      Services Description Language (WSDL) 1.1</a> [2]</span>. 2001 </li>

    </ul>
    </div><h2 id="intro">1 Introduction</h2><div class="slidebody">
    <ul>
      
      <li>SOAP does not specify which encoding to use.</li>

      <li>Each SOAP client must have compile-time knowledge of the
      protocol the server implements.</li>

      <li>SOAP does not declare an equivalent to IDL.</li>

      <li>The Web Services Description Language (WSDL) is the de facto
      standard specification which handles this functionality.</li>

      <li>WSDL can be used to describe what a service does, how it
      does it, and how clients can use it.</li>

    </ul>
  </div><h2 id="advantages">2 Advantages</h2><div class="slidebody">
    <ol>

      <li>WSDL provides a structured approach to defining web service
      interfaces.</li>

      <li>WSDL can be used by clients to reduce the amount of code
      needed to access a service.</li>

      <li>Changes can be made to an existing WSDL description which
      the clients can understand, at runtime. This allows for some
      dynamic upgrades.</li>

    </ol>
    <ul>
      <li>For example, Microsoft's .NET platform will automatically
      generate a WSDL description for any deployed assembly. To get it
      just add <code>?WSDL</code> to the URL of a running service
      created with VS .NET and deployed on IIS.</li>

      <li>Axis has the <a href="../axis/allslides.xml#wsdlwithaxis">java2wsdl</a> tool.</li>

    </ul>
  </div><h2 id="definitions">3 Definitions</h2><div class="slidebody">
    <ul>
      
      <li>A WSDL document defines <b>services</b> as a collection of
      network endpoints or <b>ports</b>, where the <b>port types</b>
      are abstract collection of <b>operations</b>, and the concrete
      protocol and data format specifications for a particular port
      type constitutes a reusable <b>binding</b>.</li>

      <li><b>Types</b>: a container for data type definitions using
	some type system such as XSD.</li> 

      <li><b>Message</b>: an abstract, typed definition of the data
      being communicated.</li> 

      <li><b>Operation</b>: an abstract description of an action
	supported by the service.</li>


      <li><b>Port Type</b>: an abstract set of operations supported by
        one or more endpoints.</li>

      <li><b>Binding</b>: a concrete protocol and data format
      specification for a particular port type.</li>

      <li><b>Port</b>: a single endpoint defined as a combination of a
      binding and a network address.</li>

      <li><b>Service</b>: a collection of related endpoints.</li>

    </ul>


  </div><h2 id="structure">4 WSDL Document Structure</h2><div class="slidebody">
    <table align="center" border="1" cellpadding="10">
      <tr>
	<td align="center">Data Types <br/> &lt;wsdl:types&#047;&gt;</td>
      </tr>
      <tr>
	<td align="center">Messages <br/> &lt;wsdl:message&#047;&gt; </td>
      </tr>
      <tr>
	<td align="center">Interfaces <br/> &lt;wsdl:portType&#047;&gt; </td>
      </tr>
      <tr>
	<td align="center">Services <br/> &lt;wsdl:binding&#047;&gt; <br/> &lt;wsdl:service&#047;&gt; </td>
      </tr>
    </table>
  </div><h3 id="structureex">4.1 WSDL Document Grammar</h3><div class="slidebody">
    <ul>
      
      <li>Its a set of <b>definitions</b>.</li>

    </ul>
    <pre>
<span class="type">&lt;wsdl:definitions name=</span><span class="string">"nmtoken"</span><span class="type">? targetNamespace=</span><span class="string">"uri"</span><span class="type">&gt;</span>

  <span class="type">&lt;import namespace=</span><span class="string">"uri"</span><span class="type"> location=</span><span class="string">"uri"</span><span class="type">/&gt;</span>*
  <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?

  <span class="type">&lt;wsdl:types&gt;</span> ?
    <span class="type">&lt;wsdl:documentation .... /&gt;</span>?
    <span class="type">&lt;xsd:schema .... /&gt;</span>*
    <span class="comment">&lt;!-- extensibility element --&gt;</span> *
  <span class="type">&lt;/wsdl:types&gt;</span>

  <span class="type">&lt;wsdl:message name=</span><span class="string">"nmtoken"</span><span class="type">&gt;</span> *
    <span class="type">&lt;wsdl:documentation .... /&gt;</span>?
    <span class="type">&lt;part name=</span><span class="string">"nmtoken"</span><span class="type"> element=</span><span class="string">"qname"</span><span class="type">? type=</span><span class="string">"qname"</span><span class="type">?/&gt;</span> *
  <span class="type">&lt;/wsdl:message&gt;</span>

 <span class="type">&lt;wsdl:portType name=</span><span class="string">"nmtoken"</span><span class="type">&gt;</span>*
    <span class="type">&lt;wsdl:documentation .... /&gt;</span>?
    <span class="type">&lt;wsdl:operation name=</span><span class="string">"nmtoken"</span><span class="type">&gt;</span>*
      <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
      <span class="type">&lt;wsdl:input name=</span><span class="string">"nmtoken"</span><span class="type">? message=</span><span class="string">"qname"</span><span class="type">&gt;</span>?
        <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
      <span class="type">&lt;/wsdl:input&gt;</span>
      <span class="type">&lt;wsdl:output name=</span><span class="string">"nmtoken"</span><span class="type">? message=</span><span class="string">"qname"</span><span class="type">&gt;</span>?
         <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
      <span class="type">&lt;/wsdl:output&gt;</span>
      <span class="type">&lt;wsdl:fault name=</span><span class="string">"nmtoken"</span><span class="type"> message=</span><span class="string">"qname"</span><span class="type">&gt;</span> *
         <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
       <span class="type">&lt;/wssdl:fault&gt;</span>
    <span class="type">&lt;/wsdl:operation&gt;</span>
  <span class="type">&lt;/wsdl:portType&gt;</span>

  <span class="type">&lt;wsdl:binding name=</span><span class="string">"nmtoken"</span><span class="type"> type=</span><span class="string">"qname"</span><span class="type">&gt;</span>*
    <span class="type">&lt;wsdl:documentation .... /&gt;</span>?
      <span class="comment">&lt;!-- extensibility element --&gt;</span> *
    <span class="type">&lt;wsdl:operation name=</span><span class="string">"nmtoken"</span><span class="type">&gt;</span>*
      <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
      <span class="comment">&lt;!-- extensibility element --&gt;</span> *
      <span class="type">&lt;wsdl:input&gt;</span> ?
        <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
        <span class="comment">&lt;!-- extensibility element --&gt;</span>
      <span class="type">&lt;/wsdl:input&gt;</span>
      <span class="type">&lt;wsdl:output&gt;</span> ?
        <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
        <span class="comment">&lt;!-- extensibility element --&gt;</span> *
      <span class="type">&lt;/wsdl:output&gt;</span>
      <span class="type">&lt;wsdl:fault name=</span><span class="string">"nmtoken"</span><span class="type">&gt;</span> *
        <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
        <span class="comment">&lt;!-- extensibility element --&gt;</span> *
      <span class="type">&lt;/wsdl:fault&gt;</span>
    <span class="type">&lt;/wsdl:operation&gt;</span>
 <span class="type">&lt;/wsdl:binding&gt;</span>

 <span class="type">&lt;wsdl:service name=</span><span class="string">"nmtoken"</span><span class="type">&gt;</span> *
   <span class="type">&lt;wsdl:documentation .... /&gt;</span>?
   <span class="type">&lt;wsdl:port name=</span><span class="string">"nmtoken"</span><span class="type"> binding=</span><span class="string">"qname"</span><span class="type">&gt;</span> *
     <span class="type">&lt;wsdl:documentation .... /&gt;</span> ?
     <span class="comment">&lt;!-- extensibility element --&gt;</span>
   <span class="type">&lt;/wsdl:port&gt;</span>
   <span class="comment">&lt;!-- extensibility element --&gt;</span>
 <span class="type">&lt;/wsdl:service&gt;</span>

<span class="comment">&lt;!-- extensibility element --&gt;</span> *

<span class="type">&lt;/wsdl:definitions&gt;</span>

</pre>
  </div><h3 id="types">4.2 Types</h3><div class="slidebody">
    <ul>

      <li>The <code>types</code> element holds data definitions
      relevant to the messages.</li>

      <li>WSDL prefers the use of XML Schema Data (XSD) types as the
      canonical type system.</li>

      <li>However, WSDL does allow for any other type system to be
      added.</li>

    </ul>
  </div><h3 id="messages">4.3 Messages</h3><div class="slidebody">
    <ul>

      <li>Messages consist of one or more logical <code>part</code>s </li>

      <li>Each part is associated with a type from some type
      system.</li>


      <li>Parts are a flexible mechanism for describing the logical
      abstract content of a message.</li>

      <li>In RPC a part <em>may</em> represent a parameter in the
      message.</li>

      <li>The following message consists of a purchase order and an
      invoice.</li>

    </ul>
    <pre>
<span class="type">&lt;definitions .... &gt;</span>
  <span class="type">&lt;types&gt;</span>
    <span class="type">&lt;schema .... &gt;</span>
      <span class="type">&lt;element name=</span><span class="string">"PO"</span><span class="type"> type=</span><span class="string">"tns:POType"</span><span class="type">/&gt;</span>
      <span class="type">&lt;complexType name=</span><span class="string">"POType"</span><span class="type">&gt;</span>
        <span class="type">&lt;all&gt;</span>
          <span class="type">&lt;element name=</span><span class="string">"id"</span><span class="type"> type="string/&gt;</span>
          <span class="type">&lt;element name=</span><span class="string">"name"</span><span class="type"> type=</span><span class="string">"string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;element name=</span><span class="string">"items"</span><span class="type">&gt;</span>
            <span class="type">&lt;complexType&gt;</span>
              <span class="type">&lt;all&gt;</span>
                <span class="type">&lt;element name=</span><span class="string">"item"</span><span class="type"> type=</span><span class="string">"tns:Item"</span><span class="type"> minOccurs=</span><span class="string">"0"</span><span class="type"> maxOccurs=</span><span class="string">"unbounded"</span><span class="type">/&gt;</span>
              <span class="type">&lt;/all&gt;</span>
            <span class="type">&lt;/complexType&gt;</span>
          <span class="type">&lt;/element&gt;</span>
        <span class="type">&lt;/all&gt;</span>
      <span class="type">&lt;/complexType&gt;</span>

      <span class="type">&lt;complexType name=</span><span class="string">"Item"</span><span class="type">&gt;</span>
        <span class="type">&lt;all&gt;</span>
          <span class="type">&lt;element name=</span><span class="string">"quantity"</span><span class="type"> type=</span><span class="string">"int"</span><span class="type">/&gt;</span>
          <span class="type">&lt;element name=</span><span class="string">"product"</span><span class="type"> type=</span><span class="string">"string"</span><span class="type">/&gt;</span>
        <span class="type">&lt;/all&gt;</span>
      <span class="type">&lt;/complexType&gt;</span>
      <span class="type">&lt;element name=</span><span class="string">"Invoice"</span><span class="type"> type=</span><span class="string">"tns:InvoiceType"</span><span class="type">/&gt;</span>
      <span class="type">&lt;complexType name=</span><span class="string">"InvoiceType"</span><span class="type">&gt;</span>
        <span class="type">&lt;all&gt;</span>
          <span class="type">&lt;element name=</span><span class="string">"id"</span><span class="type"> type=</span><span class="string">"string"</span><span class="type">/&gt;</span>
        <span class="type">&lt;/all&gt;</span>
      <span class="type">&lt;/complexType&gt;</span>
    <span class="type">&lt;/schema&gt;</span>
  <span class="type">&lt;/types&gt;</span>

  <span class="type">&lt;message name=</span><span class="string">"PO"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"po"</span><span class="type"> element=</span><span class="string">"tns:PO"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"invoice"</span><span class="type"> element=</span><span class="string">"tns:Invoice"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/message&gt;</span>
<span class="type">&lt;/definitions&gt;</span>

</pre>
  </div><h3 id="porttypes">4.4 Port Types</h3><div class="slidebody">
    <ul>
      
      <li>A <code>portType</code> is a named set of abstract
      operations and the abstract messages involved.</li>

      <li>They are equivalent to interfaces.</li>

      <li>The <code>name</code> attribute provides a unique name among
      all port types defined within in the enclosing WSDL
      document.</li>

      <li>An operation is named via the <code>name</code>
      attribute.</li>

      <li>WSDL has four transmission primitives that an endpoint can support:
	<ul>
	  <li><b>One-way</b>. The endpoint receives a message.</li>
	  <li><b>Request-response</b>. The endpoint receives a message, and sends a correlated message.</li>
	  <li><b>Solicit-response</b>. The endpoint sends a message, and receives a correlated message.</li>
	  <li><b>Notification</b>. The endpoint sends a message.</li>
	</ul>
      </li>
    </ul>
  </div><h4 id="oneway">4.4.1 One Way Example</h4><div class="slidebody">
      <pre>
<span class="type">&lt;wsdl:definitions .... &gt;</span> 
  <span class="type">&lt;wsdl:portType .... &gt;</span> *
    <span class="type">&lt;wsdl:operation name=</span><span class="string">"nmtoken"</span><span class="type">&gt;</span>
      <span class="type">&lt;wsdl:input name=</span><span class="string">"nmtoken"</span><span class="type">? message=</span><span class="string">"qname"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/wsdl:operation&gt;</span>
  <span class="type">&lt;/wsdl:portType &gt;</span>
<span class="type">&lt;/wsdl:definitions&gt;</span>

</pre>
    <ul>
      
      <li>The <code>input</code> element specifies the abstract message format for
      the one-way operation.</li>

    </ul>
  </div><h4 id="requestresp">4.4.2 Request-Response Example</h4><div class="slidebody">
      <pre>
<span class="type">&lt;wsdl:definitions .... &gt;</span>
  <span class="type">&lt;wsdl:portType .... &gt;</span> *
    <span class="type">&lt;wsdl:operation name=</span><span class="string">"nmtoken"</span><span class="type"> parameterOrder=</span><span class="string">"nmtokens"</span><span class="type">&gt;</span>
      <span class="type">&lt;wsdl:input name=</span><span class="string">"nmtoken"</span><span class="type">? message=</span><span class="string">"qname"</span><span class="type">/&gt;</span>
      <span class="type">&lt;wsdl:output name=</span><span class="string">"nmtoken"</span><span class="type">? message=</span><span class="string">"qname"</span><span class="type">/&gt;</span>
      <span class="type">&lt;wsdl:fault name=</span><span class="string">"nmtoken"</span><span class="type"> message=</span><span class="string">"qname"</span><span class="type">/&gt;</span>*
    <span class="type">&lt;/wsdl:operation&gt;</span>
  <span class="type">&lt;/wsdl:portType &gt;</span>
<span class="type">&lt;/wsdl:definitions&gt;</span>

</pre>
    <ul>
      
      <li>The <code>input</code> and <code>output</code> elements
      specify the abstract message format for the request and
      response, respectively.</li>

      <li>The optional <code>fault</code> elements specify the
      abstract message format for any error messages that may be
      output as the result of the operation.</li>
    </ul>
  </div><h4 id="solicitresp">4.4.3 Solicit-Response Example</h4><div class="slidebody">
      <pre>
<span class="type">&lt;wsdl:definitions .... &gt;</span>
  <span class="type">&lt;wsdl:portType .... &gt;</span> *
    <span class="type">&lt;wsdl:operation name=</span><span class="string">"nmtoken"</span><span class="type"> parameterOrder=</span><span class="string">"nmtokens"</span><span class="type">&gt;</span>
      <span class="type">&lt;wsdl:output name=</span><span class="string">"nmtoken"</span><span class="type">? message=</span><span class="string">"qname"</span><span class="type">/&gt;</span>
      <span class="type">&lt;wsdl:input name=</span><span class="string">"nmtoken"</span><span class="type">? message=</span><span class="string">"qname"</span><span class="type">/&gt;</span>
      <span class="type">&lt;wsdl:fault name=</span><span class="string">"nmtoken"</span><span class="type"> message=</span><span class="string">"qname"</span><span class="type">/&gt;</span>*
    <span class="type">&lt;/wsdl:operation&gt;</span>
  <span class="type">&lt;/wsdl:portType &gt;</span>
<span class="type">&lt;/wsdl:definitions&gt;</span>

</pre>
    <ul>
      <li>The <code>input</code> and <code>output</code> elements
      specify the abstract message format for the request and
      response, respectively.</li>

      <li>The optional <code>fault</code> elements specify the
      abstract message format for any error messages that may be
      output as the result of the operation.</li>
    </ul>
  </div><h4 id="notificationex">4.4.4 Notification Example</h4><div class="slidebody">
      <pre>
<span class="type">&lt;wsdl:definitions .... &gt;</span>
  <span class="type">&lt;wsdl:portType .... &gt;</span> *
    <span class="type">&lt;wsdl:operation name=</span><span class="string">"nmtoken"</span><span class="type">&gt;</span>
      <span class="type">&lt;wsdl:output name=</span><span class="string">"nmtoken"</span><span class="type">? message=</span><span class="string">"qname"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/wsdl:operation&gt;</span>
  <span class="type">&lt;/wsdl:portType &gt;</span>
<span class="type">&lt;/wsdl:definitions&gt;</span>

</pre>
    <ul>
      
      <li>The <code>output</code> element specifies the abstract
      message format for the notification operation.</li>

    </ul>
  </div><h3 id="bindings">4.5 Bindings</h3><div class="slidebody">
    <ul>
    
      <li>A binding defines message format and protocol details for
      operations and messages defined by a particular
      <code>portType</code>.</li>


      <li>The interfaces are <em>bound</em> to specific network and
      transport protocols. It is akin to implementing an
      interface.</li>

      <li>The <code>name</code> attribute provides a unique name among
      all bindings defined within in the enclosing WSDL document.</li>

      <li>A binding references the <code>portType</code> that it binds
      using the <code>type</code> attribute.</li>

      <li>A binding must specify exactly one protocol</li>

    </ul>
    <pre>
<span class="type">&lt;binding name=</span><span class="string">"StockQuoteSoap"</span><span class="type"> type=</span><span class="string">"tns:StockQuotePortType"</span><span class="type">&gt;</span>
  <span class="type">&lt;soap:binding style=</span><span class="string">"document"</span><span class="type"> transport=</span><span class="string">"http://example.com/smtp"</span><span class="type">/&gt;</span>
  <span class="type">&lt;operation name=</span><span class="string">"SubscribeToQuotes"</span><span class="type">&gt;</span>
    <span class="type">&lt;input message=</span><span class="string">"tns:SubscribeToQuotes"</span><span class="type">&gt;</span>
      <span class="type">&lt;soap:body parts=</span><span class="string">"body"</span><span class="type"> use=</span><span class="string">"literal"</span><span class="type">/&gt;</span>
      <span class="type">&lt;soap:header message=</span><span class="string">"tns:SubscribeToQuotes"</span><span class="type"> part=</span><span class="string">"subscribeheader"</span><span class="type"> use=</span><span class="string">"literal"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/input&gt;</span>
  <span class="type">&lt;/operation&gt;</span>
<span class="type">&lt;/binding&gt;</span>

</pre>
  </div><h3 id="ports">4.6 Ports</h3><div class="slidebody">
    <ul>
      
      <li>A port defines an individual endpoint by specifying a single
      address for a binding.</li>

      <li>It is the network location where the web service is
      implemented.</li>

      <li>The <code>name</code> attribute provides a unique name among
      all bindings defined within in the enclosing WSDL document.</li>

      <li>The <code>binding</code> attribute (of type QName) refers to
      the binding using the linking rules defined by WSDL.</li>

      <li>A port must not specify more than one address.</li>

      <li>A port must not specify any binding information other than
      address information.</li>

    </ul>
    <pre>
<span class="type">&lt;wsdl:service name=</span><span class="string">"HelloService"</span><span class="type">&gt;</span>
  <span class="type">&lt;wsdl:port name=</span><span class="string">"HelloPort"</span><span class="type">
    binding=</span><span class="string">"tns:HelloWorldBinding"</span><span class="type">&gt;</span><span class="comment">&lt;!--defined by a previous binding--&gt;</span>
    <span class="type">&lt;soap:address location=</span><span class="string">"http://localhost:8080"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/wsdl:port&gt;</span>
<span class="type">&lt;/wsdl:service&gt;</span></pre>
    <ul>
      <li>A service can also define multiple ports, each of which may
      implement a different binding at a different network
      location.</li>
    </ul>
  </div><h2 id="example">5 Example</h2><div class="slidebody">
      <pre>
<span class="variable-name">&lt;?xml version=</span><span class="string">"1.0"</span><span class="variable-name">?&gt;</span>
<span class="type">&lt;definitions name=</span><span class="string">"StockQuote"</span><span class="type">
             targetNamespace=</span><span class="string">"http://example.com/stockquote.wsdl"</span><span class="type">
             </span><span class="keyword">xmlns:tns="http://example.com/stockquote.wsdl"</span><span class="type">
  </span><span class="keyword">xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"</span><span class="type">
  </span><span class="keyword">xmlns:xsda="http://example.com/stockquote/schema"</span><span class="type">
  </span><span class="keyword">xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"</span><span class="type">
  </span><span class="keyword">xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">
  </span><span class="keyword">xmlns="http://schemas.xmlsoap.org/wsdl/"</span><span class="type">&gt;</span>

  <span class="type">&lt;types&gt;</span>
    <span class="type">&lt;schema targetNamespace=</span><span class="string">"http://example.com/stockquote/schema"</span><span class="type">
            </span><span class="keyword">xmlns="http://www.w3.org/2000/10/XMLSchema"</span><span class="type">&gt;</span>
      <span class="type">&lt;complexType name=</span><span class="string">"TimePeriod"</span><span class="type">&gt;</span>
        <span class="type">&lt;all&gt;</span>
          <span class="type">&lt;element name=</span><span class="string">"startTime"</span><span class="type"> type=</span><span class="string">"xsd:timeInstant"</span><span class="type">/&gt;</span>
          <span class="type">&lt;element name=</span><span class="string">"endTime"</span><span class="type"> type=</span><span class="string">"xsd:timeInstant"</span><span class="type">/&gt;</span>
        <span class="type">&lt;/all&gt;</span>
      <span class="type">&lt;/complexType&gt;</span>
      <span class="type">&lt;complexType name=</span><span class="string">"ArrayOfFloat"</span><span class="type">&gt;</span>
        <span class="type">&lt;complexContent&gt;</span>
          <span class="type">&lt;restriction base=</span><span class="string">"soapenc:Array"</span><span class="type">&gt;</span>
            <span class="type">&lt;attribute ref=</span><span class="string">"soapenc:arrayType"</span><span class="type"> wsdl:arrayType=</span><span class="string">"xsd:float[]"</span><span class="type">/&gt;</span>
          <span class="type">&lt;/restriction&gt;</span>
        <span class="type">&lt;/complexContent&gt;</span>
      <span class="type">&lt;/complexType&gt;</span>
    <span class="type">&lt;/schema&gt;</span>
  <span class="type">&lt;/types&gt;</span>

  <span class="type">&lt;message name=</span><span class="string">"GetTradePricesInput"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"tickerSymbol"</span><span class="type"> element=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"timePeriod"</span><span class="type"> element=</span><span class="string">"xsda:TimePeriod"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/message&gt;</span>

  <span class="type">&lt;message name=</span><span class="string">"GetTradePricesOutput"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"result"</span><span class="type"> type=</span><span class="string">"xsda:ArrayOfFloat"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"frequency"</span><span class="type"> type=</span><span class="string">"xsd:float"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/message&gt;</span>

  <span class="type">&lt;portType name=</span><span class="string">"StockQuotePortType"</span><span class="type">&gt;</span>
    <span class="type">&lt;operation name=</span><span class="string">"GetLastTradePrice"</span><span class="type"> parameterOrder=</span><span class="string">"tickerSymbol timePeriod frequency"</span><span class="type">&gt;</span>
      <span class="type">&lt;input message=</span><span class="string">"tns:GetTradePricesInput"</span><span class="type">/&gt;</span>
      <span class="type">&lt;output message=</span><span class="string">"tns:GetTradePricesOutput"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/operation&gt;</span>
  <span class="type">&lt;/portType&gt;</span>

  <span class="type">&lt;binding name=</span><span class="string">"StockQuoteSoapBinding"</span><span class="type"> type=</span><span class="string">"tns:StockQuotePortType"</span><span class="type">&gt;</span>
    <span class="type">&lt;soap:binding style=</span><span class="string">"rpc"</span><span class="type"> transport=</span><span class="string">"http://schemas.xmlsoap.org/soap/http"</span><span class="type">/&gt;</span>
      <span class="type">&lt;operation name=</span><span class="string">"GetTradePrices"</span><span class="type">&gt;</span>
        <span class="type">&lt;soap:operation soapAction=</span><span class="string">"http://example.com/GetTradePrices"</span><span class="type">/&gt;</span>
          <span class="type">&lt;input&gt;</span>
            <span class="type">&lt;soap:body use=</span><span class="string">"encoded"</span><span class="type"> namespace=</span><span class="string">"http://example.com/stockquote"</span><span class="type">
              encodingStyle=</span><span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">/&gt;</span>
          <span class="type">&lt;/input&gt;</span>
          <span class="type">&lt;output&gt;</span>
            <span class="type">&lt;soap:body use=</span><span class="string">"encoded"</span><span class="type"> namespace=</span><span class="string">"http://example.com/stockquote"</span><span class="type">
              encodingStyle=</span><span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">/&gt;</span>
          <span class="type">&lt;/output&gt;</span>
      <span class="type">&lt;/operation&gt;</span>
  <span class="type">&lt;/binding&gt;</span>

  <span class="type">&lt;service name=</span><span class="string">"StockQuoteService"</span><span class="type">&gt;</span>
    <span class="type">&lt;documentation&gt;</span>My first service<span class="type">&lt;/documentation&gt;</span>
    <span class="type">&lt;port name=</span><span class="string">"StockQuotePort"</span><span class="type"> binding=</span><span class="string">"tns:StockQuoteBinding"</span><span class="type">&gt;</span>
      <span class="type">&lt;soap:address location=</span><span class="string">"http://example.com/stockquote"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/port&gt;</span>
  <span class="type">&lt;/service&gt;</span>
<span class="type">&lt;/definitions&gt;</span>
</pre>
  </div><h3 id="exampledescription">5.1 Example Description</h3><div class="slidebody">
    <ul>
      <li>This example describes that a <code>GetTradePrices</code>
      SOAP 1.1 request may be sent to a <code>StockQuote</code>
      service via the SOAP 1.1 HTTP binding.</li>

      <li>The request takes a stock quote symbol string, an application defined
	<code>TimePeriod</code> structure containing a start and end
	time and returns an array of stock prices recorded by the
	service within that period of time, as well as the frequency
	at which they were recorded as the SOAP response.</li>

    <li>The RPC signature that corresponds to this service has in
	parameters <code>tickerSymbol</code> and
	<code>timePeriod</code> followed by the output parameter
	frequency, and returns an array of floats.</li>

    </ul>
  </div><h3 id="googleex">5.2 Google.wsdl</h3><div class="slidebody">
      <pre>
<span class="variable-name">&lt;?xml version=</span><span class="string">"1.0"</span><span class="variable-name">?&gt;</span>

<span class="comment">&lt;!-- WSDL description of the Google Web APIs.
     The Google Web APIs are in beta release. All interfaces are subject to
     change as we refine and extend our APIs. Please see the terms of use
     for more information. --&gt;</span>

<span class="type">&lt;definitions name=</span><span class="string">"urn:GoogleSearch"</span><span class="type">
             targetNamespace=</span><span class="string">"urn:GoogleSearch"</span><span class="type">
             </span><span class="keyword">xmlns:typens="urn:GoogleSearch"</span><span class="type">
             </span><span class="keyword">xmlns:xsd="http://www.w3.org/2001/XMLSchema"</span><span class="type">
             </span><span class="keyword">xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"</span><span class="type">
             </span><span class="keyword">xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">
             </span><span class="keyword">xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"</span><span class="type">
             </span><span class="keyword">xmlns="http://schemas.xmlsoap.org/wsdl/"</span><span class="type">&gt;</span>

  <span class="comment">&lt;!-- Types for search - result elements, directory categories --&gt;</span>

  <span class="type">&lt;types&gt;</span>
    <span class="type">&lt;xsd:schema </span><span class="keyword">xmlns="http://www.w3.org/2001/XMLSchema"</span><span class="type"> 
                targetNamespace=</span><span class="string">"urn:GoogleSearch"</span><span class="type">&gt;</span>
            
      <span class="type">&lt;xsd:complexType name=</span><span class="string">"GoogleSearchResult"</span><span class="type">&gt;</span>
        <span class="type">&lt;xsd:all&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"documentFiltering"</span><span class="type">           type=</span><span class="string">"xsd:boolean"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"searchComments"</span><span class="type">              type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"estimatedTotalResultsCount"</span><span class="type">  type=</span><span class="string">"xsd:int"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"estimateIsExact"</span><span class="type">             type=</span><span class="string">"xsd:boolean"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"resultElements"</span><span class="type">              type=</span><span class="string">"typens:ResultElementArray"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"searchQuery"</span><span class="type">                 type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"startIndex"</span><span class="type">                  type=</span><span class="string">"xsd:int"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"endIndex"</span><span class="type">                    type=</span><span class="string">"xsd:int"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"searchTips"</span><span class="type">                  type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"directoryCategories"</span><span class="type">         type=</span><span class="string">"typens:DirectoryCategoryArray"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"searchTime"</span><span class="type">                  type=</span><span class="string">"xsd:double"</span><span class="type">/&gt;</span>
        <span class="type">&lt;/xsd:all&gt;</span>
      <span class="type">&lt;/xsd:complexType&gt;</span>

      <span class="type">&lt;xsd:complexType name=</span><span class="string">"ResultElement"</span><span class="type">&gt;</span>
        <span class="type">&lt;xsd:all&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"summary"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"URL"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"snippet"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"title"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"cachedSize"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"relatedInformationPresent"</span><span class="type"> type=</span><span class="string">"xsd:boolean"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"hostName"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"directoryCategory"</span><span class="type"> type=</span><span class="string">"typens:DirectoryCategory"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"directoryTitle"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
        <span class="type">&lt;/xsd:all&gt;</span>
      <span class="type">&lt;/xsd:complexType&gt;</span>
  
      <span class="type">&lt;xsd:complexType name=</span><span class="string">"ResultElementArray"</span><span class="type">&gt;</span>
        <span class="type">&lt;xsd:complexContent&gt;</span>
          <span class="type">&lt;xsd:restriction base=</span><span class="string">"soapenc:Array"</span><span class="type">&gt;</span>
             <span class="type">&lt;xsd:attribute ref=</span><span class="string">"soapenc:arrayType"</span><span class="type"> wsdl:arrayType=</span><span class="string">"typens:ResultElement[]"</span><span class="type">/&gt;</span>
          <span class="type">&lt;/xsd:restriction&gt;</span>
        <span class="type">&lt;/xsd:complexContent&gt;</span>
      <span class="type">&lt;/xsd:complexType&gt;</span>

      <span class="type">&lt;xsd:complexType name=</span><span class="string">"DirectoryCategoryArray"</span><span class="type">&gt;</span>
        <span class="type">&lt;xsd:complexContent&gt;</span>
          <span class="type">&lt;xsd:restriction base=</span><span class="string">"soapenc:Array"</span><span class="type">&gt;</span>
             <span class="type">&lt;xsd:attribute ref=</span><span class="string">"soapenc:arrayType"</span><span class="type"> wsdl:arrayType=</span><span class="string">"typens:DirectoryCategory[]"</span><span class="type">/&gt;</span>
          <span class="type">&lt;/xsd:restriction&gt;</span>
        <span class="type">&lt;/xsd:complexContent&gt;</span>
      <span class="type">&lt;/xsd:complexType&gt;</span>

      <span class="type">&lt;xsd:complexType name=</span><span class="string">"DirectoryCategory"</span><span class="type">&gt;</span>
        <span class="type">&lt;xsd:all&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"fullViewableName"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
          <span class="type">&lt;xsd:element name=</span><span class="string">"specialEncoding"</span><span class="type"> type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
        <span class="type">&lt;/xsd:all&gt;</span>
      <span class="type">&lt;/xsd:complexType&gt;</span>

    <span class="type">&lt;/xsd:schema&gt;</span>
  <span class="type">&lt;/types&gt;</span> 

  <span class="comment">&lt;!-- Messages for Google Web APIs - cached page, search, spelling. --&gt;</span>
             
  <span class="type">&lt;message name=</span><span class="string">"doGetCachedPage"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"key"</span><span class="type">            type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"url"</span><span class="type">            type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/message&gt;</span>

  <span class="type">&lt;message name=</span><span class="string">"doGetCachedPageResponse"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"return"</span><span class="type">         type=</span><span class="string">"xsd:base64Binary"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/message&gt;</span>

  <span class="type">&lt;message name=</span><span class="string">"doSpellingSuggestion"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"key"</span><span class="type">            type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"phrase"</span><span class="type">         type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/message&gt;</span>

  <span class="type">&lt;message name=</span><span class="string">"doSpellingSuggestionResponse"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"return"</span><span class="type">         type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/message&gt;</span>

  <span class="type">&lt;message name=</span><span class="string">"doGoogleSearch"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"key"</span><span class="type">            type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"q"</span><span class="type">              type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"start"</span><span class="type">          type=</span><span class="string">"xsd:int"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"maxResults"</span><span class="type">     type=</span><span class="string">"xsd:int"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"filter"</span><span class="type">         type=</span><span class="string">"xsd:boolean"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"restrict"</span><span class="type">       type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"safeSearch"</span><span class="type">     type=</span><span class="string">"xsd:boolean"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"lr"</span><span class="type">             type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"ie"</span><span class="type">             type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"oe"</span><span class="type">             type=</span><span class="string">"xsd:string"</span><span class="type">/&gt;</span>
  <span class="type">&lt;/message&gt;</span>

  <span class="type">&lt;message name=</span><span class="string">"doGoogleSearchResponse"</span><span class="type">&gt;</span>
    <span class="type">&lt;part name=</span><span class="string">"return"</span><span class="type">         type=</span><span class="string">"typens:GoogleSearchResult"</span><span class="type">/&gt;</span>           
  <span class="type">&lt;/message&gt;</span>

  <span class="comment">&lt;!-- Port for Google Web APIs, "GoogleSearch" --&gt;</span>

  <span class="type">&lt;portType name=</span><span class="string">"GoogleSearchPort"</span><span class="type">&gt;</span>

    <span class="type">&lt;operation name=</span><span class="string">"doGetCachedPage"</span><span class="type">&gt;</span>
      <span class="type">&lt;input message=</span><span class="string">"typens:doGetCachedPage"</span><span class="type">/&gt;</span>
      <span class="type">&lt;output message=</span><span class="string">"typens:doGetCachedPageResponse"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/operation&gt;</span>

    <span class="type">&lt;operation name=</span><span class="string">"doSpellingSuggestion"</span><span class="type">&gt;</span>
      <span class="type">&lt;input message=</span><span class="string">"typens:doSpellingSuggestion"</span><span class="type">/&gt;</span>
      <span class="type">&lt;output message=</span><span class="string">"typens:doSpellingSuggestionResponse"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/operation&gt;</span>

    <span class="type">&lt;operation name=</span><span class="string">"doGoogleSearch"</span><span class="type">&gt;</span>
      <span class="type">&lt;input message=</span><span class="string">"typens:doGoogleSearch"</span><span class="type">/&gt;</span>
      <span class="type">&lt;output message=</span><span class="string">"typens:doGoogleSearchResponse"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/operation&gt;</span>

  <span class="type">&lt;/portType&gt;</span>


  <span class="comment">&lt;!-- Binding for Google Web APIs - RPC, SOAP over HTTP --&gt;</span>

  <span class="type">&lt;binding name=</span><span class="string">"GoogleSearchBinding"</span><span class="type"> type=</span><span class="string">"typens:GoogleSearchPort"</span><span class="type">&gt;</span>
    <span class="type">&lt;soap:binding style=</span><span class="string">"rpc"</span><span class="type">
                  transport=</span><span class="string">"http://schemas.xmlsoap.org/soap/http"</span><span class="type">/&gt;</span>

    <span class="type">&lt;operation name=</span><span class="string">"doGetCachedPage"</span><span class="type">&gt;</span>
      <span class="type">&lt;soap:operation soapAction=</span><span class="string">"urn:GoogleSearchAction"</span><span class="type">/&gt;</span>
      <span class="type">&lt;input&gt;</span>
        <span class="type">&lt;soap:body use=</span><span class="string">"encoded"</span><span class="type">
                   namespace=</span><span class="string">"urn:GoogleSearch"</span><span class="type">
                   encodingStyle=</span><span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">/&gt;</span>
      <span class="type">&lt;/input&gt;</span>
      <span class="type">&lt;output&gt;</span>
        <span class="type">&lt;soap:body use=</span><span class="string">"encoded"</span><span class="type">
                   namespace=</span><span class="string">"urn:GoogleSearch"</span><span class="type">
                   encodingStyle=</span><span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">/&gt;</span>
      <span class="type">&lt;/output&gt;</span>
    <span class="type">&lt;/operation&gt;</span>

    <span class="type">&lt;operation name=</span><span class="string">"doSpellingSuggestion"</span><span class="type">&gt;</span>
      <span class="type">&lt;soap:operation soapAction=</span><span class="string">"urn:GoogleSearchAction"</span><span class="type">/&gt;</span>
      <span class="type">&lt;input&gt;</span>
        <span class="type">&lt;soap:body use=</span><span class="string">"encoded"</span><span class="type">
                   namespace=</span><span class="string">"urn:GoogleSearch"</span><span class="type">
                   encodingStyle=</span><span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">/&gt;</span>
      <span class="type">&lt;/input&gt;</span>
      <span class="type">&lt;output&gt;</span>
        <span class="type">&lt;soap:body use=</span><span class="string">"encoded"</span><span class="type">
                   namespace=</span><span class="string">"urn:GoogleSearch"</span><span class="type">
                   encodingStyle=</span><span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">/&gt;</span>
      <span class="type">&lt;/output&gt;</span>
    <span class="type">&lt;/operation&gt;</span>

    <span class="type">&lt;operation name=</span><span class="string">"doGoogleSearch"</span><span class="type">&gt;</span>
      <span class="type">&lt;soap:operation soapAction=</span><span class="string">"urn:GoogleSearchAction"</span><span class="type">/&gt;</span>
      <span class="type">&lt;input&gt;</span>
        <span class="type">&lt;soap:body use=</span><span class="string">"encoded"</span><span class="type">
                   namespace=</span><span class="string">"urn:GoogleSearch"</span><span class="type">
                   encodingStyle=</span><span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">/&gt;</span>
      <span class="type">&lt;/input&gt;</span>
      <span class="type">&lt;output&gt;</span>
        <span class="type">&lt;soap:body use=</span><span class="string">"encoded"</span><span class="type">
                   namespace=</span><span class="string">"urn:GoogleSearch"</span><span class="type">
                   encodingStyle=</span><span class="string">"http://schemas.xmlsoap.org/soap/encoding/"</span><span class="type">/&gt;</span>
      <span class="type">&lt;/output&gt;</span>
    <span class="type">&lt;/operation&gt;</span>
  <span class="type">&lt;/binding&gt;</span>

  <span class="comment">&lt;!-- Endpoint for Google Web APIs --&gt;</span>
  <span class="type">&lt;service name=</span><span class="string">"GoogleSearchService"</span><span class="type">&gt;</span>
    <span class="type">&lt;port name=</span><span class="string">"GoogleSearchPort"</span><span class="type"> binding=</span><span class="string">"typens:GoogleSearchBinding"</span><span class="type">&gt;</span>
      <span class="type">&lt;soap:address location=</span><span class="string">"http://api.google.com/search/beta2"</span><span class="type">/&gt;</span>
    <span class="type">&lt;/port&gt;</span>
  <span class="type">&lt;/service&gt;</span>

<span class="type">&lt;/definitions&gt;</span>
</pre>
  </div><h2>URLs</h2><ol><li>Programming
	  Web Services with SOAP, <a href="http://www.amazon.com/exec/obidos/ASIN/0596000952/multiagentcom/">http://www.amazon.com/exec/obidos/ASIN/0596000952/multiagentcom/</a></li><li>Web
      Services Description Language (WSDL) 1.1, <a href="http://www.w3.org/TR/wsdl">http://www.w3.org/TR/wsdl</a></li></ol><hr class="bottom"/>
<p class="author">This talk available at <a href="http://jmvidal.cse.sc.edu/talks/wsdl">http://jmvidal.cse.sc.edu/talks/wsdl/</a><br />
Copyright &copy; 2007 <a href="../../index.html">Jos&eacute; M. Vidal</a>
<a href=" http://validator.w3.org/check?uri=http://jmvidal.cse.sc.edu/talks/wsdl/allslides.xml">.</a>
 All rights reserved.</p>
<p class="pagenumber">21 April 2004, 09:34AM</p>
</body>
</html>