Home | History | Annotate | Download | only in doc
      1 <?xml version="1.0" encoding="UTF-8"?>
      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=UTF-8" /><link rel="SHORTCUT ICON" href="/favicon.ico" /><style type="text/css">
      4 TD {font-family: Verdana,Arial,Helvetica}
      5 BODY {font-family: Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right: 0em}
      6 H1 {font-family: Verdana,Arial,Helvetica}
      7 H2 {font-family: Verdana,Arial,Helvetica}
      8 H3 {font-family: Verdana,Arial,Helvetica}
      9 A:link, A:visited, A:active { text-decoration: underline }
     10 </style><title>Namespaces</title></head><body bgcolor="#8b7765" text="#000000" link="#a06060" vlink="#000000"><table border="0" width="100%" cellpadding="5" cellspacing="0" align="center"><tr><td width="120"><a href="http://swpat.ffii.org/"><img src="epatents.png" alt="Action against software patents" /></a></td><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="html/index.html">Reference Manual</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">Releases</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="examples/index.html" style="font-weight:bold">Code Examples</a></li><li><a href="html/index.html" style="font-weight:bold">API Menu</a></li><li><a href="guidelines.html">XML Guidelines</a></li><li><a href="ChangeLog.html">Recent Changes</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://opencsw.org/packages/libxml2">Solaris binaries</a></li><li><a href="http://www.explain.com.au/oss/libxml2xslt.html">MacOsX binaries</a></li><li><a href="http://lxml.de/">lxml Python bindings</a></li><li><a href="http://cpan.uwinnipeg.ca/dist/XML-LibXML">Perl bindings</a></li><li><a href="http://libxmlplusplus.sourceforge.net/">C++ bindings</a></li><li><a href="http://www.zend.com/php5/articles/php5-xmlphp.php#Heading4">PHP bindings</a></li><li><a href="http://sourceforge.net/projects/libxml2-pas/">Pascal bindings</a></li><li><a href="http://libxml.rubyforge.org/">Ruby bindings</a></li><li><a href="http://tclxml.sourceforge.net/">Tcl 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
     11 recognizing namespace constructs in the input, and does namespace lookup
     12 automatically when building the DOM tree. A namespace declaration is
     13 associated with an in-memory structure and all elements or attributes within
     14 that namespace point to it. Hence testing the namespace is a simple and fast
     15 equality operation at the user level.</p><p>I suggest that people using libxml2 use a namespace, and declare it in the
     16 root element of their document as the default namespace. Then they don't need
     17 to use the prefix in the content but we will have a basis for future semantic
     18 refinement and  merging of data from different sources. This doesn't increase
     19 the size of the XML output significantly, but significantly increases its
     20 value in the long-term. Example:</p><pre>&lt;mydoc xmlns="http://mydoc.example.org/schemas/"&gt;
     21    &lt;elem1&gt;...&lt;/elem1&gt;
     22    &lt;elem2&gt;...&lt;/elem2&gt;
     23 &lt;/mydoc&gt;</pre><p>The namespace value has to be an absolute URL, but the URL doesn't have to
     24 point to any existing resource on the Web. It will bind all the element and
     25 attributes with that URL. I suggest to use an URL within a domain you
     26 control, and that the URL should contain some kind of version information if
     27 possible. For example, <code>"http://www.gnome.org/gnumeric/1.0/"</code> is a
     28 good namespace scheme.</p><p>Then when you load a file, make sure that a namespace carrying the
     29 version-independent prefix is installed on the root element of your document,
     30 and if the version information don't match something you know, warn the user
     31 and be liberal in what you accept as the input. Also do *not* try to base
     32 namespace checking on the prefix value. &lt;foo:text&gt; may be exactly the
     33 same as &lt;bar:text&gt; in another document. What really matters is the URI
     34 associated with the element or the attribute, not the prefix string (which is
     35 just 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
     37 prefix and its URI.</p><p>@@Interfaces@@</p><pre>xmlNodePtr node;
     38 if(!strncmp(node-&gt;name,"mytag",5)
     39   &amp;&amp; node-&gt;ns
     40   &amp;&amp; !strcmp(node-&gt;ns-&gt;href,"http://www.mysite.com/myns/1.0")) {
     41   ...
     42 }</pre><p>Usually people object to using namespaces together with validity checking.
     43 I will try to make sure that using namespaces won't break validity checking,
     44 so even if you plan to use or currently are using validation I strongly
     45 suggest adding namespaces to your document. A default namespace scheme
     46 <code>xmlns="http://...."</code> should not break validity even on less
     47 flexible parsers. Using namespaces to mix and differentiate content coming
     48 from multiple DTDs will certainly break current validation schemes. To check
     49 such documents one needs to use schema-validation, which is supported in
     50 libxml2 as well. See <a href="http://www.relaxng.org/">relagx-ng</a> and <a href="http://www.w3c.org/XML/Schema">w3c-schema</a>.</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>
     51