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.
Get XML in a Nutshell, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.