001 package org.relaxng.datatype;
002
003 /**
004 * Datatype streaming validator.
005 *
006 * <p>
007 * The streaming validator is an optional feature that is useful for
008 * certain Datatypes. It allows the caller to incrementally provide
009 * the literal.
010 *
011 * @author <a href="mailto:jjc@jclark.com">James Clark</a>
012 * @author <a href="mailto:kohsuke.kawaguchi@sun.com">Kohsuke KAWAGUCHI</a>
013 */
014 public interface DatatypeStreamingValidator {
015
016 /**
017 * Passes an additional fragment of the literal.
018 *
019 * <p>
020 * The application can call this method several times, then call
021 * the isValid method (or the checkValid method) to check the validity
022 * of the accumulated characters.
023 */
024 void addCharacters( char[] buf, int start, int len );
025
026 /**
027 * Tells if the accumulated literal is valid with respect to
028 * the underlying Datatype.
029 *
030 * @return
031 * True if it is valid. False if otherwise.
032 */
033 boolean isValid();
034
035 /**
036 * Similar to the isValid method, but this method throws
037 * Exception (with possibly diagnostic information), instead of
038 * returning false.
039 *
040 * @exception DatatypeException
041 * If the callee supports the diagnosis and the accumulated
042 * literal is invalid, then this exception that possibly
043 * contains diagnosis information is thrown.
044 */
045 void checkValid() throws DatatypeException;
046 }