Re: SAX: towards a solution

James Clark (jjc@jclark.com)
Sun, 04 Jan 1998 07:22:25 +0700


David Megginson wrote:

> Before we start, I am assuming that we will all accept the following
> three events without further discussion, since no one objected last
> time:
>
> startElement (String name, java.util.Dictionary attributes)

I don't think using java.util.Dictionary is a good idea:

1. JDK 1.2 provides a new Map interface which replaces Dictionary.

2. java.util.Dictionary is an abstract base class not an interface.

3. java.util.dictionary is weakly typed: it doesn't enforce the
requirement that keys be strings, and it requires values to be cast to
strings.

I think it would be much better to have an Attributes interface and also
a convenience adapter class that provides a Dictionary implementation in
terms of that interface.

> endElement (String name)

No problem with that.

> charData (char ch[], int length)

I think there should be an offset argument as well. Most of the Java
String operations that operate on a subarray take 3 arguments: char
array, offset and count.

If you don't have the offset argument you will be requiring some
implementations to do additional copying which has a significant
performance cost.

> I am also assuming that we will provide not only a callback interface,
> but also an (optional) base class with stub methods that implementors
> can override as needed; that means that novice users will not have to
> implement all of SAX, even if we do end up with nine or ten methods.

I agree we should provide these. JDK 1.1 does this extensively in AWT:
it calls the base classes Adapters. I think we should follow this
terminology.

James