Service Description

A Service Description provides a specific interface to a Service Transport. The Service Description describes the inputs and outputs when you configure services within the Domino Leap mapping user interface.

Elements of a Service Description

A Service Description is represented as an XML document that follows an XML schema. This single XML document contains all the information for a single Service Description: name, description, input and output parameters, and input and output mapping. For a full listing of the XML schema, refer to Appendix A - Service Description schema. The top-level element in a Service Description is the serviceDescription element. This element, and all of its childs, must be in the XML namespace with a URI of http://www.ibm.com/xmlns/prod/forms/services/serviceDescription/1.0.

ID
Each Service Description must contain a unique id that identifies it to the Domino Leap server. The id can contain any characters that are valid as a component of a URL path. These characters include:
  • Alphabetical letters – [A-Z], and [a-z]
  • Numerals – [0-9]
  • Hyphens – [-]
  • Underscore – [_]
Because a Service Description ID is a surrogate for the Service Description itself, this ID does not must be descriptive. Any UUID is a valid choice for a Service Description ID because it guarantees uniqueness and contains only characters that are valid in a URL path component.
Transport ID
A Service Description must reference a Service Transport to perform its underlying operation. Each Service Transport has its own unique transportId that uniquely identifies it to the Domino Leap server. The ID for a Service Transport must be made available by its developer.
Name and Description
To help users build Domino Leap applications with services, each Service Description contains both a name, and a description.The name and description elements allow you to localize a Domino Leap Service Description in multiple languages using duplicate elements, each with a different xml:lang attribute and contents. See Localizing Service Descriptions for information about how to provide names and descriptions in multiple languages.
Default Locale
If the Service Description is not localized in the language of a particular user, the defaultLocale contains the locale in which the name and description must be presented. For example, if a user asks for the Service Description in French, but the Service Description has only English and Spanish strings, the English is returned if en is set as the defaultLocale.
Credentials
The credentials contains the configuration for a Credentials Provider. The ID of the credentials provider is specified in the providerId attribute. The credentials element can contain zero or more property elements to configure the properties of the specified Credentials Provider. Each property element must contain a name attribute whose value is the name of the property being configured, and a value attribute that contains the value of the property.

Not all Credentials Providers are applicable to all Service Transports. Therefore, the documentation for each Service Transport must be consulted before you configure the credentials element. If the configured Service Transport does not understand the provider that is specified by providerId, the Service Description is not available.

Bindings
Every Service Description must specify its input and output structures. These structures outline the ID, name, description, and type of each parameter and any subparameters. In addition to the parameter structure, bindings might also contain a section that declares how data going into the Service Transport is mapped from the input structure and how data coming from the Service Transport is mapped to the output structure.

There are two top-level elements for bindings: inbound, and outbound. Inbound defines the binding for data coming into the Service Description from the Builder Application. Outbound defines the data going to the Domino Leap application from the Service Description. Only one of each of these elements can be present within a single Service Description, and each must be placed as a child of the serviceDescription element.

Directly underneath inbound and outbound are two elements that define the main components of a binding: parameters and serviceMapping. The parameters element contains all the information that is related to the parameters. The contents of the serviceMapping element instructs Domino Leap how to map data coming from the parameters into data for the transport and vice versa.

Parameters
The parameters element contains zero or more parameter elements. Each parameter element defines a single parameter coming into or being returned from the Service Description. Each parameter element must have an id, type, name, and description. The id element uniquely identifies the parameter within the binding. The type element specifies the type of data that is expected to be contained within the parameter. The following data types are supported: STRING, BOOLEAN, DECIMAL, FLOAT, DOUBLE, INTEGER, DATETIME, TIME, DATE, and LIST.

As with the name and description child elements of the serviceDescription element, these childs of parameter specify the name and description of the parameter that is used in HCL Domino Leap. These elements can also be localized using the xml:lang attribute.

Optionally, the mandatory element can be included for inbound bindings to specify whether the parameter must be bound before starting the Service Description. Valid values for this element are true and false, with the latter being the default.

Each parameter element can have a child element that is called parameters which is a container for child parameters. The contents of the parameters element is one or more parameter elements. If a parameter contains subparameters, its type is set to LIST. At run time, the parameter contains a list of structures with each of the subparameters.

Service Mapping
The serviceMapping element contains all the information that is needed for the Domino Leap Builder Server server to map data between the Service Description parameters, and the Service Transport. For more information, see Mapping Data for a Service Description.

XML Namespaces

XML namespace declarations must be defined on the serviceMapping element or higher.

Sample Service Descriptions

Each example in this section includes a list of the Service Descriptions and a discussion of how each Service Description operates. The Service Descriptions in this section rely solely on the Service Transports that are shipped with the Domino Leap Builder Server server. Where applicable, sample and setup instructions are included.

Example 1: Simple Mapping
The following Service Description uses the HTTP Service Transport to make a request to a web server and return the content type of the response. In this example, the URL to which the request is made comes as an inbound parameter from the Builder application.
 <?xml version="1.0" encoding="UTF-8"?>  
 <serviceDescription>  
   <id>get-content-type</id>  
   <defaultLocale>en-us</defaultLocale>  
   <transportId>HTTPServiceTransport</transportId>  
   <name xml:lang="en-us">Get Content Type</name>  
   <description xml:lang="en-us">  
 	Retrieves the content type of the response from an HTTP server for the configured URL.  
   </description> 
   <inbound> 
 	<parameters> 
 	  <parameter> 
 		<id>request-url</id> 
 		<type>STRING</type> 
 		<name xml:lang="en-us">URL</name> 
 		<description xml:lang="en-us">URL to request.</description> 
 		<mandatory>true</mandatory> 
 	  </parameter> 
 	</parameters> 
   </inbound> 
   <outbound> 
 	<parameters> 
 	  <parameter> 
 		<id>response-header-content-type</id> 
 		<type>STRING</type> 
 		<name xml:lang="en-us">Content Type</name> 
 		<description xml:lang="en-us">Content Type of the response.</description> 
 	  </parameter> 
 	</parameters> 
   </outbound> 
 </serviceDescription>
All Service Descriptions begin with a serviceDescription element. The serviceDescription element contains all the information that is needed for the Domino Leap Builder Server server to work with the Service Description. The unique ID of this Service Description is get-content-type. The unique ID is not exposed to a user, but it must be unique. This example displays the ID of the Service Transport to use, which is HTTPServiceTransport, and this is the unique ID of the HTTP Service Transport. This example defines the name and description of the Service Description, which are presented to the user when designing applications.

This example defines the inbound bindings and the outbound bindings. As mentioned previously, the inbound bindings refer to the parameters that are flowing from the application to the Service Transport. The outbound bindings refer to the parameters that are flowing in the opposite direction. There is only one inbound parameter in this example.

According to the HTTP Service Transport documentation, the parameter that contains the URL to which the request is made must be called request-url. The id of this parameter must matche the expectations of the HTTP Service Transport.

The name and description are defined, and mandatory specifies that this parameter must be supplied in order for this Service Description to operate.

In this case, there is only one output parameter for the Service Description: the content type of the response. The HTTP Service Transport dynamically creates new parameters that are based on the information that is returned in the HTTP response. In particular, response headers are converted to lowercase and are prefixed with response-header-. Since this Service Description is interested in the Content-Type header, the outbound parameter response-header-content-type is created to contain this data.

Example 2: Augmenting Parameters with Constants
The following Service Description returns the same information as Example 1. However, in this case, we do not want the Domino Leap application to supply the URL. Instead, the URL is declared using a constant, and mapped into the inbound parameters for the Service Transport.
 <?xml version="1.0" encoding="UTF-8"?>
  <serviceDescription>
    <id>get-content-type-with-constant</id>
    <defaultLocale>en-us</defaultLocale>
    <transportId>HTTPServiceTransport</transportId>
    <name xml:lang="en-us">Get Content Type with Constant</name>
    <description xml:lang="en-us">
  	Retreives the content type of the response from an HTTP server.
    </description>
   <inbound>
 	<serviceMapping>
 	  <constants>
 		<constant>
 		  <id>url-to-request</id>
 		  <value>http://www.ibm.com</value>
 		</constant>
 	  </constants>
 	  <mapping>
 		<mapping source="constant:url-to-request" sourceType="string" target="transport:request-url" targetType="string"/>
 	  </mapping>
 	</serviceMapping>
   </inbound>
   <outbound>
 	<parameters>
 	  <parameter>
 		<id>response-header-content-type</id>
 		<type>STRING</type>
 		<name xml:lang="en-us">Content Type</name>
 		<description xml:lang="en-us">Content Type of the response.</description>
 	  </parameter>
 	</parameters>
   </outbound>
 </serviceDescription>
Like Example 1, the Service Description makes a request to an HTTP server and returns the content type of the response. However, this Service Description differs from the Example 1 because there are no input parameters to this service. The request-url HTTP Service Transport parameter is mapped into the transport via a constant.

In the constants section, a single constant is defined. This constant has an id of url-to-request, and a value of http://www.ibm.com. The id of the constant is used when creating the parameter structure that is passed to the Service Transport. This constant is referenced within the mapping section.

Since there is only one parameter to be sent, and there is only one mapping. This mapping specifies that the value of the Service Transport parameter named request-url is specified by the value of the constant named url-to-request.

Example 3: Lists of Data
The following Service Description demonstrates the use of nested parameters. This example is the same as the Service Description used for the Countries by Region service that is shipped with Domino Leap Builder Server. This example describes how to specify a region and return a list of the names of countries within that region.
 <?xml version="1.0" encoding="UTF-8"?>
 <serviceDescription>
   <id>countries-by-region</id>
   <defaultLocale>en-us</defaultLocale>
   <transportId>4647b8cf-093f-11e0-89dd-001e4cf83606</transportId>
   <name xml:lang="en-us">
 	Countries by Region using Service Description
   </name>
   <description xml:lang="en-us">
 	Given a region, return a list of country information in that region.
   </description>
   <inbound>
 	<parameters>
 	  <parameter>
 		<id>region</id>
 		<type>STRING</type>
 		<name xml:lang="en-us">Region</name>
 		<description xml:lang="en-us">
 		  One of "Africa", "America, North", "America, South", "Asia", "Europe", or "Oceania"
 		</description>
 		<mandatory>true</mandatory>
 	  </parameter>
 	</parameters>
   </inbound>
   <outbound>
 	<parameters>
 	  <parameter>
 		<id>countries</id>
 		<type>LIST</type>
 		<name xml:lang="en-us">Countries"</name>
 		<description xml:lang="en-us">List of country information</description>
 		<parameters>
 		  <parameter>
 			<id>name</id>
 			<type>STRING</type>
 			<name xml:lang="en-us">Name</name>
 			<description xml:lang="en-us">Name of Country</description>
 		  </parameter>
 		</parameters>
 	  </parameter>
 	</parameters>
   </outbound>
 </serviceDescription>
As with the other Service Description examples, this Service Description has its own unique ID, a name, and a description. This Service Description uses the sample Countries by Region Service Transport, which is shipped with the Domino Leap Builder Server, and is identified by its id.

Because this Service Description has a single inbound parameter, the parameters element of the inbound bindings. parameters contains only a single parameter. The id of this parameter is region, which is what is expected by the Countries by Region Service Transport.

Since there can be multiple countries within a region, the outbound bindings must contain a list parameter to contain all the information for each country. The outbound structure for this Service Description consists of a parameter that is called countries that contains a list of maps. Each of the maps that are contained within the countries list consists of a single name key that contains the name of a country. This structure is defined within the parameters element of the outbound bindings section. The top-level parameter is countries. Since the countries parameter contains other parameters, its type is set as LIST. All the parameters of the list entries are defined within the parameters element inside the countries parameter. The single name subparameter is also defined.

Since the inbound and outbound bindings directly match what is returned by the Countries by Region Service Transport, there is no need for any mapping information. This service can be set up such that the name subparameter is mapped to list-like items such as drop-down options or an item in a table.

Example 4: Mapping XML into Parameters
The following Service Description extracts data from an XML document that is returned from an HTTP request using the HTTP Service Transport.
 <?xml version="1.0" encoding="UTF-8"?>
 <serviceDescription>
   <id>address-lookup</id>
   <defaultLocale>en-us</defaultLocale>
   <transportId>HTTPServiceTransport</transportId>
   <name xml:lang="en-us">Address Lookup</name>
   <description xml:lang="en-us">Returns information related to a postal code or address.</description>
   <inbound>
 	<parameters>
 	  <parameter>
 		<id>address</id>
 		<type>STRING</type>
 		<name xml:lang="en-us">Address or Postal Code</name>
 		<description xml:lang="en-us"></description>
 		<mandatory>true</mandatory>
 	  </parameter>
 	</parameters>
 	<serviceMapping>
 	  <constants>
 		<constant>
 		  <id>request-url</id>
 		  <value>http://maps.googleapis.com/maps/api/geocode/xml</value>
 		</constant>
 		<constant>
 		  <id>false-constant</id>
 		  <value>false</value>
 		</constant>
 		<constant>
 		  <id>request-method</id>
 		  <value>GET</value>
 		</constant>
 	  </constants>
 	  <mapping>
 		<mapping target="transport:request-url" source="constant:request-url"/>
 		<mapping target="transport:request-method" source="constant:request-method"/>
 		<mapping target="transport:request-query-address" source="parameter:address"/>
 		<mapping target="transport:request-query-sensor" source="constant:false-constant"/>
 	  </mapping>
 	</serviceMapping>
   </inbound>
   <outbound>
 	<parameters>
 	  <parameter>
 		<id>latitude</id>
 		<type>STRING</type>
 		<name xml:lang="en-us">Latitude</name>
 		<description xml:lang="en-us"></description>
 	  </parameter>
 	  <parameter>
 		<id>longitude</id>
 		<type>STRING</type>
 		<name xml:lang="en-us">Longitude</name>
 		<description xml:lang="en-us"></description>
 	  </parameter>
 	  <parameter>
 		<id>address-information</id>
 		<type>LIST</type>
 		<name xml:lang="en-us">Address Information</name>
 		<description xml:lang="en-us"></description>
 		<parameters>
 		  <parameter>
 			<id>long-name</id>
 			<type>STRING</type>
 			<name xml:lang="en-us">Long Name</name>
 			<description xml:lang="en-us"></description>
 		  </parameter>
 		  <parameter>
 			<id>short-name</id>
 			<type>STRING</type>
 			<name xml:lang="en-us">Short Name</name>
 			<description xml:lang="en-us"></description>
 		  </parameter>
 		  <parameter>
 			<id>type-1</id>
 			<type>STRING</type>
 			<name xml:lang="en-us">Type</name>
 			<description xml:lang="en-us"></description>
 		  </parameter>
 		  <parameter>
 			<id>type-2</id>
 			<type>STRING</type>
 			<name xml:lang="en-us">Type(2)</name>
 			<description xml:lang="en-us"></description>
 		  </parameter>
 		</parameters>
 	  </parameter>
 	</parameters>
 	<serviceMapping>
 	  <mapping>
 		<mapping source="transport:response-entity" 
 				 sourceRef="GeocodeResponse/result[1]/geometry/location/lat" 
 				 sourceType="xml" 
 				 target="parameter:latitude"/>
 		<mapping source="transport:response-entity" 
 				 sourceRef="GeocodeResponse/result[1]/geometry/location/lng" 
 				 sourceType="xml" 
 				 target="parameter:longitude"/>
 		<mapping source="transport:response-entity" 
 				 sourceRef="GeocodeResponse/result[1]/address_component" 
 				 sourceType="xml" 
 				 target="parameter:address-information">
 		  <mapping sourceRef="long_name" target="parameter:long-name"/>
 		  <mapping sourceRef="short_name" target="parameter:short-name"/>
 		  <mapping sourceRef="type[1]" target="parameter:type-1"/>
 		  <mapping sourceRef="type[2]" target="parameter:type-2"/>
 		</mapping>
 	  </mapping>
 	</serviceMapping>
   </outbound>
 </serviceDescription>
This Service Description performs a reverse address lookup using a free Google web service. As with the other Service Description examples, the standard prologue of id, transportId, name, and description is specified. This service has a single parameter, address, that can be assigned by an application. Since this parameter is required to perform the address look-up, it is marked as mandatory.

Since this Service Description uses the HTTP Service Transport, a request-url must be specified. The URL used in this request takes the form http://maps.googleapis.com/maps/api/geocode/xml?address=[address]&sensor=[true|false]. Because there are query parameters that must be sent, this Service Description uses the HTTP Service Transport support for query parameters by prefixing the name of the parameter with request-query-. However, because some of these query parameters are not exposed to the user, you must create a mapping section to map some constant values. The inbound binding constant section defines the three constants that are used: request-url, false-constant, and request-method. These constants contain the URL to which to request is made, a constant string value false for the sensor query parameter, and the request method. While some of these constants, including request-url and request-method, match the name of the parameter to which they are applied, there is no requirement that they match. Parameter names that match do not automatically get a constant value if it has the same name. All mapping must be explicitly defined.

The mapping section of the inbound binding maps the constants and Service Description parameters to the Service Transport parameters. Each of the mapping elements is fairly self-explanatory: the request-url constant is mapped to the request-url transport parameter; the request-method constant is mapped to the request-method transport parameter; the address parameter is mapped to the request-query-address transport parameter; and the constant false-constant is mapped to the sensor transport parameter.

The HTTP Service Transport then builds a URL out of the request-url,request-query-address, and request-query-sensor parameters, and makes a request to that URL using the HTTP method given in the request-method parameter. The response body that is returned by this request is placed in the response-entity transport parameter, which is then taken apart by the mapping section of the outbound bindings.

This service expects the response-entity to be similar to the following:
 <?xml version="1.0" encoding="UTF-8"?> 
 <GeocodeResponse> 
  <status>OK</status> 
  <result> 
   <type>street_address</type> 
   <formatted_address>1 New Orchard Rd, Armonk, NY, USA</formatted_address> 
   <address_component> 
    <long_name>1</long_name> 
    <short_name>1</short_name> 
    <type>street_number</type> 
   </address_component> 
   <address_component> 
    <long_name>New Orchard Rd</long_name> 
    <short_name>New Orchard Rd</short_name> 
    <type>route</type> 
   </address_component> 
   <address_component> 
    <long_name>Armonk</long_name> 
    <short_name>Armonk</short_name> 
    <type>locality</type> 
    <type>political</type> 
   </address_component> 
   <address_component> 
    <long_name>Westchester</long_name> 
    <short_name>Westchester</short_name> 
    <type>administrative_area_level_2</type> 
    <type>political</type> 
   </address_component> 
   <address_component> 
    <long_name>New York</long_name> 
    <short_name>NY</short_name> 
    <type>administrative_area_level_1</type> 
    <type>political</type> 
   </address_component> 
   <address_component> 
    <long_name>United States</long_name> 
   <short_name>US</short_name> 
    <type>country</type> 
    <type>political</type> 
   </address_component> 
   <geometry> 
    <location> 
     <lat>41.1083018</lat> 
     <lng>-73.7204677</lng> 
    </location> 
    <location_type>ROOFTOP</location_type> 
    <viewport> 
     <southwest> 
      <lat>41.1051542</lat> 
      <lng>-73.7236153</lng> 
     </southwest> 
     <northeast> 
      <lat>41.1114494</lat> 
      <lng>-73.7173201</lng> 
     </northeast> 
    </viewport> 
   </geometry> 
  </result> 
 </GeocodeResponse>
There is much data in this response, but only some of it is needed for this Service Description. The latitude, longitude, and a list of the address information from the first result is required. To get only the required information, the Service Description outlines the parameters that it expects to return in the parameters section. The Service Description then uses the mapping section to extract the required data from the response-entity transport parameter. Each of the parameters in the parameters section is self-explanatory. Latitude and longitude are top-level parameters because there is only one of each of them in a single result. However, there are several address_component elements, each of which are returned. Therefore, the address-information parameter is a list parameter that contains subparameters, one for each of the pieces of information in an address_component that the Service Description wants to make available.

The service mapping section defines all the mapping that must be performed to extract the data from the XML response. Latitude and longitude each extract the data using a single XPath expression. The source type for each is set to XML. Mapping of a repeating structure is accomplished in a similar fashion. This example defines the mapping for the address-information parameter. The XPath expression for address-information returns a nodeset as there are several nodes that match the expression GeocodeResponse/result/address_component. For each node that is returned, a new structure is created to contain the result of each of the submappings. Each of the submappings places its target into the newly created structure. Since the source of each of the submappings is one of the matched nodes, the mapping elements do not specify a source. It is assumed to be the inherited context. Similarly, the reference is evaluated within the context of the source, which is inherited. After each of the submappings is evaluated for a single source, the structure is added to a running list and the submappings are evaluated again for the next result in the source list. When all the sources are processed, the list that was collecting the results of the map is assigned to the address-information parameter.

Appendix A - Service Description schema

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com/xmlns/prod/forms/services/serviceDescription/1.0" xmlns:tns="http://www.ibm.com/xmlns/prod/forms/services/serviceDescription/1.0" elementFormDefault="qualified">
	<simpleType name="id">
		<annotation>
			<documentation>
				Represents a unique identifier in its context. IDs must only contain characters that are
				valid in a URL. To ensure that the contents are unique and only contain valid URL characters
				a UUID (Universally Unique IDentified) should be
				used as its contents for any global uses.
			</documentation>
		</annotation>
		<restriction base="string"></restriction>
	</simpleType>
	<complexType name="localizedType">
		<annotation>
			<documentation>
				Represents a localized string of the Service Description. This type can be used in one of two
				ways, controlled by which attributes are present.
				If @key is present this element is merely used as a vehicle for a bundle key that resolves
				to
				the localized information at runtime. Any other attributes and content are ignored. If @key
				is present there should be one and only one of the element of this type. For more information
				on how to use the localized service descriptions see the
				class
				documentation for
				com.ibm.form.nitro.service.services.IServiceDescriptionBuilder.
				If @key is not present this element contains the name of the service description localized to
				the locale specified in the @xml:lang attribute. If @key is not
				present there should be one
				element of this type for each supported locale.
			</documentation>
		</annotation>
		<simpleContent>
			<extension base="string">
				<attribute name="key" type="string" use="optional">
					<annotation>
						<documentation>
							Java resource bundle key that resolves to the localized string at runtime. See the class
							documentation for com.ibm.form.nitro.service.services.IServiceDescriptionBuilder for more
							information.
				</documentation>
					</annotation>
				</attribute>
			</extension>
		</simpleContent>
	</complexType>
	<element name="serviceDescription">
		<annotation>
			<documentation>
				serviceDescription is the root element for a Service Description document. All Service
				Description documents must have one and only one &lt;serviceDescription&gt; element.
			</documentation>
		</annotation>
		<complexType>
			<sequence>
				<element name="id" type="string" maxOccurs="1" minOccurs="1">
					<annotation>
						<documentation>
							The id that uniquely identifies the Service Description. For information regarding
							its contents see the documentation of the &lt;id&gt; element.
	    				</documentation>
					</annotation>
				</element>
				<element name="transportId" type="string" maxOccurs="1" minOccurs="1">
					<annotation>
						<documentation>
							The id that uniquely identifies the Service Transport. For information regarding
							its contents see the documentation of the &lt;id&gt; element.
	    				</documentation>
					</annotation>
				</element>
				<element name="defaultLocale" type="string" maxOccurs="1" minOccurs="1">
					<annotation>
						<documentation>
							The default locale for the service description. At runtime values in this locale
							will be used if strings for a more specific locale cannot be found.
	    				</documentation>
					</annotation>
				</element>
				<element name="name" type="tns:localizedType" maxOccurs="unbounded" minOccurs="1">
					<annotation>
						<documentation>
							The localized name of the service description. If this element contains @key then
							there should be only one &lt;name&gt; element as a child of the
							&lt;serviceDescription&gt; element. Otherwise, there should be one for each
							locale.
							For more information regarding this element see the documentation for
							localizedType.
	    				</documentation>
					</annotation>
				</element>
				<element name="description" type="tns:localizedType" maxOccurs="unbounded" minOccurs="1">
					<annotation>
						<documentation>
							The localized description of the service description. If this element contains
							@key then there should be only one &lt;description&gt; element as a child of the
							&lt;serviceDescription&gt; element. Otherwise, there should be one for
							each
							locale.
	    				</documentation>
					</annotation>
				</element>
				<element name="inbound" type="tns:bindingType" maxOccurs="1" minOccurs="0">
					<annotation>
						<documentation>
							The inbound binding information for the service description. This binding
							describes what data is expected to be given to the service description from a
							Nitro form and how the service description will map the incoming data into the
							parameters that the underlying service transport expects.
	    				</documentation>
					</annotation>
				</element>
				<element name="outbound" type="tns:bindingType" maxOccurs="1" minOccurs="0">
					<annotation>
						<documentation>
							The outbound binding information for the service description. This binding
							describes what data is expected to be returned to the Nitro form from the
							service description and how it will map the data coming from the underlying
							service transport into that format.
	    				</documentation>
					</annotation>
				</element>
			</sequence>
		</complexType>
	</element>
	<complexType name="bindingType">
		<annotation>
			<documentation>
				A binding contains all of the information about the parameters that are coming into or out
				of a service description as well as how data will be mapped from the incoming data to the
				transport and vice-versa.
    		</documentation>
		</annotation>
		<sequence>
			<element name="parameters" type="tns:parametersType" maxOccurs="1" minOccurs="0">
				<annotation>
					<documentation>
						Contains all of the parameter definitions for the binding.
    				</documentation>
				</annotation>
			</element>
			<element name="serviceMapping" type="tns:serviceMappingType" maxOccurs="1" minOccurs="0">
				<annotation>
					<documentation>
						Contains the service mapping information for the binding.
    				</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<complexType name="parametersType">
		<sequence>
			<element name="parameter" type="tns:parameterType" maxOccurs="unbounded" minOccurs="0">
				<annotation>
					<documentation>
						A single parameter for the service description. For more information see the
						documentation for the parameterType type.
	   				</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<complexType name="parameterType">
		<sequence>
			<element name="id" type="tns:id" maxOccurs="1" minOccurs="1">
				<annotation>
					<documentation>
						The id of the parameter. This value is local to the Service Description and therefore
						does not (and should not) be a UUID. For information regarding its contents see the
						documentation of the &lt;id&gt; element.
    				</documentation>
				</annotation>
			</element>
			<element name="name" type="tns:localizedType" maxOccurs="unbounded" minOccurs="1">
				<annotation>
					<documentation>
						The localized name of the Service Parameter. If this element contains @key then there
						should be only one &lt;name&gt; element as a child of the &lt;parameter&gt; element.
						Otherwise, there should be one for each locale. For more
						information regarding this
						element see the documentation for localizedType.
    				</documentation>
				</annotation>
			</element>
			<element name="description" type="tns:localizedType" maxOccurs="unbounded" minOccurs="1">
				<annotation>
					<documentation>
						The localized description of the Service Parameter. If this element contains @key
						then there should be only one &lt;name&gt; element as a child of the &lt;parameter&gt;
						element. Otherwise, there should be one for each locale. For
						more information
						regarding this element see the documentation for localizedType.
    				</documentation>
				</annotation>
			</element>
			<element name="mandatory" type="boolean" maxOccurs="1" minOccurs="1">
				<annotation>
					<documentation>
						Determines if the parameter is mandatory. The value of this element is ignored if
						&lt;incoming&gt; is false.
    				</documentation>
				</annotation>
			</element>
			<element name="type" type="tns:typeType" maxOccurs="1" minOccurs="1">
				<annotation>
					<documentation>
						Determines the type of the data that should be mapped to the parameter. For more
						information see the documentation for the typeType type. 
    				</documentation>
				</annotation>
			</element>
			<element name="advanced" type="boolean" maxOccurs="1" minOccurs="0">
				<annotation>
					<documentation>
						If provided, determines if the parameter is presented as 'Advanced',
						otherwise assumed false.
					</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<simpleType name="typeType">
		<annotation>
			<documentation>
				Defines the different data types that are supported.
    		</documentation>
		</annotation>
		<restriction base="string">
			<enumeration value="STRING"></enumeration>
			<enumeration value="BOOLEAN"></enumeration>
			<enumeration value="DECIMAL"></enumeration>
			<enumeration value="INTEGER"></enumeration>
			<enumeration value="FLOAT"></enumeration>
			<enumeration value="DOUBLE"></enumeration>
			<enumeration value="DURATION"></enumeration>
			<enumeration value="DATETIME"></enumeration>
			<enumeration value="TIME"></enumeration>
			<enumeration value="DATE"></enumeration>
			<enumeration value="LIST"></enumeration>
		</restriction>
	</simpleType>
	<complexType name="serviceMappingType">
		<annotation>
			<documentation>
				Defines the mapping for a binding. For more information see the mapping documentation.
    		</documentation>
		</annotation>
		<sequence>
			<element name="constants" type="tns:constantsType" maxOccurs="1" minOccurs="0">
				<annotation>
					<documentation>
						Contains &lt;constant&gt; elements that define any constant values that can be
						injected into output of the mapping via a mapping element.
    				</documentation>
				</annotation>
			</element>
			<element name="mapping" type="tns:topLevelMappingType" maxOccurs="1" minOccurs="0">
				<annotation>
					<documentation>
						Top level mapping element that contains all of the mapping elements for the binding.
    				</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<complexType name="constantsType">
		<sequence>
			<element name="constant" type="tns:constantType" maxOccurs="unbounded" minOccurs="0">
				<annotation>
					<documentation>
						Defines a constant value for a service mapping.
    				</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<complexType name="constantType">
		<annotation>
			<documentation>
				Defines a constant value for a service mapping.
			</documentation>
		</annotation>
		<sequence>
			<element name="id" type="string">
				<annotation>
					<documentation>
						The unique identifier of the constant. This should be a short descriptive string.
    				</documentation>
				</annotation>
			</element>
			<element name="value" type="string">
				<annotation>
					<documentation>
						The value of the constant. The textual content of this element will be used as the
						value for the constant. If you need to have XML as a value that can be injected into
						a parameter you must either escape the XML within this element
						or wrap the contents in
						a CDATA section.
    				</documentation>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<complexType name="mappingType">
		<annotation>
			<documentation>
				Defines a mapping from a source to a target. Data will be taken from the source at the
				reference specified (if applicable) and applied to the target at the reference specified (if
				applicable). Any type conversions will be applied as
				needed.
    		</documentation>
		</annotation>
		<sequence>
			<element name="mapping" type="tns:mappingType" maxOccurs="unbounded" minOccurs="0">
				<annotation>
					<documentation>
					</documentation>
				</annotation>
			</element>
		</sequence>
		<attribute name="source" type="tns:mappingSchemeType">
			<annotation>
				<documentation>
					Defines the scheme of the source (where to get the data for the mapping from). The
					source scheme must be either 'constant' or 'parameter'.
    			</documentation>
			</annotation>
		</attribute>
		<attribute name="sourceRef" type="string">
			<annotation>
				<documentation>
					Defines the reference to retrieve data from within the value found by the source
					attribute. References take the form of a path reference. 
    			</documentation>
			</annotation>
		</attribute>
		<attribute name="sourceType" type="tns:mappingTypeType">
			<annotation>
				<documentation>
					Defines the type of the source value.
    			</documentation>
			</annotation>
		</attribute>
		<attribute name="target" type="tns:mappingSchemeType">
			<annotation>
				<documentation>
					Defines the scheme of the target (where to get the data for the mapping from). The
					source scheme must be 'out'.
    			</documentation>
			</annotation>
		</attribute>
		<attribute name="targetRef" type="string">
			<annotation>
				<documentation>
					Defines the reference to retrieve data from within the value found by the target
					attribute. References take the form of a path reference. 
    			</documentation>
			</annotation>
		</attribute>
		<attribute name="targetType" type="tns:mappingTypeType">
			<annotation>
				<documentation>
					Defines the type of the target value.
    			</documentation>
			</annotation>
		</attribute>
	</complexType>
	<complexType name="topLevelMappingType">
		<annotation>
			<documentation>
				The top level mapping element contains mapping elements.
    		</documentation>
		</annotation>
		<sequence>
			<element name="mapping" type="tns:mappingType" maxOccurs="unbounded" minOccurs="0"></element>
		</sequence>
	</complexType>
	<simpleType name="mappingTypeType">
		<restriction base="string">
			<enumeration value="xml"></enumeration>
			<enumeration value="string"></enumeration>
		</restriction>
	</simpleType>
	<simpleType name="mappingSchemeType">
		<restriction base="string">
			<pattern value="^parameter:.*"></pattern>
			<pattern value="^out:.*"></pattern>
			<pattern value="^constant:.*"></pattern>
		</restriction>
	</simpleType>
</schema>