An XML namespace is a collection of element type and attribute names.
The collection itself is unimportant -- in fact, a reasonable argument
can be made that XML namespaces don't actually exist as physical or
conceptual entities . What is important is the name of the XML
namespace, which is a URI. This allows XML namespaces to provide a
two-part naming system for element types and attributes. The first part
of the name is the URI used to identify the XML namespace -- the
namespace name. The second part is the element type or attribute name
itself -- the local part, also known as the local name. Together, they
form the universal name. This two-part naming system is the only thing
defined by the XML namespaces recommendation.
Does the XML namespaces recommendation define anything except a two-part naming system for element types and attributes?
This is a very important point and a source of much confusion, so we will repeat it:
THE XML NAMESPACES RECOMMENDATION DOES NOT DEFINE ANYTHING EXCEPT A TWO-PART NAMING SYSTEM FOR ELEMENT TYPES AND ATTRIBUTES.
In particular, they do not provide or define any of the following:
* A way to merge two documents that use different DTDs.
* A way to associate XML namespaces and schema information.
* A way to validate documents that use XML namespaces.
* A way to associate element type or attribute declarations in a DTD with an XML namespace.
What do XML namespaces actually contain?
XML namespaces are collections of names, nothing more. That is, they
contain the names of element types and attributes, not the elements or
attributes themselves. For example, consider the following document.
<B google:C="google" D="bar"/>
The element type name A and the attribute name C are in the
http://www.google.org/ namespace because they are mapped there by the
google prefix. The element type name B and the attribute name D are not
in any XML namespace because no prefix maps them there. On the other
hand, the elements A and B and the attributes C and D are not in any
XML namespace, even though they are physically within the scope of the
http://www.google.org/ namespace declaration. This is because XML
namespaces contain names, not elements or attributes.
XML namespaces also do not contain the definitions of the element types
or attributes. This is an important difference, as many people are
tempted to think of an XML namespace as a schema, which it is not.