XML Namespaces
Introduction
The purpose of the XML Schema language consists in a XML document’s validation. Thus, you can create application specific constraints and determine the hierarchy and relationship of your elements by using XML Schema.
In order to validate a document against different XML Schemata, the concept of namespaces has been introduced. Basically, prefixes are assigned to URIs, so that parsers are able to identify and separate elements in the document. The attribute xmlns indicates, that a namespace declaration follows:
Xmlns:Prefix=URI
Target namespace
To identify a XML schema out of XML documents, it has to be named with a specific URI in the schema itself.
<? xml version = '1.0' encoding='UTF-8' ?> <schema xmlns="http://www.w3.org/2001/XMLSchema"> targetNamespace="http://www.taxi.com/TaxiReservation "> <complexType name="ReservationType"> ...
Default namespace
The declaration of a default namespace allows to avoid prefixing each element. Once declared, it applies to the element in which it is specified as well as all subelements.
<? xml version = '1.0' encoding='UTF-8' ?> <reservation xmlns="http://www.taxi.com/TaxiReservation"> <customer> <last-name>Turner</last-name> <first-name>Tine</first-name> </customer> </reservation>
schemaLocation
Since a namespace prefix is assigned to an URI, which does not indicate the physical location of the Schema, a validation of the xml document can not take place yet. You need to specify the location of the schema. Therefore, the attribute schemaLocation is used. It defines the specific identifier (URI) as well as the physical location (URL). Due to the fact, that schemaLocation is not part of the XML language, you need to assign a namespace to this attribute as well.
<? xml version = '1.0' encoding='UTF-8' ?> <res:reservation xmlns="http://www.taxi.com/TaxiReservation"> xmlns:xsi="http://www.w3.org/2001/XMLSchema-Instance" xsi:schemaLocation="http://www.taxi.com/TaxiReservation http://www.taxi.com/schemas/taxiReservation.xsd"> <customer> <last-name>Turner</last-name> ...
Namespaces in XML Schemata
The concept of XML namespace declaration can be used in XML Schemata as well. For instance, the XML schema specification, which defines elements such as <complexType> or the build-in data types, needs to be defined in each XML Schema.
<? xml version = '1.0' encoding='UTF-8' ?> <schema <xmlns="http://www.w3.org/2001/XMLSchema"> <targetNamespace="http://www.taxi.com/Address" <xmlns:addr="http://www.taxi.com/Address> <element name="address" type="addr:AddressType"/> <complexType name="AddressTyp"“> <sequence> <element name="street" type="string"/> <element name="city" type="string"/> ...