[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: SAX2: org.xml.sax.helpers.SAXUtils
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@c... http://www.cromwellmedia.com/ xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev@i... 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.
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|