Restricted Namespaces for XML

Tyler Baker tyler at
Thu Feb 4 19:20:28 GMT 1999

Ronald Bourret wrote:

> Don Park wrote:
> > Such a spec might dictate that all namespace declarations be at the root
> > element (XML fragments are problematic but...).  This restriction has the
> > side effect of not allowing duplicate prefixes.
> The major benefit of this proposal is that it reduces the number of checks
> for xmlns attributes. This savings is minimal in small documents or
> documents with few attributes, but it would be interesting to know how much
> xmlns attribute processing costs in a large, attribute-intensive document.
> I think readability is a wash, as you can't do anything more with this than
> you can with the current proposal and you lose the ability to have multiple
> default namespaces, which are useful in documents that have long sections
> alternating between two or more namespaces.
> I think the biggest problem is, as James Clark noted elsewhere,
> complication of fragmentation.  Since I believe fragments to be a big part
> of the future, I don't like anything that will make them harder.
> That said, if anybody had some real numbers about what xmlns attribute
> processing costs in the worst case and this turned out to be significant,
> it might be useful to have a PI that tells the namespace processor whether
> it needs to look beyond the root element.

At the parser level, things are not very expensive if you check each attribute name you parse
to see if it is of the string "xmlns" or else starts with the string "xmlns:".  However,
directly on top of SAX (or done as a filter on top of an XML Parser) you need to in effect for
every element:

Search the entire attribute list for attributes with the name "xmlns" or else something that
starts with "xmlns:".  You in effect need to do something like:

public void startElement(String name, AttributeList attributes) throws SAXException {
  int length = attributes.getLength();
  String name;
  for (int i = 0; i < length; i++) {
    attributeName = attributes.getName(i);
    if (attributeName.equals("xmlns")) {
      // Do default namespace processing
    else if (attributeName.startsWith("xmlns:")) {
      // Do namespace processing

If you have documents which have very few attributes in the elements, then this is not too
expensive.  If you have documents (like HTML literal result elements in XSL) then things can
get pretty harry.

If SAX were to make a simple requirement that all strings that represent symbols (like names)
were to be interned then things would be a lot cheaper.  The same can be said of the DOM as
well.  Even though there is a relatively small cost to interning all Names in the DOM, being
able to test for identity instead of equality for operations like namespace processing are not
as big a performance problem anymore (plus it can help out in performance areas for a lot of
applications in the general case).


xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as: and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at

More information about the Xml-dev mailing list