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