Namespaces and DTDs
Namespaces are completely independent of DTDs and can be used in
both valid and invalid documents. A document can have a DTD but not
use namespaces or use namespaces but not have a DTD. It can use both
namespaces and DTDs or neither namespaces nor DTDs. Namespaces do not
in any way change DTD syntax nor do they change the definition of
validity. For instance, the DTD of a valid document that uses an
element named dc:title must include
an ELEMENT declaration properly
specifying the content of the dc:title element. For example:
<!ELEMENT dc:title (#PCDATA)>
The name of the element in the document must exactly match the
name of the element in the DTD, including the prefix. The DTD cannot
omit the prefix and simply declare a title element. The same is true of prefixed
attributes. For instance, if an element used in the document has
xlink:type and xlink:href attributes, then the DTD must
declare the xlink:type and xlink:href attributes, not simply type and href.
Conversely, if an element uses an xmlns attribute to set the default namespace
and does not attach prefixes to elements, then the names of the
elements must be declared without prefixes in the DTD. The validator
neither knows nor cares about the existence of namespaces. All it sees
is that some element and attribute names happen to contain colons; as
far as it’s concerned, such names are perfectly valid as long as
they’re declared.