| <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html lang="en-us" xml:lang="en-us"> |
| <head> |
| <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> |
| <meta name="copyright" content="Copyright (c) 2000, 2008 IBM Corporation and others. All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html. Contributors: IBM Corporation - initial API and implementation" /> |
| <meta name="DC.rights.owner" content="(C) Copyright 2000, 2008" /> |
| <meta content="public" name="security" /> |
| <meta content="index,follow" name="Robots" /> |
| <meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' /> |
| <meta content="reference" name="DC.Type" /> |
| <meta name="DC.Title" content="XML namespaces" /> |
| <meta name="abstract" content="An XML namespace is a collection of names, identified by a URI reference, which are used in XML documents as element types and attribute names." /> |
| <meta name="description" content="An XML namespace is a collection of names, identified by a URI reference, which are used in XML documents as element types and attribute names." /> |
| <meta content="XML namespaces, overview" name="DC.subject" /> |
| <meta content="XML namespaces, overview" name="keywords" /> |
| <meta scheme="URI" name="DC.Relation" content="../topics/tedtpref.html" /> |
| <meta content="XHTML" name="DC.Format" /> |
| <meta content="rnmspc" name="DC.Identifier" /> |
| <meta content="en-us" name="DC.Language" /> |
| <link href="../../org.eclipse.wst.doc.user/common.css" type="text/css" rel="stylesheet" /> |
| <title>XML namespaces</title> |
| </head> |
| <body id="rnmspc"><a name="rnmspc"><!-- --></a> |
| |
| |
| <h1 class="topictitle1">XML namespaces</h1> |
| |
| |
| |
| |
| <div><p>An XML namespace is a collection of names, identified by a URI |
| reference, which are used in XML documents as element types and attribute |
| names.</p> |
| |
| <div class="section">XML namespaces are defined by a W3C recommendation, dating 16 August |
| 2006, called <a href="http://www.w3.org/TR/2006/REC-xml-names-20060816/" target="_blank">Namespaces in XML</a>. XML tag names should be globally |
| unique, as well as short for performance reasons. In order to resolve this |
| conflict, the W3C namespace recommendation defines an attribute <strong>xmlns</strong> which |
| can amend any XML element. If it is present in an element, it identifies the |
| namespace for this element.</div> |
| |
| <div class="section"><p>The xmlns attribute has the following syntax:</p> |
| <p><samp class="codeph">xmlns:<var class="varname">prefix</var>=namespace</samp> </p> |
| <p>where <samp class="codeph">namespace</samp> is a unique URI (such as www.ibm.com) and where <samp class="codeph"><var class="varname">prefix</var></samp> represents |
| the namespace and provides a pointer to it.</p> |
| <p>In the following customer |
| element definition, an accounting namespace is defined in order to be able |
| to distinguish the element tags from those appearing in customer records created |
| by other business applications:</p> |
| <div class="p"><pre><acct:customer xmlns:acct="http://www.my.com/acct-REV10"> |
| <acct:name>Corporation</acct:name> |
| <acct:order acct:ref="5566"/> |
| <acct:status>invoice</acct:status> |
| </acct:customer> </pre> |
| </div> |
| <p>The namespace definition in the first |
| line assigns the namespace http://www.my.com/acct-REV10 to the prefix. This |
| prefix is used on the element names such as name in order to attach them to |
| the namespace. A second application, for example, a fulfillment system, can |
| assign a different namespace to its customer elements:</p> |
| <div class="p"><pre><ful:customer xmlns:ful="http://www.your.com/ful"> |
| <ful:name>Corporation</ful:name> |
| <ful:order ful:ref="A98756"/> |
| <ful:status>shipped</ful:status> |
| </ful:customer></pre> |
| </div> |
| <p>An application processing both data |
| structures is now able to treat the accounting and the fulfillment data differently. |
| There is a default namespace. It is set if no local name is assigned in the |
| namespace definition:</p> |
| <div class="p"><pre><acct:customer xmlns="http://www.my.com/acct-REV10" xmlns:acct="http://www.my.com/acct-REV10 "> |
| <name>Corporation</name> |
| <order acct:ref="5566"/> |
| <status>invoice</status> |
| </customer></pre> |
| </div> |
| <p>In this example, all tags in the customer |
| record are qualified to reside in the namespace http://www.my.com/acct-REV10. |
| No explicit prefix is needed because the default namespace is used. Note that |
| the default namespace applies to any attributes definitions.</p> |
| </div> |
| |
| <div class="section"><h4 class="sectiontitle">XML schemas and namespaces</h4><p>In the following XML |
| schema, the default namespace for the schema is defined as the standard XML |
| schema namespace http://www.w3.org/2001/XMLSchema; there is also a schema |
| specific namespace http://www.ibm.com.</p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:TestSchema="http://www.ibm.com"> |
| <simpleType name="ZipCodeType"> |
| <restriction base="integer"> |
| <minInclusive value="10000"/> |
| <maxInclusive value="99999"/> |
| </restriction> |
| </simpleType> |
| <!--element definitions skipped --> |
| </schema> </pre> |
| </div> |
| <p>Assuming that the preceding XML schema is |
| saved as <span class="filepath">C:\temp\TestSchema.xsd</span>, a sample XML file that |
| validates against this schema is:</p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <x:addressList xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd"> |
| xsi:schemaLocation="http://www.ibm.com file:///C:/temp/TestSchema.xsd"> |
| <x:address> |
| <x:street>x:Vangerowstrasse</x:street> |
| <x:zipCode>69115</x:zipCode> |
| <x:city>x:Heidelberg</x:city> |
| </x:address> |
| <x:address> |
| <x:street>x:Bernal Road</x:street> |
| <x:zipCode>90375</x:zipCode> |
| <x:city>x:San Jose</x:city> |
| </x:address> |
| </x:addressList> </pre> |
| </div> |
| </div> |
| |
| <div class="section"><h4 class="sectiontitle">Target namespace</h4><p> The target namespace serves to |
| identify the namespace within which the association between the element and |
| its name exists. In the case of declarations, this association determines |
| the namespace of the elements in XML files conforming to the schema. An XML |
| file importing a schema must reference its target namespace in the schemaLocation |
| attribute. Any mismatches between the target and the actual namespace of an |
| element are reported as schema validation errors. In our example, the target |
| namespace is http://www.ibm.com; it is defined in the XML schema file and |
| referenced twice in the XML file. Any mismatch between these three occurrences |
| of the namespace lead to validation errors.</p> |
| <p> The following examples |
| show how target namespaces and namespace prefixes work in XML schemas and |
| their corresponding XML instance documents.</p> |
| </div> |
| |
| <div class="section"><h4 class="sectiontitle">Sample 1 - A schema with both a default and target namespace |
| and unqualified locals</h4><p>The XML schema: </p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com"> |
| <complexType name="AddressType"> |
| <sequence> |
| <element name="name" type="string"></element> |
| </sequence> |
| </complexType> |
| <element name="MyAddress" type="x:AddressType"></element> |
| </schema> </pre> |
| </div> |
| <p>A valid XML instance document created from |
| this schema looks like this. Local elements and attributes are unqualified.</p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com x.xsd "> |
| <name>Peter Smith</name> |
| </x:MyAddress> </pre> |
| </div> |
| <p>When local elements (such as the "name" |
| element) and attributes are unqualified in an XML file, then only the root |
| element is qualified. So, in this example, the "x" namespace prefix is assigned |
| to the root element "MyAddress", associating it with the namespace "http://www.ibm.com", |
| but the"x" prefix is not assigned to the local element "name".</p> |
| </div> |
| |
| <div class="section"><h4 class="sectiontitle">Sample 2 - A schema with both a default and target namespace |
| and qualified locals</h4><div class="p"><pre><?xml version="1.0"?> |
| <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com" elementFormDefault="qualified"> |
| <complexType name="AddressType"> |
| <sequence> |
| <element name="name" type="string"></element> |
| </sequence> |
| </complexType> |
| <element name="MyAddress" type="x:AddressType"></element> |
| </schema> </pre> |
| </div> |
| <p>A valid XML instance document created from |
| this schema looks like this. Local elements and attributes are qualified This |
| is because the elementFormDefault attribute is set to qualified in the XML |
| schema.</p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xsi:schemaLocation="http://www.ibm.com x.xsd "> |
| <x:name>Peter Smith</x:name> |
| </x:MyAddress></pre> |
| </div> |
| <p>In this example, the "x" namespace prefix |
| is assigned to both the root element "MyAddress" and the local element "name", |
| associating them with the namespace "http://www.ibm.com",.</p> |
| </div> |
| |
| <div class="section"><h4 class="sectiontitle">Sample 3 - Schema with target Namespace, and explicitly defines |
| xmlns:xsd</h4><p>This XML schema adds this attribute: </p> |
| <samp class="codeph">xmlns:xsd="http://www.w3.org/2001/XMLSchema </samp><p>What |
| this means is that each of the constructs that are defined by the XML schema |
| language will need to be qualified with the "xsd" prefix. For example, xsd:complexType |
| and xsd:string</p> |
| <p>. Note that you can chose any other prefixes such as |
| "xs" or "foobar" in your declaration and usage.</p> |
| <p>You can specify this |
| prefix in the XML schema preferences page. For more information, refer to |
| the related tasks.</p> |
| <p>All user defined types belong to the namespace http://www.ibm.com |
| as defined by the targetNamespace attribute, and the prefix is "x" as defined |
| by the xmlns:x attribute.</p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns:x="http://www.ibm.com"> |
| <xsd:complexType name="AddressType"> |
| <xsd:sequence> |
| <xsd:element name="name" type="xsd:string"></xsd:element> |
| </xsd:sequence> |
| </xsd:complexType> |
| <xsd:element name="MyAddress" type="x:AddressType"></xsd:element> |
| </xsd:schema></pre> |
| </div> |
| <p>A valid XML instance document created |
| from this schema looks like this. Local elements and attributes are unqualified. |
| The semantics of qualification is the same as Sample 1.</p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <x:MyAddress xmlns:x="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.ibm.com x.xsd "> |
| <name>Peter Smith</name> |
| </x:MyAddress></pre> |
| </div> |
| </div> |
| |
| <div class="section"><h4 class="sectiontitle">Sample 4 - Schema with undeclared target Namespace that explicitly |
| defines xmlns:xsd</h4><p>This XML schema has no target namespace for itself. |
| In this case, it is highly recommended that all XML schema constructs be explicitly |
| qualified with a prefix such as "xsd". The definitions and declarations from |
| this schema such as AddressType are referenced without namespace qualification |
| since there is no namespace prefix. </p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> |
| <xsd:complexType name="AddressType"> |
| <xsd:sequence> |
| <xsd:element name="name" type="xsd:string"></xsd:element> |
| <xsd:element name="name" type="xsd:string"></xsd:element> |
| <xsd:element name="name" type="xsd:string"></xsd:element> |
| </xsd:sequence> |
| </xsd:complexType> |
| <xsd:element name="MyAddress" type="AddressType"></xsd:element> |
| </xsd:schema> </pre> |
| </div> |
| <p>A valid XML instance document created |
| from the schema looks like this. All elements are unqualified.</p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <MyAddress xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="x.xsd"> |
| <name>name</name> |
| </MyAddress></pre> |
| </div> |
| </div> |
| |
| <div class="section"><h4 class="sectiontitle">Sample 5 - A schema where the target namespace is the default |
| namespace</h4><p>This is an XML schema where the target namespace is the |
| default namespace. As well, the namespace has no namespace prefix.</p> |
| <div class="p"><pre><?xml version="1.0"?> |
| <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.ibm.com" xmlns="http://www.ibm.com"> |
| <xsd:complexType name="AddressType"> |
| <xsd:sequence> |
| <xsd:element name="name" type="xsd:string"></xsd:element> |
| </xsd:sequence> |
| </xsd:complexType> |
| <xsd:element name="MyAddress" type="AddressType"></xsd:element> |
| </xsd:schema> </pre> |
| </div> |
| <p>A valid XML instance document created |
| from the schema looks like this:</p> |
| <div class="p"><pre><?xml version="1.0" encoding="UTF-8"?> |
| <MyAddress xmlns="http://www.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.ibm.com NewXMLSchema.xsd"> |
| <name>name</name> |
| </MyAddress> </pre> |
| </div> |
| </div> |
| |
| </div> |
| |
| <div><div class="reltasks"><strong>Related tasks</strong><br /> |
| <div><a href="../topics/tedtpref.html" title="You can set various preferences for XML schema files such as the default target namespace and XML Schema language constructs prefix used.">Editing XML schema file preferences</a></div> |
| </div> |
| </div> |
| |
| </body> |
| </html> |