A namespace uniquely identifies a Web service and is specified by the <targetNamespace>
element in the WSDL that represents the service. A data service is simply a Web service with specialized functionality. As a data service implementation is based on XML, namespace handling is an important aspect to it.
When developing a data service, you get to specify namespaces in several places as followsData services are implemented using XML, which means that there can be conflicting element names. Therefore, we use namespaces to uniquely identify the elements defined within a specific web service. Using namespaces for a data service is optional. However, in certain data services, namespaces become necessary. Read below for more information.
Info | ||
---|---|---|
| ||
Namespaces can be defined at different levels of a data service, which means that you can have multiple namespaces applicable to your data service at the same time. In such a scenario, the top-level namespaces will be inherited by the lower level as explained below.
|
See the following topics for instructions on setting namespaces at different levels of a data service: Table of Contents maxLevel 3 minLevel 3
Setting the namespace for a data service
The service namespace is used to uniquely identify a web service, which means that this namespace applies to all elements in the data service. In the WSDL which that represents the service, it the namespace is indicated by the "targetNamespace" attribute of the WSDL document element. The service namespace can be set using the Create/Edit Data Service window of the Data Services Server management console.
For example,
Data service result row namespace
This namespace is set through the Row namespace value in the query result section. It associates the result rows or result entries of a specific namespace. Therefore, all the subelements in that result raw are under this namespace by default.
when you define a data service using the management console as shown below.
Setting the namespace for a data service query
When you define a query for your data service, you can set a namespace for the elements in the query result (output mapping). That is, the Row Namespace applies to all the result rows that you define as output mappings for that query. The example below shows how the row namespace is set for the query result element: Customers.
After setting the row namespace, the Customers element's data type of the Customers element falls under the given namespace as shown below.
You might want only selected elements in the result row to contain a specific namespace. This can be defined by setting the namespace in the output mappings as follows:
Info |
---|
The XML Schema fragment in data types section taken from the service's WSDL is as follows:
Namespaces for specific elements in the result
If you have multiple queries with the same element wrapper but different element rows, be sure to use separate namespaces for each query. The example below illustrates two queries in a data service (.dbs file) with the following qualities:
Therefore, since we are using the same element wrapper for both queries, we need to use two separate namespaces to identify the two conflicting elements ('salary' and 'phone') in the two queries as shown below.
|
Setting namespaces for specific elements in the query result
The row namespace applies to all elements in the query result. Alternatively, you can specify namespaces for selected elements (output mapping elements) in the query result as shown below. This namespace will only apply to that element.
This is how the setting is reflected in the WSDL.
Namespaces
Info | ||
---|---|---|
If you have a data service query using the same result element multiple times, be sure to use separate namespaces for each element to avoid conflicts. The example below illustrates a single query in a data service (.dbs file) that has the same element defined twice. In this situation, we have to use separate namespaces for the two elements in order to distinguish them separately.
|
Setting namespaces for complex results
In complex results in data services, the result elements can be arbitrarily nested. These nested elements can have their own namespaces. The example below shows how this is represented in a database file fragment, which has given below illustrates a query with a complex result (nested elements). As shown below, the namespace specified for the 'contact' element is inherited by the child elements that are nested within. However, if you assign specific namespaces to the child elements, the namespace inherited by the parent element will be overridden.
Code Block |
---|
<query id="customersInBostonSQL" useConfig="default"> <sql>select * from Customers where city = 'Boston' and country = 'USA'</sql> <result defaultNamespace="http://abc.com/nsb" element="customers" rowName="customer"> <element column="customerName" name="customer-name" xsdType="string"/> <element namespace="http://abc.com/nsb" name="contact"> <element column="contactLastName" name="contact-last-name" xsdType="string"/> <element column="contactFirstName" name="contact-first-name" xsdType="string"/> </element> <element column="phone" name="phone" xsdType="string"/> <element column="city" name="city" xsdType="string"/> <element column="country" name="country" xsdType="string"/> </result> </query> |
The WSDL created for the above service is as follows:
The resulted XML of the executed service is as follows:
Namespace inheritance in a data service
There's an inheritance order where a top-level namespace is inherited by its children. In summary, the inheritance is as follows: