SAX2: Namespace proposal
David Megginson
david at megginson.com
Sat Dec 18 22:57:10 GMT 1999
In my last message, I summarized some of the major positions that have
emerged on Namespace support in SAX2. I've done a lot of thinking
about this recently, partly because Namespace support is a technical
requirement for two of my customers.
With SAX2 alpha 1, the idea was to preserve SAX 1.0 pretty much intact
and add extra features to it. Upon reflection, I think that it will
make more sense to create a whole new package, org.xml.sax2 (if OASIS
gives permission), which is similar to org.xml.sax in many but not all
respects -- that will avoid nightmarish problems with classpaths,
etc., and it will be quite easy to write adapters.
That said, I think that the best solution in SAX2 will be to allow
either or both Namespace-qualified and raw XML names. People seem to
want both, and although I *strongly* disagree, DOM2 has decided to
provide what should be irrelevant information about the original
prefix used.
Anyway, here's what I'm suggesting. Please take a couple of Rolaids
and maybe even a Gravol before you look at this, because while it's
functional, it's not at all pretty...
1. From org.xml.sax2.DocumentHandler
public void startElement (String name, String namespaceURI,
String localName, AttributeList atts)
throws SAXException;
public void endElement (String name, String namespaceURI,
String localName)
throws SAXException;
2. From org.xml.sax2.AttributeList
public String getName (int index);
public String getNamespaceURI (int index);
public String getLocalName (int index);
public String getType (int index);
public String getValue (int index);
public String getType (String name);
public String getType (String namespaceURI, String localName);
public String getValue (String name);
public String getValue (String namespaceURI, String localName);
Notes:
a. A parser has the right to supply only cooked Namespace information,
only raw XML 1.0 information, or both, as long as it does so
consistently. It will be possible to query and set the parser's
features.
b. The Namespace URI will be null when there is no Namespace declared
or none available.
c. If the Parser is delivering raw XML 1.0 names, the Namespace
declarations (xmlns*) will be included in the AttributeList but
both the Namespace URI and the local name will be set to null, and
getType(String, String) and getValue(String, String) will always
fail (even with null arguments).
d. There will probably also be a NamespaceHandler to report the scope
of Namespace declarations, but it may be possible to roll that into
LexicalHandler.
Here's a short example:
<note xmlns:html="http://www.w3.org/1999/xhtml">
<html:p>Hello, world!</html:p>
</note>
If the parser does only raw XML 1.0 processing, it will report the
following events (omitting a little whitespace for clarity):
startDocument()
startElement("note", null, null, [ATTS]);
startElement("html:p", null, null, [ATTS]);
characters("Hello, world!")
endElement("html:p", null, null)
endElement("note", null, null)
endDocument()
If the parser does only Namespace processing it will report the
following events (again, omitting a little whitespace):
startDocument()
startElement(null, null, "note", [ATTS]);
startElement(null, "http://www.w3.org/1999/xhtml", "p", [ATTS]);
characters("Hello, world!")
endElement(null, "http://www.w3.org/1999/xhtml", "p")
endElement(null, null, "note")
endDocument()
If the parser does both kinds of processing, it will report the
following:
startDocument()
startElement("note", null, "note", [ATTS]);
startElement("html:p", "http://www.w3.org/1999/xhtml", "p", [ATTS]);
characters("Hello, world!")
endElement("html:p", "http://www.w3.org/1999/xhtml", "p")
endElement("note", null, "note")
endDocument()
This is kind-of painful, I know, but please remember that SAX is meant
to be the equivalent of a low-level device driver, not an elegant,
high-level API (though those can be and have been built on top of it).
A higher-level API would be free to ignore the raw XML 1.0 names, and,
in my opinion, would probably be wise to do so.
All the best,
David
--
David Megginson david at megginson.com
http://www.megginson.com/
xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To unsubscribe, mailto:majordomo at ic.ac.uk the following message;
unsubscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)
More information about the Xml-dev
mailing list