SAX2: org.xml.sax.helpers.SAXUtils

Miles Sabin msabin at cromwellmedia.co.uk
Tue Jan 18 18:06:13 GMT 2000


Jim Layer wrote,
> A public, standard mechanism (widely supported as is SAX) to 
> acquire a parser by feature, would appear to at least 
> mitigate, if not eliminate, this bit of inelegance.

<grin/>

Agreed. Over the weekend I put together a trial implementation 
of the proposal I made at,

 
http://www.lists.ic.ac.uk/hypermail-archive/xml-dev/xml-dev-Jan-2000/0399.ht
ml

with support for query by feature.

Roughly speaking it looks like,

  public interface XMLReaderImplementation
  {
    // Does this implementation support
    // the given feature in the given enabled/disabled state
    public boolean supportsFeature
      (String name, boolean state);

    // Create an instance of this implementation
    public XMLReader createReader();
  }

  public class XMLReaderImplementations
  {
    // Create a default reader
    XMLReader createReader();

    // Create a reader which supports the given
    // features in the enabled state
    XMLReader createReader(String[] featuresWanted);

    // Create a reader which supports the given
    // features in the enabled/disabled state 
    XMLReader createReader
      (String[] featuresWanted, String[] featuresNotWanted);

    // Get the default implementation
    XMLReaderImplementation getImplementation();

    // Get an implementation which supports the
    // given features in the enabled state
    XMLReaderImplementation getImplementation
      (String[] featuresWanted);

    // Get an implementation which supports
    // given features in the enabled/disabled state
    XMLReaderImplementation getImplementation
      (String[] featuresWanted, String[] featuresNotWanted)

    // Return an Enumeration of all the
    // XMLReaderImplementations on the CLASSPATH
    Enumeration implementations();
  }

So, if you want an XMLReader that supports validation you
can do,

  XMLReader r = XMLReaderImplementations.
    createReader("whatever the validation feature string is");

If you need to do more complex querying of the capabilities
of the installed parsers you can do,

  Enumeration impls =
    XMLReaderImplementations.implementations();

  while(impls.hasMoreElements())
  {
    XMLReaderImplementation impl =
      (XMLReaderImplementation)impls.nextElement();

    if( ... impl ...) // some complex condition
      impl.createReader();

    // etc.
  }

The XMLReaderImplementation interface is needed because
otherwise we'd have to instantiate a reader _before_ being
able to test it's features ... to decide if we want to
instantiate it. And if you want to create more than one
instance of a particular type of parser you can hang onto the
XMLReaderImplementation and reuse it, rather then repeating
the query.

As described in my proposal, it's completely plug-n-play: no
more mucking about with -Dorg.xml.sax.parser=, just put the
parser on the CLASSPATH and it's available.

David has a copy ... anyone else interested should mail me.

Nb. it's _only_ an implementation of the factory/query stuff ...
the rest of SAX2 is skeletons only.

Cheers,


Miles

-- 
Miles Sabin                       Cromwell Media
Internet Systems Architect        5/6 Glenthorne Mews
+44 (0)20 8817 4030               London, W6 0LJ, England
msabin at cromwellmedia.com          http://www.cromwellmedia.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/ or CD-ROM/ISBN 981-02-3594-1
Please note: New list subscriptions now closed in preparation for transfer to OASIS.





More information about the Xml-dev mailing list