=> In article <199807201132.HAA00572@unready.megginson.com>, David
=> wrote:
David> How should SAX support namespaces? I can think of three
David> options:
I'd like to add a fourth: define namespace support as a layer above
SAX, which can interface with any SAX parser, and produce output
similar to that of SAX with additional information. Then this
"namespace library" can do one of your proposed actions:
David> 1. Simply ignore them, and require the XML application to do
David> the work (all of the necessary information is passed on by
David> SAX).
David>
David> 2. Use the current interface, but allow namespace-aware SAX
David> processors to prepend namespace URIs to element type and
David> attribute names, as in
David>
David> startElement("urn:www.megginson.com:doc", ...)
David> endElement("urn:www.megginson.com:doc", ...)
David>
David> 3. Revised org.xml.sax.AttributeList and org.xml.sax.DocumentHandler
David> to include the namespace as a separate (possibly-null) argument:
David>
David> startElement("urn:www.megginson.com", "doc", ...)
David> endElement("urn:www.megginson.com", "doc", ...)
4. Apply an application-specified re-mapping to the names. So the
above could be initialised with
ns_processor.setPrefix("urn:www.megginson.com", "davids-ns");
and have its document handler called with
startElement("davids-ns:doc", ...)
endElement("davids-ns:doc", ...)
I don't particularly like (2) above, since it means that different SAX
parsers may return different values for the same document.
I do feel that namespace handling is orthogonal to syntactic parsing
of XML, and that SAX itself should confine itself to the latter. I'm
not sure whether namespace processing should happen between SAX and
the application (layered approach) or separately "at the side" of the
application (application developers' utility class).
--