A Proposal for Refactoring SAX

Miles Sabin msabin at cromwellmedia.co.uk
Tue May 25 20:27:25 BST 1999


Andy Clark wrote,
<snip/>

I think we need a bit more detail, because, on the
face of it your proposal *completely* breaks both
forwards and backwards compatibility with SAX1.

I *presume* that in addition to your proposal you have
in mind that a SAX2 parser could also be a SAX1 parser
(at least until SAX1 is retired) which would allow SAX1
clients to interoperate with SAX2 parsers. And I
*presume* that you envisage an adapter that would allow
a SAX1 parser to be presented as a SAX2 parser, allowing
SAX2 clients to interoperate with older parsers.

If those two assumptions are right, then your proposal
looks fairly plausible, with the proviso that updating
clients and parsers for SAX2 will involve (admittedly 
trivial) recoding which could slow migration. I'm not 
convinced that this is a better bet than simply adding 
new methods to the old interfaces ... but I have to 
admit that that approach has its own problems as my own 
contributions to the various related threads testify.

I think that the biggest problems are likely to be 
namespace and naming issues. In your breakdown of the 
post-refactoring situation you've put the core classes 
and interfaces under org.xml. Then in your discussion 
you write,

> A simple solution for not breaking SAX 1.0 
> compatibility would be to move the new org.xml.sax 
> interfaces and classes into a package named 
> org.xml.sax2.

Again, I'm assuming that org.xml is being taken as
being preferable to org.xml.sax[2].

Unfortunately, neither of these options are particularly
nice. org.xml is problematic, because it limits the 
scope for other, future, functionally unrelated APIs, to 
be released in the org.xml namespace. org.xml.sax2 is 
just plain nasty, and quite likely to be error prone 
(I'm sure *I*'d forget the '2' quite frequently ;-)

Given that you're suggesting, what is, in effect, a
completely new API, why don't we go for a namespace
that looks something like this,

  org
    xml
      parser
        EntityResolver
        ErrorHandler
        InputSource
        Locator
        Parser
        ParserException (was XMLException) 
        ParseException  (was XMLParseException)

        helpers
          LocatorImpl
          ParserFactory

        stream
          AttributeList
          DocumentHandler
          DTDHandler
          HandlerBase
          StreamParser (was SAXParser)
        
          helpers
            AttributeListImpl
            StreamParserFactory (was SAXParserFactory)

        dom
          DOMParser

          helpers
            DOMParserFactory

      sax
        // SAX1 stuff here

        helpers
          // SAX1 stuff here

There's no more effort involved in switching over to
this namespace structure that the one you've proposed,
and it has the advantage that the names are a little
more meaningful ... which'd be useful for novices.

Cheers,


Miles

-- 
Miles Sabin                          Cromwell Media
Internet Systems Architect           5/6 Glenthorne Mews
+44 (0)181 410 2230                  London, W6 0LJ
msabin at cromwellmedia.co.uk           England

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