The Role of targetNamespace in XML Schema
The targetNamespace attribute in an XML Schema
Definition (XSD) establishes a unique URI namespace for all elements,
attributes, and data types declared within that schema. By assigning
components to a specific namespace, targetNamespace
prevents naming collisions, allows multiple schemas to define elements
with the same local name safely, and ensures that instance XML documents
can be validated accurately against distinct, unambiguous
definitions.
Defining the Schema’s Identity
When you create an XML Schema, you are defining a vocabulary. The
targetNamespace attribute, placed in the root
<xs:schema> element, gives this vocabulary a globally
unique identifier. Any global type, element, or attribute declared
directly within the schema automatically belongs to this specified
namespace URI.
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/orders"
xmlns="http://www.example.com/orders"
elementFormDefault="qualified">
<xs:element name="Order" type="OrderType"/>
<xs:complexType name="OrderType">
<xs:sequence>
<xs:element name="OrderID" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>In the example above, the Order element and
OrderType data type belong to
http://www.example.com/orders.
Preventing Naming Collisions
Without namespaces, combining schemas from different sources could
result in conflicts if both schemas use identical element names—such as
<Address> or <Status>. With
targetNamespace, an address defined by a shipping schema
(http://example.com/shipping) remains distinct from an
address defined by a network configuration schema
(http://example.com/networking).
Validating XML Instance Documents
When an XML instance document is validated against a schema, the XML validator matches elements based on both their local name and their namespace URI.
In the instance document, the root element references the schema
using xmlns or a namespace prefix matching the schema’s
targetNamespace:
<Order xmlns="http://www.example.com/orders">
<OrderID>12345</OrderID>
</Order>If the namespace in the XML document does not match the
targetNamespace in the XSD, validation fails because the
parser considers the elements to be undefined.
Difference Between targetNamespace and xmlns
targetNamespace: Defines the namespace for the components being created by the current schema. It acts as an assignment of identity.xmlns(XML Namespace): Declares a prefix mapping within the current file so the schema itself can reference elements and types, such as standard types likexs:stringfromhttp://www.w3.org/2001/XMLSchemaor internal types using the default namespace.
Enabling Modular Schemas
The targetNamespace attribute is essential for building
modular schema architectures:
xs:include: Combines schemas that share the sametargetNamespace.xs:import: Allows a schema to use elements and types defined in an external schema that has a differenttargetNamespace.
If a schema does not include a targetNamespace, its
declarations exist in the “no namespace” category (the default empty
namespace), meaning they are un-namespaced and can only validate
unqualified XML elements.