I am studying SOAP web services and I am really new to Web Services. In the WSDL I got a little confused with regards to the targetNamespace
element in the definition and the namespace
included in the xsd:schema
.
<definitions .... targetNamespace=" " > <xsd:schema> <xsd:import namespace=" " schemaLocation=""/> </xsd:schema>
What does it mean by these two elements and I searched through many articles in the web and I was unable to clearly identify this. Can anybody please explain me?
Do these two get same values?
Figure 1: Elements and attributes in XML Schema namespace are used to write an XML Schema document, which generates elements and attributes as defined by user and puts them in {target namespace}. This {target namespace} is then used to validate the XML instance.
The TargetNamespace is the namespace of all schema components in this schema as well as any schema included using the include element. Included schemas must either have the same target namespace as the containing schema or have no target namespace specified.
An XML namespace is a means of qualifying element and attribute names to disambiguate them from other names in the same document. This section provides a brief description of XML namespaces and how they are used in SOAP. For complete information, see http://www.w3.org/TR/REC-xml-names/
The target namespace in the WSDL file will be the name space associated with the SOAP service itself. For example we have a customer service the namespace would be something like http://www.acme.com/Customer/V1/CustomerService
.
The XSD imports section is where you specify the namespace of the XSD you are about to import. A XSD file will contain the data that the service will send i.e. it contains the object definitions that will be serialized into XML and sent up and down as the request and responses. A XSD can also contain the operations that the WSDL will expose.
A WSDL can import one or more XSD files and each XSD will have its own namespace. A XSD will contain a namespace such as:
http://www.acme.com/Customer/V1/GetCustomerRequest
for the GetCustomerRequest this will define the data structure of the GetCustomerRequest operation.http://www.acme.com/Customer/V1/CustomerObject
for the CustomerObject this will define the data structure of the CustomerObject.Namespaces are a bit like Java packages they just allow you to define a hierarchy of objects. One important thing to understand is that you might have two Customer objects one that belongs to your sale system and one that belong to your CRM system for example. By placing these in separate namespaces you will be able to use both Customer object in the same service as long as they have unique namespaces.
Normally these namespaces will form part of the SOA catalog as well and defining them will be part of your SOA governance standards. They are important if you want to do SOA successfully.
I'll explain using Java analogy.
Namespace is like Java packages. Each xml element is in a namespace. Providing a targetNamespace means that all elements (and types) defined within are in that namespace. It's similar to that all Java classes are within the package.
The xsd being imported will have its own target namespace that would mean that all elements in the xsd will be in the namespace defined.
The import in the wsdl is like providing a java import specifying the package.
I hope I am clear and helpful :D.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With