[Q] How should SAX support Namespaces?

John Cowan cowan at locke.ccil.org
Fri Jul 24 23:25:06 BST 1998


Toby Speight scripsit:

> 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:

I absolutely agree with this.  In fact, I think that this simple
species of namespace support should be provided as part of the
SAX helper library, so that everyone has it readily available.
That way, SAX-compliant XML parsers can just do XML and leave
namespaces up to common code.
 
> 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).

This corresponds to not using a helper class at all.

> 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>    startElement("urn:www.megginson.com:doc", ...)
> David>    endElement("urn:www.megginson.com:doc", ...)

This corresponds to a helper class that is itself a SAX-compliant
parser.  Just initialize it with the object representing some other
(real) parser, and it decodes namespace PIs and alters the
startElement, endElement etc. calls.

I must point out, however, that since ":" is valid in URIs
it should *not* be used as the separator between URIs and Names,
and instead some character not valid in either should be used.
Since we are in a Java/Unicode context, I propose '\u2020' DAGGER
as the separator: both Arial Sans Unicode and Bitstream Cyberbit
have glyphs for it, which assists debugging.

> 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", ...)

And this would be a helper class that exports an interface related
to, but different from, the SAX 1.0 interface.
 
> 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", ...)

This would be another helper class, also a SAX 1.0 compliant parser.

> I don't particularly like (2) above, since it means that different SAX
> parsers may return different values for the same document.

I don't understand this comment.

> 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).

Layered, layered, says I.  Option #2's class would be IMHO the
most useful, since you can plug it into an existing SAX-using
application with zero changes to the interface, and just start
testing for names like "http://purl.oclc.org/NET/xschema\u2020XSchema".

-- 
John Cowan	http://www.ccil.org/~cowan		cowan at ccil.org
	You tollerday donsk?  N.  You tolkatiff scowegian?  Nn.
	You spigotty anglease?  Nnn.  You phonio saxo?  Nnnn.
		Clear all so!  'Tis a Jute.... (Finnegans Wake 16.5)



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/
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe 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