package com.thaiopensource.validate; import org.xml.sax.ContentHandler; import org.xml.sax.DTDHandler; /** * Validates an XML document with respect to a schema. The schema is * determined when the <code>Validator</code> is created and cannot be * changed. The XML document is provided to the <code>Validator</code> * by calling methods of the <code>ContentHandler</code> object returned * by <code>getContentHandler</code>; the methods must be called in * the sequence specified by the <code>ContentHandler</code> * interface. If the <code>getDTDHandler</code> method returns * a non-null object, then method calls must be made on it * reporting DTD information. * * <p>Any errors will be reported to the <code>ErrorHandler</code> * specified when the <code>Validator</code> was created. If, after the * call to the <code>endDocument</code> method, no errors have been * reported, then the XML document is valid. * * <p>A single <code>Validator</code> object is <em>not</em> safe for * concurrent access from multiple threads. A single * <code>ValidatorHandler</code> can be used to validate only a single * document at a time. * * <p>After completing validation of an XML document (i.e. after calling * the <code>endDocument</code> on the <code>ContentHandler</code>), * <code>reset</code> can be called to allow validation of another * document. The <code>reset</code> method may create new <code>ContentHandler</code> * and <code>DTDHandler</code> objects or may simply reinitialize the * state of the existing objects. Therefore, <code>getContentHandler</code> * and <code>getDTDHandler</code> must be called after <code>reset</code> * to retrieve the objects to which the XML document to be validated * must be provided. * * @author <a href="mailto:jjc@jclark.com">James Clark</a> */ public interface Validator { /** * Returns the ContentHandler that will receive the XML document. * Information about the XML document to be validated must be * reported by calling methods on the returned ContentHandler. * When validation of an XML document has been completed (either * endDocument() has been called or validation has been abandoned * prematurely), reset() must be called. If no calls are made * on the ContentHandler, then reset() need not be called. * Implementations should allocate resources that require * cleanup (e.g. threads, open files) lazily, typically * in startDocument(). * * This method does not change the state of the Validator: the same * object will always be returned unless <code>reset</code> is called. * * @see #reset() * @return a ContentHandler, never <code>null</code> */ ContentHandler getContentHandler(); /** * Returns a DTDHandler. Information about the DTD must be reported * by calling methods on the returned object, unless <code>null</code> * is returned. The same object will always be returned unless * <code>reset</code> is called: this method does not change the state * of the Validator. * * @return a DTDHandler, maybe <code>null</code> if DTD information is * not significant to the <code>Validator</code> */ DTDHandler getDTDHandler(); /** * Cleans up after validating a document. After completing validation * of a document, <code>reset</code> must be called. After calling * reset(), another document may be validated. Calling this method * may create new ContentHandler and DTDHandler objects or may simply * reinitialize the state of the existing objects. */ void reset(); }