/*
* @(#)$Id: TypedContentHandler.java,v 1.3 2001/07/30 21:01:21 Bear Exp $
*
* Copyright 2001 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the proprietary information of Sun Microsystems, Inc.
* Use is subject to license terms.
*
*/
package com.sun.msv.verifier.psvi;
import com.sun.msv.grammar.AttributeExp;
import com.sun.msv.grammar.ElementExp;
import org.relaxng.datatype.Datatype;
import org.relaxng.datatype.ValidationContext;
import org.xml.sax.SAXException;
/**
* Receives notification of the typed content of the document.
*
* <p>
* This interface can be considered as the SAX ContentHandler plus type-information.
* It is intended to help applications to interpret the incoming document.
*
* <p>
* Consider a following RELAX NG pattern and instance:
*
* <PRE><XMP>
* <element name="root">
* <optional>
* <attribute name="foo">
* <choice>
* <data type="boolean"/>
* <data type="date"/>
* </choice>
* </attribute>
* </optional>
* <element name="child">
* <list><zeroOrMore>
* <data type="NMTOKEN"/>
* </zeroOrMore></list>
* </element>
* </element>
*
* <root foo="true">
* <child> A B </child>
* </root>
* </XMP></PRE>
*
* Events are reported in the following order:
* <pre>
* startDocument()
* startElement(root)
* startAttribute(foo)
* characterChunk("true", com.sun.msv.datatype.xsd.BooleanType)
* endAttribute(foo)
* endAttributePart()
* startElement(child)
* characterChunk("A", com.sun.msv.datatype.xsd.NMTOKENType)
* characterChunk("B", com.sun.msv.datatype.xsd.NMTOKENType)
* endElement(child, MSV's internal object that represents the child element)
* endElement(root, MSV's internal object that represents the root element)
* endDocument()
* </pre>
*
* @see
* TypeDetector
*
* @author <a href="mailto:kohsuke.kawaguchi@sun.com">Kohsuke KAWAGUCHI</a>
*/
public interface TypedContentHandler {
/**
* receives notification of the start of a document.
*
* @param context
* This ValidationContext object is effective through the entire document.
*/
void startDocument( ValidationContext context ) throws SAXException;
/**
* receives notification of the end of a document.
*/
void endDocument() throws SAXException;
/**
* receives notification of a string.
*
* @param literal
* the contents.
* @param type
* assigned type. The validator assigns this type for this literal.
*/
void characterChunk( String literal, Datatype type ) throws SAXException;
/**
* receives notification of the start of an element.
*
* If this element has attributes, the start/endAttribute methods are
* called after this method.
*/
void startElement( String namespaceURI, String localName, String qName ) throws SAXException;
/**
* receives notification of the end of an element.
*
* @param type
* the type of this element.
*/
void endElement( String namespaceURI, String localName, String qName, ElementExp type ) throws SAXException;
/**
* receives notification of the start of an attribute.
*
* the value of the attribute is reported through the characterChunk method.
*/
void startAttribute( String namespaceURI, String localName, String qName ) throws SAXException;
/**
* receives notification of the end of an attribute.
*
* @param type
* assigned type.
*/
void endAttribute( String namespaceURI, String localName, String qName, AttributeExp type ) throws SAXException;
/**
* this method is called after the start/endAttribute method are called
* for all attributes.
*/
void endAttributePart() throws SAXException;
}