title: Web Services Description Language
text: Web Service Description Language, of kortweg WSDL is een XML-taal waarmee de interfaces van webservices kunnen worden beschreven. Over het algemeen zullen deze WSDL-documenten voornamelijk door applicaties gelezen worden en beschikbaar zijn voor aanroepende applicaties.
  
  De binding-style en use van de WSDL
  De WSDL binding beschrijft hoe de service gebruikmaakt van het berichtenprotocol, met name SOAP. Een WSDL SOAP binding kent 2 stijlsoorten: RPC (Remote Procedure Call) of Document. Het gebruik van een SOAP binding is of 'encoded' of 'literal'.
  Dit uit zich in de structuur van het te verzenden SOAP-bericht. Het is essentieel om te weten met welk soort WSDL-bestand je aan het werk bent. Sommige technieken, zoals JAX-WS ondersteunen alleen document/literal en niet rpc/encoded. En andere technieken vice versa.
  WS-I (Web Services Interoperability) Basic Profile schrijft het gebruik van document/literal voor.
  rpc/encoded wordt beschouwd als verouderd en dient niet meer gebruikt te worden.
  
  Een WSDL-document hoeft niet manueel opgesteld te worden. Er zijn voor bijna elke programmeertaal hulpmiddelen aanwezig waarmee WSDL-documenten op eenvoudige wijze gegenereerd kunnen worden, om ze zodoende via SOAP aanroepbaar te maken.
  
  Voorbeeld van een WSDL-bestand
  Hier is een voorbeeld van een gestructureerd WSDL 2.0 document:
  <?xml version="1.0" encoding="UTF-8"?>
  <description xmlns="http://www.w3.org/ns/wsdl" 
               xmlns:tns="http://www.example.com/wsdl20sample" 
               xmlns:whttp="http://www.w3.org/ns/wsdl/http"
               xmlns:wsoap="http://www.w3.org/ns/wsdl/soap"
               targetNamespace="http://www.example.com/wsdl20sample">
  
  <!-- Abstract types -->
     <types>
        <xs:schema xmlns="http://www.example.com/wsdl20sample"
                   xmlns:xs="http://www.w3.org/2001/XMLSchema" 
                   targetNamespace="http://www.example.com/wsdl20sample">
                   
           <xs:element name="request">
              <xs:complexType>
                 <xs:sequence>
                    <xs:element name="header" maxOccurs="unbounded">
                       <xs:complexType>
                          <xs:simpleContent>
                             <xs:extension base="xs:string">
                                <xs:attribute name="name" type="xs:string" use="required"/>
                             </xs:extension>
                          </xs:simpleContent>
                       </xs:complexType>
                    </xs:element>
                    <xs:element name="body" type="xs:anyType" minOccurs="0"/>
                 </xs:sequence>
                 <xs:attribute name="method" type="xs:string" use="required"/>
                 <xs:attribute name="uri" type="xs:anyURI" use="required"/>
              </xs:complexType>
           </xs:element>
           
           <xs:element name="response">
              <xs:complexType>
                 <xs:sequence>
                    <xs:element name="header" maxOccurs="unbounded">
                       <xs:complexType>
                          <xs:simpleContent>
                             <xs:extension base="xs:string">
                                <xs:attribute name="name" type="xs:string" use="required"/>
                             </xs:extension>
                          </xs:simpleContent>
                       </xs:complexType>
                    </xs:element>
                    <xs:element name="body" type="xs:anyType" minOccurs="0"/>
                 </xs:sequence>
                 <xs:attribute name="status-code" type="xs:anySimpleType" use="required"/>
                 <xs:attribute name="response-phrase" use="required"/>
              </xs:complexType>
           </xs:element>
        </xs:schema>
     </types>
  
  <!-- Abstract interfaces -->
     <interface name="RESTfulInterface">
        <fault name="ClientError" element="tns:response"/>
        <fault name="ServerError" element="tns:response"/>
        <fault name="Redirection" element="tns:response"/>
        <operation name="Get" pattern="http://www.w3.org/ns/wsdl/in-out">
           <input messageLabel="GetMsg" element="tns:request"/>
           <output messageLabel="SuccessfulMsg" element="tns:response"/>
        </operation>
        <operation name="Post" pattern="http://www.w3.org/ns/wsdl/in-out">
           <input messageLabel="PostMsg" element="tns:request"/>
           <output messageLabel="SuccessfulMsg" element="tns:response"/>
        </operation>
        <operation name="Put" pattern="http://www.w3.org/ns/wsdl/in-out">
           <input messageLabel="PutMsg" element="tns:request"/>
           <output messageLabel="SuccessfulMsg" element="tns:response"/>
        </operation>
        <operation name="Delete" pattern="http://www.w3.org/ns/wsdl/in-out">
           <input messageLabel="DeleteMsg" element="tns:request"/>
           <output messageLabel="SuccessfulMsg" element="tns:response"/>
        </operation>
     </interface>
  
  <!-- Concrete Binding Over HTTP -->
     <binding name="RESTfulInterfaceHttpBinding" interface="tns:RESTfulInterface" 
              type="http://www.w3.org/ns/wsdl/http">
        <operation ref="tns:Get" whttp:method="GET"/>
        <operation ref="tns:Post" whttp:method="POST" 
                   whttp:inputSerialization="application/x-www-form-urlencoded"/>
        <operation ref="tns:Put" whttp:method="PUT" 
                   whttp:inputSerialization="application/x-www-form-urlencoded"/>
        <operation ref="tns:Delete" whttp:method="DELETE"/>
     </binding>
     
  <!-- Concrete Binding with SOAP-->
     <binding name="RESTfulInterfaceSoapBinding" interface="tns:RESTfulInterface" 
              type="http://www.w3.org/ns/wsdl/soap" 
              wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"
              wsoap:mepDefault="http://www.w3.org/2003/05/soap/mep/request-response">
        <operation ref="tns:Get" />
        <operation ref="tns:Post" />
        <operation ref="tns:Put" />
        <operation ref="tns:Delete" />
     </binding>
     
  
  <!-- Web Service offering endpoints for both the bindings-->
     <service name="RESTfulService" interface="tns:RESTfulInterface">
        <endpoint name="RESTfulServiceRestEndpoint" 
                  binding="tns:RESTfulInterfaceHttpBinding" 
                  address="http://www.example.com/rest/"/>
        <endpoint name="RESTfulServiceSoapEndpoint" 
                  binding="tns:RESTfulInterfaceSoapBinding" 
                  address="http://www.example.com/soap/"/>
     </service>
  </description>
  
  Externe links
   Artikel; Geen SOAP voor programmeurs
   WSDL 1.1 W3C-standaard
   WSDL 2.0 W3C-standaard
  
  W3C-standaard
  XML-gebaseerde standaard
  webservices