Web service description language (WSDL) is a model and format for describing web services using XML. A consumer can locate a service and execute its operations. This process can be automated using most common development tools, enabling application integration with little developer produced code. WSDLs are a contract between the service provider and consumer; it makes a service self-describing. WSDLs provide descriptions of all public operations, data types for all service messages, binding details for the transport protocol and service address information. An "import" element can be used in a WSDL to import external WSDLs or XML schemas. Importing external items is useful for allowing the WSDL to be more modular, reuse of XML data types among multiple service definitions and support multiple versions of a schema.
Create new file in your text or XML editor. If the editor supports WSDLs, select WSDL as the file type. If it does not support WSDLs, but supports XML, select XML as the file type. If neither WSDLs or XML are supported, select a plain text file type.
Name the file with any name you desire, and give the file a ".wsdl" extension. For example, the file can be named "HelloWorld.wsdl."
Create a second new file in your text or XML editor. If the editor supports XML schemas, select XML schema or XSD as the file type. If it does not support XML schemas, but supports XML file, select XML as the file type. If neither XML schemas or XML are supported, select a plain text file type.
Name the file with any name you desire, and give the file a ".xsd" extension. For example, the file can be named "HelloWorld.xsd."
Enter the following markup in the XML schema file you created:
<xsd:schema targetNamespace="http://schemas.myorg.com/person/phone" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:import namespace="http://www.w3.org/2001/XMLSchema"/> <xsd:complexType name="Phone"> xsd:sequence <xsd:element name="areaCode" type="xsd:int"/> <xsd:element name="exchange" type="xsd:int"/> <xsd:element name="number" type="xsd:int"/>
This defines a schema with the namespace "http://schemas.myorg.com/person/phone," which defines a single data type "Phone."
Enter the following markup in the WSDL file you created:
<wsdl:description xmlns:wsdl="http://www.w3.org/ns/wsdl" xmlns:wsoap= "http://www.w3.org/ns/wsdl/soap" xmlns:external="http://schemas.myorg.com/person/phone" xmlns:helloWorld="http://schemas.myorg.com/wsdl/helloworld" targetNamespace="http://schemas.myorg.com/wsdl/helloworld">
wsdl:documentation WSDL with an import example
wsdl:types <xs:import namespace="http://schemas.myorg.com/person/phone" schemaLocation= "http://www.myorg.com/supporting/schemas/helloworld.xsd"/>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.myorg.com/wsdl/helloworld"> <xsd:element name="CallNumber" type="external:Phone"/> <xsd:element name="HelloResponse" type="xsd:string"/> </xsd:schema>
<wsdl:interface name="helloInterface" > <wsdl:operation name="CallMe" pattern="http://www.w3.org/ns/wsdl/in-out" style="http://www.w3.org/ns/wsdl/style/iri"> <wsdl:input messageLabel="In" element="helloWorld:CallNumber" /> <wsdl:output messageLabel="Out" element="helloWorld:HelloResponse" />
<wsdl:binding name="helloBinding" interface="hy:helloInterface" type="http://www.w3.org/ns/wsdl/soap" wsoap:protocol="http://www.w3.org/2003/05/soap/bindings/HTTP/"> <wsdl:operation ref="hy:Hello" wsoap:mep="http://www.w3.org/2003/05/soap/mep/soap-response"/>
<wsdl:service name="helloService" interface="hy:helloInterface"> <wsdl:endpoint name="helloEndpoint" binding="hy:helloBinding" address="http://www.myorg.com/Service/Hello"/>
This markup defines a WSDL that imports an external XML schema named "helloworld.xsd" which contains the namespace "http://schemas.myorg.com/person/phone."
The import statement in the WSDL imports an XML namespace from a file. The primary purpose of the import element is to import the namespace, not to indicate where the declarations in the namespace can be found. The element includes the optional "schemaLocation" attribute. The attribute is optional because a namespace can be imported from the same file or be registered in another way. According the WSDL specification, "schemaLoction" is only a hint; an XML parser is free to ignore the location. If the parser already knows about the schema types in that namespace, or has another mechanism of finding them, it does not have to use the location. However, in many cases a namespace is imported that the XML parser knows nothing about, so the "schemaLocation" attribute becomes necessary, but technically it's still just a hint.
New technologies such as metadata exchange, MEX, have been introduced to share information about what capabilities a service supports, but these standards have not yet been widely adopted.
WSDLs support includes and imports. They may sound similar, but they behave differently. An import statement imports another namespace. An include statement imports XML data type declarations into an existing namespace.