I am seeing some XSD schema documents that declare both a targetNamespace
and an xmlns:tns
attribute in their top schema
element. E.g. the following one taken from here. They also seem to have the same string value. I understand the role of targetNamespace
but what does xmlns:tns
do on top of that?
<?xml version="1.0" encoding="UTF-8"?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/Product" xmlns:tns="http://www.example.org/Product" elementFormDefault="qualified"> ...
The targetNamespace declares a namespace for other xml and xsd documents to refer to this schema. The target prefix in this case refers to the same namespace and you would use it within this schema definition to reference other elements, attributes, types, etc.
tns stands for tns Namespace (short for Target Name Space) and if you will check any enterprise wsdl it is defined in the beginning <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:enterprise.soap.sforce. ...
Most business and communications problems that XML can solve require a combination of several XML vocabularies. XML has a mechanism for qualifying names to be allocated into different namespaces, such as namespaces that apply to different industries.
Specifying a target namespace. The following XSD schema specifies a target namespace by using the xsd:targetNamespace attribute. The schema also sets the elementFormDefault and attributeFormDefault attribute values to "unqualified" (the default value for these attributes).
It lets you refer to the namespace later in the schema. For example, if you declare a named type and then want to also declare an element of that type
<complexType name="someType"> <!-- ... --> </complexType> <element name="someElement" type="tns:someType" />
Simply saying type="someType"
wouldn't work because that would be referring to the (non-existent) someType
in the http://www.w3.org/2001/XMLSchema
namespace (the xmlns="..."
of the schema file) rather than the one in the http://www.example.org/Product
namespace.
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