<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=“www.w3.org/1999/xhtml”>
http-equiv=“Content-Type” content=“text/html; charset=UTF-8” /><link
rel=“SHORTCUT ICON” href=“/favicon.ico” /><style type=“text/css”>
TD {font-family: Verdana,Arial,Helvetica} BODY {font-family:
Verdana,Arial,Helvetica; margin-top: 2em; margin-left: 0em; margin-right:
0em} H1 {font-family: Verdana,Arial,Helvetica} H2 {font-family:
Verdana,Arial,Helvetica} H3 {font-family: Verdana,Arial,Helvetica} A:link,
A:visited, A:active { text-decoration: underline }
</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=“swpat.ffii.org/”>
src=“epatents.png” alt=“Action against software patents”
/></a></td><td width=“180”><a href=“
www.gnome.org/”>
src=“gnome2.png” alt=“Gnome2 Logo” /></a><a href=“
www.w3.org/Status”>
src=“w3c.png” alt=“W3C Logo” /></a><a href=“
www.redhat.com/”>
src=“redhat.gif” alt=“Red Hat Logo” /></a><div
align=“left”><a href=“
xmlsoft.org/”>
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>Main
Menu</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 &
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>Related
links</center></td></tr><tr><td
bgcolor=“#fffacd”><ul><li><a href=“Mail”>mail.gnome.org/archives/xml/“>Mail
archive</a></li><li><a href=”XSLT“>xmlsoft.org/XSLT/”>XSLT
libxslt</a></li><li><a href=“DOM”>phd.cs.unibo.it/gdome2/“>DOM
gdome2</a></li><li><a href=”XML-DSig“>www.aleksey.com/xmlsec/”>XML-DSig
xmlsec</a></li><li><a href=“FTP
<elem1>...</elem1> <elem2>...</elem2>
</mydoc></pre><p>The namespace value has to be an
absolute URL, but the URL doesn't have to point to any existing
resource on the Web. It will bind all the element and attributes with that
URL. I suggest to use an URL within a domain you control, and that the URL
should contain some kind of version information if possible. For example,
"http://www.gnome.org/gnumeric/1.0/"
is a good
namespace scheme.</p><p>Then when you load a file, make sure
that a namespace carrying the version-independent prefix is installed on
the root element of your document, and if the version information don't
match something you know, warn the user and be liberal in what you accept
as the input. Also do not try to base namespace checking
on the prefix value. <foo:text> may be exactly the same as
<bar:text> in another document. What really matters is the
URI associated with the element or the attribute, not the prefix string
(which is just a shortcut for the full URI). In libxml, element and
attributes have an ns
field pointing to an xmlNs structure
detailing the namespace prefix and its
URI.</p><p>@@Interfaces@@</p><pre>xmlNodePtr node;
if(!strncmp(node->name,“mytag”,5)
&& node->ns && !strcmp(node->ns->href,"http://www.mysite.com/myns/1.0")) { ...
}</pre><p>Usually people object to using namespaces together
with validity checking. I will try to make sure that using namespaces
won't break validity checking, so even if you plan to use or currently
are using validation I strongly suggest adding namespaces to your document.
A default namespace scheme xmlns="http://...."
should not break validity even on less flexible parsers. Using namespaces
to mix and differentiate content coming from multiple DTDs will certainly
break current validation schemes. To check such documents one needs to use
schema-validation, which is supported in libxml2 as well. See <a
href=“relagx-ngwww.relaxng.org/”>relagx-ng>
and <a href=“w3c-schema.