| <?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> |
| <head> |
| <!-- /******************************************************************************* |
| * Copyright (c) 2000, 2005 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 |
| *******************************************************************************/ --> |
| <link rel="stylesheet" type="text/css" href="../../org.eclipse.wst.doc.user/common.css" /> |
| <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><div class="skipspace">XML namespaces are defined by a W3C recommendation, dating 14 January |
| 1999, called <a href="http://www.w3.org/TR/REC-xml-names/">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 xmlns which can amend any XML element. |
| If it is present in an element, it identifies the namespace for this element.</div> |
| <div class="skipspace"><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 <i>namespace definition</i> in |
| the first line assigns the namespace <i>http://www.my.com/acct-REV10</i> 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 <i>http://www.my.com/acct-REV10.</i> 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="skipspace"><h4 class="sectiontitle">XML schemas and namespaces</h4><p>In the XML schema below, |
| the default namespace for the schema is defined as the standard XML schema |
| namespace <i>http://www.w3.org/2001/XMLSchem</i>a; there is also a schema |
| specific namespace <i>http://www.ibm.com</i>.</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 |
| 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="skipspace"><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="skipspace"><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 <i>unqualified</i>.</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 <i>"name"</i> element) |
| and attributes are unqualified in an XML file, then only the root element |
| is qualified. So, in this example, the <i>"x"</i> namespace prefix is assigned |
| to the root element <i>"MyAddress"</i>, associating it with the namespace <i>"http://www.ibm.com",</i> but |
| the<i>"x"</i> prefix is not assigned to the local element <i>"name"</i>.</p> |
| </div> |
| <div class="skipspace"><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 <i>qualified</i> 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 <i>"x"</i> namespace |
| prefix is assigned to both the root element <i>"MyAddress"</i> and the local |
| element <i>"name"</i>, associating them with the namespace <i>"http://www.ibm.com",</i>.</p> |
| </div> |
| <div class="skipspace"><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 <var class="varname">"xsd"</var> prefix. |
| For example, xsd:complexType and xsd:string</p> |
| <p>. Note that you can chose |
| any other prefixes such as <var class="varname">"xs"</var> or <var class="varname">"foobar"</var> 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 below.</p> |
| <p>All |
| user defined types belong to the namespace http://www.ibm.com as defined |
| by the targetNamespace attribute, and the prefix is <i>"x"</i> 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 <i>unqualified</i>. |
| 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="skipspace"><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 <i>"xsd"</i>. The definitions and declarations |
| from this schema such as <i>AddressType</i> 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 <i>unqualified</i>.</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="skipspace"><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> |