\section{\module{xml.sax.handler} ---
         Base classes for SAX handlers}

\declaremodule{standard}{xml.sax.handler}
\modulesynopsis{Base classes for SAX event handlers.}
\sectionauthor{Martin v. L\"owis}{martin@v.loewis.de}
\moduleauthor{Lars Marius Garshol}{larsga@garshol.priv.no}

\versionadded{2.0}


The SAX API defines four kinds of handlers: content handlers, DTD
handlers, error handlers, and entity resolvers. Applications normally
only need to implement those interfaces whose events they are
interested in; they can implement the interfaces in a single object or
in multiple objects. Handler implementations should inherit from the
base classes provided in the module \module{xml.sax}, so that all
methods get default implementations.

\begin{classdesc*}{ContentHandler}
  This is the main callback interface in SAX, and the one most
  important to applications. The order of events in this interface
  mirrors the order of the information in the document.
\end{classdesc*}

\begin{classdesc*}{DTDHandler}
  Handle DTD events.

  This interface specifies only those DTD events required for basic
  parsing (unparsed entities and attributes).
\end{classdesc*}

\begin{classdesc*}{EntityResolver}
 Basic interface for resolving entities. If you create an object
 implementing this interface, then register the object with your
 Parser, the parser will call the method in your object to resolve all
 external entities.
\end{classdesc*}

\begin{classdesc*}{ErrorHandler}
  Interface used by the parser to present error and warning messages
  to the application.  The methods of this object control whether errors
  are immediately converted to exceptions or are handled in some other
  way.
\end{classdesc*}

In addition to these classes, \module{xml.sax.handler} provides
symbolic constants for the feature and property names.

\begin{datadesc}{feature_namespaces}
  Value: \code{"http://xml.org/sax/features/namespaces"}\\
  true: Perform Namespace processing.\\
  false: Optionally do not perform Namespace processing
         (implies namespace-prefixes; default).\\
  access: (parsing) read-only; (not parsing) read/write
\end{datadesc}

\begin{datadesc}{feature_namespace_prefixes}
  Value: \code{"http://xml.org/sax/features/namespace-prefixes"}\\
  true: Report the original prefixed names and attributes used for Namespace
        declarations.\\
  false: Do not report attributes used for Namespace declarations, and
         optionally do not report original prefixed names (default).\\
  access: (parsing) read-only; (not parsing) read/write  
\end{datadesc}

\begin{datadesc}{feature_string_interning}
  Value: \code{"http://xml.org/sax/features/string-interning"}
  true: All element names, prefixes, attribute names, Namespace URIs, and
        local names are interned using the built-in intern function.\\
  false: Names are not necessarily interned, although they may be (default).\\
  access: (parsing) read-only; (not parsing) read/write
\end{datadesc}

\begin{datadesc}{feature_validation}
  Value: \code{"http://xml.org/sax/features/validation"}\\
  true: Report all validation errors (implies external-general-entities and
        external-parameter-entities).\\
  false: Do not report validation errors.\\
  access: (parsing) read-only; (not parsing) read/write
\end{datadesc}

\begin{datadesc}{feature_external_ges}
  Value: \code{"http://xml.org/sax/features/external-general-entities"}\\
  true: Include all external general (text) entities.\\
  false: Do not include external general entities.\\
  access: (parsing) read-only; (not parsing) read/write
\end{datadesc}

\begin{datadesc}{feature_external_pes}
  Value: \code{"http://xml.org/sax/features/external-parameter-entities"}\\
  true: Include all external parameter entities, including the external
        DTD subset.\\
  false: Do not include any external parameter entities, even the external
         DTD subset.\\
  access: (parsing) read-only; (not parsing) read/write
\end{datadesc}

\begin{datadesc}{all_features}
  List of all features.
\end{datadesc}

\begin{datadesc}{property_lexical_handler}
  Value: \code{"http://xml.org/sax/properties/lexical-handler"}\\
  data type: xml.sax.sax2lib.LexicalHandler (not supported in Python 2)\\
  description: An optional extension handler for lexical events like comments.\\
  access: read/write
\end{datadesc}

\begin{datadesc}{property_declaration_handler}
  Value: \code{"http://xml.org/sax/properties/declaration-handler"}\\
  data type: xml.sax.sax2lib.DeclHandler (not supported in Python 2)\\
  description: An optional extension handler for DTD-related events other
               than notations and unparsed entities.\\
  access: read/write
\end{datadesc}

\begin{datadesc}{property_dom_node}
  Value: \code{"http://xml.org/sax/properties/dom-node"}\\
  data type: org.w3c.dom.Node (not supported in Python 2) \\
  description: When parsing, the current DOM node being visited if this is
               a DOM iterator; when not parsing, the root DOM node for
               iteration.\\
  access: (parsing) read-only; (not parsing) read/write  
\end{datadesc}

\begin{datadesc}{property_xml_string}
  Value: \code{"http://xml.org/sax/properties/xml-string"}\\
  data type: String\\
  description: The literal string of characters that was the source for
               the current event.\\
  access: read-only
\end{datadesc}

\begin{datadesc}{all_properties}
  List of all known property names.
\end{datadesc}


\subsection{ContentHandler Objects \label{content-handler-objects}}

Users are expected to subclass \class{ContentHandler} to support their
application.  The following methods are called by the parser on the
appropriate events in the input document:

\begin{methoddesc}[ContentHandler]{setDocumentLocator}{locator}
  Called by the parser to give the application a locator for locating
  the origin of document events.
  
  SAX parsers are strongly encouraged (though not absolutely required)
  to supply a locator: if it does so, it must supply the locator to
  the application by invoking this method before invoking any of the
  other methods in the DocumentHandler interface.
  
  The locator allows the application to determine the end position of
  any document-related event, even if the parser is not reporting an
  error. Typically, the application will use this information for
  reporting its own errors (such as character content that does not
  match an application's business rules). The information returned by
  the locator is probably not sufficient for use with a search engine.
  
  Note that the locator will return correct information only during
  the invocation of the events in this interface. The application
  should not attempt to use it at any other time.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{startDocument}{}
  Receive notification of the beginning of a document.
        
  The SAX parser will invoke this method only once, before any other
  methods in this interface or in DTDHandler (except for
  \method{setDocumentLocator()}).
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{endDocument}{}
  Receive notification of the end of a document.
        
  The SAX parser will invoke this method only once, and it will be the
  last method invoked during the parse. The parser shall not invoke
  this method until it has either abandoned parsing (because of an
  unrecoverable error) or reached the end of input.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{startPrefixMapping}{prefix, uri}
  Begin the scope of a prefix-URI Namespace mapping.
        
  The information from this event is not necessary for normal
  Namespace processing: the SAX XML reader will automatically replace
  prefixes for element and attribute names when the
  \code{feature_namespaces} feature is enabled (the default).

%% XXX This is not really the default, is it? MvL
  
  There are cases, however, when applications need to use prefixes in
  character data or in attribute values, where they cannot safely be
  expanded automatically; the \method{startPrefixMapping()} and
  \method{endPrefixMapping()} events supply the information to the
  application to expand prefixes in those contexts itself, if
  necessary.
  
  Note that \method{startPrefixMapping()} and
  \method{endPrefixMapping()} events are not guaranteed to be properly
  nested relative to each-other: all \method{startPrefixMapping()}
  events will occur before the corresponding \method{startElement()}
  event, and all \method{endPrefixMapping()} events will occur after
  the corresponding \method{endElement()} event, but their order is
  not guaranteed.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{endPrefixMapping}{prefix}
  End the scope of a prefix-URI mapping.

  See \method{startPrefixMapping()} for details. This event will
  always occur after the corresponding \method{endElement()} event,
  but the order of \method{endPrefixMapping()} events is not otherwise
  guaranteed.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{startElement}{name, attrs}
  Signals the start of an element in non-namespace mode.

  The \var{name} parameter contains the raw XML 1.0 name of the
  element type as a string and the \var{attrs} parameter holds an
  object of the \ulink{\class{Attributes}
  interface}{attributes-objects.html} containing the attributes of the
  element.  The object passed as \var{attrs} may be re-used by the
  parser; holding on to a reference to it is not a reliable way to
  keep a copy of the attributes.  To keep a copy of the attributes,
  use the \method{copy()} method of the \var{attrs} object.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{endElement}{name}
  Signals the end of an element in non-namespace mode.

  The \var{name} parameter contains the name of the element type, just
  as with the \method{startElement()} event.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{startElementNS}{name, qname, attrs}
  Signals the start of an element in namespace mode.

  The \var{name} parameter contains the name of the element type as a
  \code{(\var{uri}, \var{localname})} tuple, the \var{qname} parameter
  contains the raw XML 1.0 name used in the source document, and the
  \var{attrs} parameter holds an instance of the
  \ulink{\class{AttributesNS} interface}{attributes-ns-objects.html}
  containing the attributes of the element.  If no namespace is
  associated with the element, the \var{uri} component of \var{name}
  will be \code{None}.  The object passed as \var{attrs} may be
  re-used by the parser; holding on to a reference to it is not a
  reliable way to keep a copy of the attributes.  To keep a copy of
  the attributes, use the \method{copy()} method of the \var{attrs}
  object.

  Parsers may set the \var{qname} parameter to \code{None}, unless the
  \code{feature_namespace_prefixes} feature is activated.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{endElementNS}{name, qname}
  Signals the end of an element in namespace mode.

  The \var{name} parameter contains the name of the element type, just
  as with the \method{startElementNS()} method, likewise the
  \var{qname} parameter.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{characters}{content}
  Receive notification of character data.
        
  The Parser will call this method to report each chunk of character
  data. SAX parsers may return all contiguous character data in a
  single chunk, or they may split it into several chunks; however, all
  of the characters in any single event must come from the same
  external entity so that the Locator provides useful information.

  \var{content} may be a Unicode string or a byte string; the
  \code{expat} reader module produces always Unicode strings.

  \note{The earlier SAX 1 interface provided by the Python
  XML Special Interest Group used a more Java-like interface for this
  method.  Since most parsers used from Python did not take advantage
  of the older interface, the simpler signature was chosen to replace
  it.  To convert old code to the new interface, use \var{content}
  instead of slicing content with the old \var{offset} and
  \var{length} parameters.}
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{ignorableWhitespace}{whitespace}
  Receive notification of ignorable whitespace in element content.
        
  Validating Parsers must use this method to report each chunk
  of ignorable whitespace (see the W3C XML 1.0 recommendation,
  section 2.10): non-validating parsers may also use this method
  if they are capable of parsing and using content models.
  
  SAX parsers may return all contiguous whitespace in a single
  chunk, or they may split it into several chunks; however, all
  of the characters in any single event must come from the same
  external entity, so that the Locator provides useful
  information.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{processingInstruction}{target, data}
  Receive notification of a processing instruction.
        
  The Parser will invoke this method once for each processing
  instruction found: note that processing instructions may occur
  before or after the main document element.

  A SAX parser should never report an XML declaration (XML 1.0,
  section 2.8) or a text declaration (XML 1.0, section 4.3.1) using
  this method.
\end{methoddesc}

\begin{methoddesc}[ContentHandler]{skippedEntity}{name}
  Receive notification of a skipped entity.
        
  The Parser will invoke this method once for each entity
  skipped. Non-validating processors may skip entities if they have
  not seen the declarations (because, for example, the entity was
  declared in an external DTD subset). All processors may skip
  external entities, depending on the values of the
  \code{feature_external_ges} and the
  \code{feature_external_pes} properties.
\end{methoddesc}


\subsection{DTDHandler Objects \label{dtd-handler-objects}}

\class{DTDHandler} instances provide the following methods:

\begin{methoddesc}[DTDHandler]{notationDecl}{name, publicId, systemId}
  Handle a notation declaration event.
\end{methoddesc}

\begin{methoddesc}[DTDHandler]{unparsedEntityDecl}{name, publicId,
                                                   systemId, ndata}
  Handle an unparsed entity declaration event.
\end{methoddesc}


\subsection{EntityResolver Objects \label{entity-resolver-objects}}

\begin{methoddesc}[EntityResolver]{resolveEntity}{publicId, systemId}
  Resolve the system identifier of an entity and return either the
  system identifier to read from as a string, or an InputSource to
  read from. The default implementation returns \var{systemId}.
\end{methoddesc}


\subsection{ErrorHandler Objects \label{sax-error-handler}}

Objects with this interface are used to receive error and warning
information from the \class{XMLReader}.  If you create an object that
implements this interface, then register the object with your
\class{XMLReader}, the parser will call the methods in your object to
report all warnings and errors. There are three levels of errors
available: warnings, (possibly) recoverable errors, and unrecoverable
errors.  All methods take a \exception{SAXParseException} as the only
parameter.  Errors and warnings may be converted to an exception by
raising the passed-in exception object.

\begin{methoddesc}[ErrorHandler]{error}{exception}
  Called when the parser encounters a recoverable error.  If this method
  does not raise an exception, parsing may continue, but further document
  information should not be expected by the application.  Allowing the
  parser to continue may allow additional errors to be discovered in the
  input document.
\end{methoddesc}

\begin{methoddesc}[ErrorHandler]{fatalError}{exception}
  Called when the parser encounters an error it cannot recover from;
  parsing is expected to terminate when this method returns.
\end{methoddesc}

\begin{methoddesc}[ErrorHandler]{warning}{exception}
  Called when the parser presents minor warning information to the
  application.  Parsing is expected to continue when this method returns,
  and document information will continue to be passed to the application.
  Raising an exception in this method will cause parsing to end.
\end{methoddesc}
