SAX2 Namespace Support

David Megginson david at
Mon Dec 20 23:03:45 GMT 1999

OK, here goes...


I accept Tim Bray's argument that Namespace-qualified names should be
passed on in two parts and not one, and that Namespace-aware
processing is the future of XML.

I accept James Clark's argument that there must be a mechanism for
passing on the original prefix if the parser supports doing so and the 
application desires it, if only for DOM2 support.

General Rules

1. By default, SAX2 parsers shall perform Namespace processing unless
   explicitly requested not to do so.  There's no point having them
   start in an indeterminate state, or in allowing SAX2 parsers not to
   do Namespace processing.  I will provide a filter that can be
   embedded in the driver for parsers that don't do NS processing

2. There will be features for (i) requesting that the original prefix
   be prepended to each local name and (ii) turning off Namespace
   processing altogether.  The default value for each of these
   features will be false, and no parser is required to support either 
   of them.

3. If a LexicalHandler is set, the parser may use it to report the
   scope of Namespace declarations.  Note that this is a little
   brittle, and probably less useful than people think, but that it is
   essential for XSLT.  Not all parsers will support LexicalHandler.

4. Namespace-qualified names are always reported as two separate
   strings: the Namespace URI and the local name.  The local name may
   have the original prefix prepended at client request, but the
   prefix will not be there by default.

The idea of all of this is that fully-cooked Namespace processing is
the default behaviour and the normal, transparent operating mode for
SAX2 -- most application writers need never know that other modes are

However, there are optional, non-obtrusive mechanisms for passing on
extra information (such as the original prefixes and the scope of NS
declarations).  The presence or absence of support for these optional
features can be determined by feature queries.


This implementation is based largely on suggestions from James Clark.

[from org.xml.sax2.DocumentHandler]

  public void startElement (String ns, String name, 
                            AttributeList atts)
    throws SAXException;

  public void endElement (String ns, String name)
    throws SAXException;


  public class AttributeList
    public int getLength ();

    public String getNamespaceURI (int i);
    public String getName (int i);
    public String getType (int i);
    public String getValue (int i);

    public String getType (String ns, String localName);
    public String getValue (String ns, String localName);

                    // For searching on prefixed names
    public String getType (String name);
    public String getValue (String name);

[from org.xml.sax2.LexicalHandler]

  public void startNamespaceDeclScope (String prefix, String uri)
    throws SAXException;

  public void endNamespaceDeclScope (String prefix)
    throws SAXException;

Unless someone shows a catastrophic problem with all this (not a
purely aesthetic one), I plan to go ahead to other SAX2 problems now.

All the best,


David Megginson                 david at

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 unsubscribe, mailto:majordomo at the following message;
unsubscribe 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