Lists Home |
Date Index |
Ronald Bourret wrote:
> We're in agreement. This is exactly what I meant by:
> > > This (the <!NAMESPACE ...> construct) is the only way to declare
> > > namespaces in the validation DTD. The body of the document still uses
> > > normal namespace declarations (xmlns:foo="...").
> Two declarations -- one for the DTD, one for the instance -- which apply
> to their own area and which can use different prefixes.
> While we're on the subject, it's worth noting that the declarations in
> the validation DTD have the entire DTD as their scope. Since the DTD is
> a graph with no defined starting point, the notion of scope as it
> applies to namespace declarations in an instance document doesn't make
> sense. A corollary of this is that it's an error to use the same prefix
> in two different NAMESPACE constructs. It is not an error to use the
> same namespace name (URI) in two different constructs, although it could
> be made one.
The definitions in a DTD may or may not constitute a tree. In most cases, however, they do constitute a graph which exhibits a
partial order. Even in cases where the order is either incomplete or cyclic, the notion of scope does make sense. Where one
applies such a notion, it is possible to compute the same namespace assignments within the definitions as within the elements
from the same attribute declarations as would be required by document validity. This so long as the declarations are not over-constrained.
<!ELEMENT p1 (c) >
<!ATTLIST p1 xmlns CDATA "ns1" >
<!ELEMENT p2 (c) >
<!ATTLIST p2 xmlns CDATA "ns2" >
<!ELEMENT c EMPTY >