WSDL and Schemas
WSDL documents are XML documents that describe services as a set of message-enabled or procedure-oriented abstract endpoints. These operations and/or messages and their associated data types are described conceptually, and then bound concretely to a network protocol, message format, and programming language as needed.
A WSDL document defines the following elements for describing services:
- Types: data type definitions
- Message: an abstract definition of the data being transferred
- Operation: an abstract description of a service procedure
- Port Type: an abstract set of operations supported by one or more endpoints
- Binding: a concrete protocol and data format for a given port type
- Port: a single endpoint defined as a binding and a network address
- Service: a collection of related endpoints or ports
This document is published jointly with a set of normative WSDL and Schemas. Together they are an expression of the contract on the 'wire level'. The WSDL provided in NE2008 v2 are strongly typed. That term refers to a service contract that contains a complete definition of its input and output messages in XML Schema, a schema that is either included in the WSDL definition or referred to by that WSDL definition.
The actual WSDL is specific as to the HL7v3 payload message contained in the <soap:Body> definition, with references to the actual schemas involved shown in listing below.
<types> <xsd:schema targetNamespace="urn:hl7-org:v3"...> <xsd:include schemaLocation="../schemas/QUPC_IN043100NO.xsd" /> <xsd:include schemaLocation="../schemas/QUPC_IN043200NO.xsd" /> <xsd:element name="QUPC_IN043100NO-Response"> <xsd:complexType> <xsd:choice> <xsd:element ref="hl7:QUPC_IN043200NO" /> </xsd:choice> </xsd:complexType> </xsd:element> </xsd:schema> </types> <message name="QUPC_IN043100NO"> <part name="body" element="hl7:QUPC_IN043100NO" /> </message> <message name="QUPC_IN043100NO-Response"> <part name="body" element="hl7:QUPC_IN043100NO-Response" /> </message> <portType name="CareRecordQueryFulfiller_PortType"> <operation name="QUPC_IN043100NO_Operation"> <input message="hl7:QUPC_IN043100NO" /> <output message="hl7:QUPC_IN043100NO-Response" /> </operation> </portType>
The published style of WSDL (“strongly typed”) describes the actual XML instances going in and out as well as the HL7v3 Schema's used. The WSDL can therefore easily be used to validate a service or guide in the design of a service. This generally increases the level of automation, code generation, tool support, and use of standardized middleware. It also produces more stable code and relieves the developer from having to create infrastructure level code. And even a generically implemented service can provide a strongly typed interface definition.
This 'contractual' flavour of WSDL and Schema is the only flavour that will be published, they are normative and the web services they describe should be implemented. Whether they are used 'as is' for code generation is an independent, often environment-dependent question, and vendors are free to use their own derived WSDL and (modified) schemas as long as the contractual WSDL is warranted.