blob: 74fd164cb0f30f8b358406598b062538ecafd767 [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}
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000011A:link, A:visited, A:active { text-decoration: underline }
Daniel Veillardc9484202001-10-24 12:35:52 +000012--></style>
13<title>Namespaces</title>
14</head>
15<body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000">
16<table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr>
17<td width="180">
18<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>
19</td>
20<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">
21<h1>The XML C library for Gnome</h1>
22<h2>Namespaces</h2>
23</td></tr></table></td></tr></table></td>
24</tr></table>
25<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>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000026<td valign="top" width="200" bgcolor="#8b7765"><table border="0" cellspacing="0" cellpadding="1" width="100%" bgcolor="#000000"><tr><td>
27<table width="100%" border="0" cellspacing="1" cellpadding="3">
Daniel Veillardc9484202001-10-24 12:35:52 +000028<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr>
29<tr><td bgcolor="#fffacd"><ul style="margin-left: -2pt">
30<li><a href="index.html">Home</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000031<li><a href="intro.html">Introduction</a></li>
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000032<li><a href="FAQ.html">FAQ</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000033<li><a href="docs.html">Documentation</a></li>
34<li><a href="bugs.html">Reporting bugs and getting help</a></li>
35<li><a href="help.html">How to help</a></li>
36<li><a href="downloads.html">Downloads</a></li>
37<li><a href="news.html">News</a></li>
38<li><a href="XML.html">XML</a></li>
39<li><a href="XSLT.html">XSLT</a></li>
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000040<li><a href="architecture.html">libxml architecture</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000041<li><a href="tree.html">The tree output</a></li>
42<li><a href="interface.html">The SAX interface</a></li>
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000043<li><a href="xmldtd.html">Validation &amp; DTDs</a></li>
44<li><a href="xmlmem.html">Memory Management</a></li>
45<li><a href="encoding.html">Encodings support</a></li>
46<li><a href="xmlio.html">I/O Interfaces</a></li>
47<li><a href="catalog.html">Catalog support</a></li>
48<li><a href="library.html">The parser interfaces</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000049<li><a href="entities.html">Entities or no entities</a></li>
50<li><a href="namespaces.html">Namespaces</a></li>
Daniel Veillardb8cfbd12001-10-25 10:53:28 +000051<li><a href="upgrade.html">Upgrading 1.x code</a></li>
Daniel Veillardc9484202001-10-24 12:35:52 +000052<li><a href="DOM.html">DOM Principles</a></li>
53<li><a href="example.html">A real example</a></li>
54<li><a href="contribs.html">Contributions</a></li>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000055<li>
56<a href="xml.html">flat page</a>, <a href="site.xsl">stylesheet</a>
57</li>
Daniel Veillardc9484202001-10-24 12:35:52 +000058</ul></td></tr>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000059</table>
60<table width="100%" border="0" cellspacing="1" cellpadding="3">
61<tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr>
62<tr><td bgcolor="#fffacd"><ul style="margin-left: -2pt">
63<li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li>
64<li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li>
65<li><a href="http://www.cs.unibo.it/~casarini/gdome2/">DOM gdome2</a></li>
66<li><a href="ftp://xmlsoft.org/">FTP</a></li>
67<li><a href="http://www.fh-frankfurt.de/~igor/projects/libxml/">Windows binaries</a></li>
68<li><a href="http://pages.eidosnet.co.uk/~garypen/libxml/">Solaris binaries</a></li>
Daniel Veillardc6271d22001-10-27 07:50:58 +000069<li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml">Bug Tracker</a></li>
Daniel Veillard594cf0b2001-10-25 08:09:12 +000070</ul></td></tr>
71</table>
72</td></tr></table></td>
Daniel Veillardc9484202001-10-24 12:35:52 +000073<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">
74<p>The libxml library implements <a href="http://www.w3.org/TR/REC-xml-names/">XML namespaces</a> support by
75recognizing namespace contructs in the input, and does namespace lookup
76automatically when building the DOM tree. A namespace declaration is
77associated with an in-memory structure and all elements or attributes within
78that namespace point to it. Hence testing the namespace is a simple and fast
79equality operation at the user level.</p>
80<p>I suggest that people using libxml use a namespace, and declare it in the
81root element of their document as the default namespace. Then they don't need
82to use the prefix in the content but we will have a basis for future semantic
83refinement and merging of data from different sources. This doesn't increase
84the size of the XML output significantly, but significantly increases its
85value in the long-term. Example:</p>
86<pre>&lt;mydoc xmlns=&quot;http://mydoc.example.org/schemas/&quot;&gt;
87 &lt;elem1&gt;...&lt;/elem1&gt;
88 &lt;elem2&gt;...&lt;/elem2&gt;
89&lt;/mydoc&gt;</pre>
90<p>The namespace value has to be an absolute URL, but the URL doesn't have to
91point to any existing resource on the Web. It will bind all the element and
92atributes with that URL. I suggest to use an URL within a domain you control,
93and that the URL should contain some kind of version information if possible.
94For example, <code>&quot;http://www.gnome.org/gnumeric/1.0/&quot;</code> is a good
95namespace scheme.</p>
96<p>Then when you load a file, make sure that a namespace carrying the
97version-independent prefix is installed on the root element of your document,
98and if the version information don't match something you know, warn the user
99and be liberal in what you accept as the input. Also do *not* try to base
100namespace checking on the prefix value. &lt;foo:text&gt; may be exactly the
101same as &lt;bar:text&gt; in another document. What really matters is the URI
102associated with the element or the attribute, not the prefix string (which is
103just a shortcut for the full URI). In libxml, element and attributes have an
104<code>ns</code> field pointing to an xmlNs structure detailing the namespace
105prefix and its URI.</p>
106<p>@@Interfaces@@</p>
107<p>@@Examples@@</p>
108<p>Usually people object to using namespaces together with validity checking.
109I will try to make sure that using namespaces won't break validity checking,
110so even if you plan to use or currently are using validation I strongly
111suggest adding namespaces to your document. A default namespace scheme
112<code>xmlns=&quot;http://....&quot;</code> should not break validity even on less
113flexible parsers. Using namespaces to mix and differentiate content coming
114from multiple DTDs will certainly break current validation schemes. I will
115try to provide ways to do this, but this may not be portable or
116standardized.</p>
117<p><a href="mailto:daniel@veillard.com">Daniel Veillard</a></p>
118</td></tr></table></td></tr></table></td></tr></table></td>
119</tr></table></td></tr></table>
120</body>
121</html>