blob: d975f3fec4bfbc457243042f90049aa873797022 [file] [log] [blame]
Daniel Veillardc9484202001-10-24 12:35:52 +00001<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
2<html>
3<head>
4<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type">
5<style type="text/css"><!--
6TD {font-size: 10pt; font-family: Verdana,Arial,Helvetica}
7BODY {font-size: 10pt; font-family: Verdana,Arial,Helvetica; margin-top: 5pt; margin-left: 0pt; margin-right: 0pt}
8H1 {font-size: 16pt; font-family: Verdana,Arial,Helvetica}
9H2 {font-size: 14pt; font-family: Verdana,Arial,Helvetica}
10H3 {font-size: 12pt; font-family: Verdana,Arial,Helvetica}
11--></style>
12<title>Namespaces</title>
13</head>
14<body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
15<table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr>
16<td width="180">
17<a href="http://www.gnome.org/"><img src="smallfootonly.gif" alt="Gnome Logo"></a><a href="http://www.w3.org/Status"><img src="w3c.png" alt="W3C Logo"></a><a href="http://www.redhat.com/"><img src="redhat.gif" alt="Red Hat Logo"></a>
18</td>
19<td><table border="0" width="90%" cellpadding="2" cellspacing="0" align="center" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3" bgcolor="#fffacd"><tr><td align="center">
20<h1>The XML C library for Gnome</h1>
21<h2>Namespaces</h2>
22</td></tr></table></td></tr></table></td>
23</tr></table>
24<table border="0" cellpadding="4" cellspacing="0" width="100%" align="center"><tr><td bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="2" width="100%"><tr>
25<td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table width="100%" border="0" cellspacing="1" cellpadding="3">
26<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr>
27<tr><td bgcolor="#fffacd"><ul style="margin-left: -2pt">
28<li><a href="index.html">Home</a></li>
29<li><a href="FAQ.html">FAQ</a></li>
30<li><a href="intro.html">Introduction</a></li>
31<li><a href="docs.html">Documentation</a></li>
32<li><a href="bugs.html">Reporting bugs and getting help</a></li>
33<li><a href="help.html">How to help</a></li>
34<li><a href="downloads.html">Downloads</a></li>
35<li><a href="news.html">News</a></li>
36<li><a href="XML.html">XML</a></li>
37<li><a href="XSLT.html">XSLT</a></li>
38<li><a href="architecture.html">An overview of libxml architecture</a></li>
39<li><a href="tree.html">The tree output</a></li>
40<li><a href="interface.html">The SAX interface</a></li>
41<li><a href="library.html">The XML library interfaces</a></li>
42<li><a href="entities.html">Entities or no entities</a></li>
43<li><a href="namespaces.html">Namespaces</a></li>
44<li><a href="valid.html">Validation, or are you afraid of DTDs ?</a></li>
45<li><a href="DOM.html">DOM Principles</a></li>
46<li><a href="example.html">A real example</a></li>
47<li><a href="contribs.html">Contributions</a></li>
48<li><a href="encoding.html">Encodings support</a></li>
49<li><a href="catalog.html">Catalogs support</a></li>
50<li><a href="xmlio.html">I/O interfaces</a></li>
51<li><a href="xmlmem.html">Memory interfaces</a></li>
52<li><a href="xmldtd.html">DTD support</a></li>
53<li><a href="xml.html">flat page</a></li>
54</ul></td></tr>
55</table></td></tr></table></td>
56<td valign="top" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%"><tr><td><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td><table border="0" cellpadding="3" cellspacing="1" width="100%"><tr><td bgcolor="#fffacd">
57<p>The libxml library implements <a href="http://www.w3.org/TR/REC-xml-names/">XML namespaces</a> support by
58recognizing namespace contructs in the input, and does namespace lookup
59automatically when building the DOM tree. A namespace declaration is
60associated with an in-memory structure and all elements or attributes within
61that namespace point to it. Hence testing the namespace is a simple and fast
62equality operation at the user level.</p>
63<p>I suggest that people using libxml use a namespace, and declare it in the
64root element of their document as the default namespace. Then they don't need
65to use the prefix in the content but we will have a basis for future semantic
66refinement and merging of data from different sources. This doesn't increase
67the size of the XML output significantly, but significantly increases its
68value in the long-term. Example:</p>
69<pre>&lt;mydoc xmlns=&quot;http://mydoc.example.org/schemas/&quot;&gt;
70 &lt;elem1&gt;...&lt;/elem1&gt;
71 &lt;elem2&gt;...&lt;/elem2&gt;
72&lt;/mydoc&gt;</pre>
73<p>The namespace value has to be an absolute URL, but the URL doesn't have to
74point to any existing resource on the Web. It will bind all the element and
75atributes with that URL. I suggest to use an URL within a domain you control,
76and that the URL should contain some kind of version information if possible.
77For example, <code>&quot;http://www.gnome.org/gnumeric/1.0/&quot;</code> is a good
78namespace scheme.</p>
79<p>Then when you load a file, make sure that a namespace carrying the
80version-independent prefix is installed on the root element of your document,
81and if the version information don't match something you know, warn the user
82and be liberal in what you accept as the input. Also do *not* try to base
83namespace checking on the prefix value. &lt;foo:text&gt; may be exactly the
84same as &lt;bar:text&gt; in another document. What really matters is the URI
85associated with the element or the attribute, not the prefix string (which is
86just a shortcut for the full URI). In libxml, element and attributes have an
87<code>ns</code> field pointing to an xmlNs structure detailing the namespace
88prefix and its URI.</p>
89<p>@@Interfaces@@</p>
90<p>@@Examples@@</p>
91<p>Usually people object to using namespaces together with validity checking.
92I will try to make sure that using namespaces won't break validity checking,
93so even if you plan to use or currently are using validation I strongly
94suggest adding namespaces to your document. A default namespace scheme
95<code>xmlns=&quot;http://....&quot;</code> should not break validity even on less
96flexible parsers. Using namespaces to mix and differentiate content coming
97from multiple DTDs will certainly break current validation schemes. I will
98try to provide ways to do this, but this may not be portable or
99standardized.</p>
100<p><a href="mailto:daniel@veillard.com">Daniel Veillard</a></p>
101</td></tr></table></td></tr></table></td></tr></table></td>
102</tr></table></td></tr></table>
103</body>
104</html>