blob: 622aedae91b6e99c3543b542f569a0697ea2a3c1 [file] [log] [blame]
Daniel Veillard1177ca42003-04-26 22:29:54 +00001<?xml version="1.0" encoding="ISO-8859-1"?>
2<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
Daniel Veillard373a4752002-02-21 14:46:29 +00004TD {font-family: Verdana,Arial,Helvetica}
5BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
6H1 {font-family: Verdana,Arial,Helvetica}
7H2 {font-family: Verdana,Arial,Helvetica}
8H3 {font-family: Verdana,Arial,Helvetica}
Daniel Veillardb8cfbd12001-10-25 10:53:28 +00009A:link, A:visited, A:active { text-decoration: underline }
Daniel Veillard66f68e72003-08-18 16:39:51 +000010</style><title>Namespaces</title></head><body bgcolor="#8b7765" text="#000000" link="#000000" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="180"><a href="http://www.gnome.org/"><img src="gnome2.png" alt="Gnome2 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><div align="left"><a href="http://xmlsoft.org/"><img src="Libxml2-Logo-180x168.gif" alt="Made with Libxml2 Logo" /></a></div></td><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"><h1>The XML C parser and toolkit of Gnome</h1><h2>Namespaces</h2></td></tr></table></td></tr></table></td></tr></table><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><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"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Main Menu</b></center></td></tr><tr><td bgcolor="#fffacd"><form action="search.php" enctype="application/x-www-form-urlencoded" method="get"><input name="query" type="text" size="20" value="" /><input name="submit" type="submit" value="Search ..." /></form><ul><li><a href="index.html">Home</a></li><li><a href="intro.html">Introduction</a></li><li><a href="FAQ.html">FAQ</a></li><li><a href="docs.html" style="font-weight:bold">Developer Menu</a></li><li><a href="bugs.html">Reporting bugs and getting help</a></li><li><a href="help.html">How to help</a></li><li><a href="downloads.html">Downloads</a></li><li><a href="news.html">News</a></li><li><a href="XMLinfo.html">XML</a></li><li><a href="XSLT.html">XSLT</a></li><li><a href="xmldtd.html">Validation &amp; DTDs</a></li><li><a href="encoding.html">Encodings support</a></li><li><a href="catalog.html">Catalog support</a></li><li><a href="namespaces.html">Namespaces</a></li><li><a href="contribs.html">Contributions</a></li><li><a href="guidelines.html">XML Guidelines</a></li></ul></td></tr></table><table width="100%" border="0" cellspacing="1" cellpadding="3"><tr><td colspan="1" bgcolor="#eecfa1" align="center"><center><b>Related links</b></center></td></tr><tr><td bgcolor="#fffacd"><ul><li><a href="http://mail.gnome.org/archives/xml/">Mail archive</a></li><li><a href="http://xmlsoft.org/XSLT/">XSLT libxslt</a></li><li><a href="http://phd.cs.unibo.it/gdome2/">DOM gdome2</a></li><li><a href="http://www.aleksey.com/xmlsec/">XML-DSig xmlsec</a></li><li><a href="ftp://xmlsoft.org/">FTP</a></li><li><a href="http://www.zlatkovic.com/projects/libxml/">Windows binaries</a></li><li><a href="http://garypennington.net/libxml2/">Solaris binaries</a></li><li><a href="http://www.zveno.com/open_source/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://bugzilla.gnome.org/buglist.cgi?product=libxml2">Bug Tracker</a></li></ul></td></tr></table></td></tr></table></td><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"><p>The libxml2 library implements <a href="http://www.w3.org/TR/REC-xml-names/">XML namespaces</a> support by
Daniel Veillard63d83142002-05-20 06:51:05 +000011recognizing namespace constructs in the input, and does namespace lookup
Daniel Veillardc9484202001-10-24 12:35:52 +000012automatically when building the DOM tree. A namespace declaration is
13associated with an in-memory structure and all elements or attributes within
14that namespace point to it. Hence testing the namespace is a simple and fast
Daniel Veillard8a469172003-06-12 16:05:07 +000015equality operation at the user level.</p><p>I suggest that people using libxml2 use a namespace, and declare it in the
Daniel Veillardc9484202001-10-24 12:35:52 +000016root element of their document as the default namespace. Then they don't need
17to use the prefix in the content but we will have a basis for future semantic
18refinement and merging of data from different sources. This doesn't increase
19the size of the XML output significantly, but significantly increases its
Daniel Veillard1177ca42003-04-26 22:29:54 +000020value in the long-term. Example:</p><pre>&lt;mydoc xmlns=&quot;http://mydoc.example.org/schemas/&quot;&gt;
Daniel Veillardc9484202001-10-24 12:35:52 +000021 &lt;elem1&gt;...&lt;/elem1&gt;
22 &lt;elem2&gt;...&lt;/elem2&gt;
Daniel Veillard1177ca42003-04-26 22:29:54 +000023&lt;/mydoc&gt;</pre><p>The namespace value has to be an absolute URL, but the URL doesn't have to
Daniel Veillardc9484202001-10-24 12:35:52 +000024point to any existing resource on the Web. It will bind all the element and
Daniel Veillardc0801af2002-05-28 16:28:42 +000025attributes with that URL. I suggest to use an URL within a domain you
26control, and that the URL should contain some kind of version information if
27possible. For example, <code>&quot;http://www.gnome.org/gnumeric/1.0/&quot;</code> is a
Daniel Veillard1177ca42003-04-26 22:29:54 +000028good namespace scheme.</p><p>Then when you load a file, make sure that a namespace carrying the
Daniel Veillardc9484202001-10-24 12:35:52 +000029version-independent prefix is installed on the root element of your document,
30and if the version information don't match something you know, warn the user
31and be liberal in what you accept as the input. Also do *not* try to base
32namespace checking on the prefix value. &lt;foo:text&gt; may be exactly the
33same as &lt;bar:text&gt; in another document. What really matters is the URI
34associated with the element or the attribute, not the prefix string (which is
35just a shortcut for the full URI). In libxml, element and attributes have an
36<code>ns</code> field pointing to an xmlNs structure detailing the namespace
Daniel Veillard1177ca42003-04-26 22:29:54 +000037prefix and its URI.</p><p>@@Interfaces@@</p><p>@@Examples@@</p><p>Usually people object to using namespaces together with validity checking.
Daniel Veillardc9484202001-10-24 12:35:52 +000038I will try to make sure that using namespaces won't break validity checking,
39so even if you plan to use or currently are using validation I strongly
40suggest adding namespaces to your document. A default namespace scheme
41<code>xmlns=&quot;http://....&quot;</code> should not break validity even on less
42flexible parsers. Using namespaces to mix and differentiate content coming
43from multiple DTDs will certainly break current validation schemes. I will
44try to provide ways to do this, but this may not be portable or
Daniel Veillard1177ca42003-04-26 22:29:54 +000045standardized.</p><p><a href="bugs.html">Daniel Veillard</a></p></td></tr></table></td></tr></table></td></tr></table></td></tr></table></td></tr></table></body></html>