SAX2XMLReaderImpl.hpp
上传用户:huihehuasu
上传日期:2007-01-10
资源大小:6948k
文件大小:57k
源码类别:

xml/soap/webservice

开发平台:

C/C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution,
  20.  *    if any, must include the following acknowledgment:
  21.  *       "This product includes software developed by the
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowledgment may appear in the software itself,
  24.  *    if and wherever such third-party acknowledgments normally appear.
  25.  *
  26.  * 4. The names "Xerces" and "Apache Software Foundation" must
  27.  *    not be used to endorse or promote products derived from this
  28.  *    software without prior written permission. For written
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache",
  32.  *    nor may "Apache" appear in their name, without prior written
  33.  *    permission of the Apache Software Foundation.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation, and was
  51.  * originally based on software copyright (c) 1999, International
  52.  * Business Machines, Inc., http://www.ibm.com .  For more information
  53.  * on the Apache Software Foundation, please see
  54.  * <http://www.apache.org/>.
  55.  */
  56. /*
  57.  * $Log: SAX2XMLReaderImpl.hpp,v $
  58.  * Revision 1.16  2001/11/20 18:51:44  tng
  59.  * Schema: schemaLocation and noNamespaceSchemaLocation to be specified outside the instance document.  New methods setExternalSchemaLocation and setExternalNoNamespaceSchemaLocation are added (for SAX2, two new properties are added).
  60.  *
  61.  * Revision 1.15  2001/11/14 14:15:42  tng
  62.  * Update SAX2 feature documentation.
  63.  *
  64.  * Revision 1.14  2001/09/12 13:03:43  tng
  65.  * [Bug 3155] SAX2 does not offer progressive parse.
  66.  *
  67.  * Revision 1.13  2001/08/01 19:11:02  tng
  68.  * Add full schema constraint checking flag to the samples and the parser.
  69.  *
  70.  * Revision 1.12  2001/06/27 17:39:52  knoaman
  71.  * Fix for bug #2353.
  72.  *
  73.  * Revision 1.11  2001/06/19 16:45:08  tng
  74.  * Add installAdvDocHandler to SAX2XMLReader as the code is there already.
  75.  *
  76.  * Revision 1.10  2001/06/04 21:01:49  jberry
  77.  * getErrorCount is virtual in this class reflecting derivation from SAX2XMLReader.
  78.  *
  79.  * Revision 1.9  2001/06/03 19:26:19  jberry
  80.  * Add support for querying error count following parse; enables simple parse without requiring error handler.
  81.  *
  82.  * Revision 1.8  2001/05/11 13:26:21  tng
  83.  * Copyright update.
  84.  *
  85.  * Revision 1.7  2001/03/30 16:46:57  tng
  86.  * Schema: Use setDoSchema instead of setSchemaValidation which makes more sense.
  87.  *
  88.  * Revision 1.6  2001/03/21 21:56:08  tng
  89.  * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar.
  90.  *
  91.  * Revision 1.5  2001/02/15 15:56:29  tng
  92.  * Schema: Add setSchemaValidation and getSchemaValidation for DOMParser and SAXParser.
  93.  * Add feature "http://apache.org/xml/features/validation/schema" for SAX2XMLReader.
  94.  * New data field  fSchemaValidation in XMLScanner as the flag.
  95.  *
  96.  * Revision 1.4  2000/12/22 15:16:53  tng
  97.  * SAX2-ext's LexicalHandler support added by David Bertoni.
  98.  *
  99.  * Revision 1.3  2000/08/09 22:16:13  jpolast
  100.  * many conformance & stability changes:
  101.  *   - ContentHandler::resetDocument() removed
  102.  *   - attrs param of ContentHandler::startDocument() made const
  103.  *   - SAXExceptions thrown now have msgs
  104.  *   - removed duplicate function signatures that had 'const'
  105.  *       [ eg: getContentHander() ]
  106.  *   - changed getFeature and getProperty to apply to const objs
  107.  *   - setProperty now takes a void* instead of const void*
  108.  *   - SAX2XMLReaderImpl does not inherit from SAXParser anymore
  109.  *   - Reuse Validator (http://apache.org/xml/features/reuse-validator) implemented
  110.  *   - Features & Properties now read-only during parse
  111.  *
  112.  * Revision 1.2  2000/08/02 20:46:32  aruna1
  113.  * sax2 changes
  114.  *
  115.  * Revision 1.1  2000/08/02 18:04:41  jpolast
  116.  * initial checkin of sax2 implemenation
  117.  * submitted by Simon Fell (simon@fell.com)
  118.  * and Joe Polastre (jpolast@apache.org)
  119.  *
  120.  *
  121.  */
  122. #if !defined(SAX2XMLReaderImpl_HPP)
  123. #define SAX2XMLReaderImpl_HPP
  124. #include <parsers/SAXParser.hpp>
  125. #include <sax/Parser.hpp>
  126. #include <framework/XMLBuffer.hpp>
  127. #include <internal/VecAttributesImpl.hpp>
  128. #include <sax2/SAX2XMLReader.hpp>
  129. #include <util/RefStackOf.hpp>
  130. #include <util/ValueStackOf.hpp>
  131. #include <framework/XMLBufferMgr.hpp>
  132. class ContentHandler;
  133. class LexicalHandler;
  134. /**
  135.   * This class implements the SAX2 'XMLReader' interface and should be
  136.   * used by applications wishing to parse the XML files using SAX2.
  137.   * It allows the client program to install SAX2 handlers for event
  138.   * callbacks.
  139.   *
  140.   * <p>It can be used to instantiate a validating or non-validating
  141.   * parser, by setting a member flag.</p>
  142.   *
  143.   * we basically re-use the existing SAX1 parser code, but provide a
  144.   * new implementation of XMLContentHandler that raises the new
  145.   * SAX2 style events
  146.   *
  147.   */
  148. class PARSERS_EXPORT SAX2XMLReaderImpl :
  149. public SAX2XMLReader
  150. //    , public Parser
  151.     , public XMLDocumentHandler
  152.     , public XMLErrorReporter
  153.     , public XMLEntityHandler
  154.     , public DocTypeHandler
  155. {
  156. public :
  157. static const XMLCh SAX_CORE_VALIDATION[];
  158. static const XMLCh SAX_CORE_NAMESPACES[];
  159. static const XMLCh SAX_CORE_NAMESPACE_PREFIXES[];
  160. static const XMLCh SAX_XERCES_DYNAMIC[];
  161. static const XMLCh SAX_XERCES_REUSEVALIDATOR[];
  162. static const XMLCh SAX_XERCES_REUSEGRAMMAR[];
  163. static const XMLCh SAX_XERCES_SCHEMA[];
  164. static const XMLCh SAX_XERCES_SCHEMA_FULL_CHECKING[];
  165. static const XMLCh SAX_XERCES_SCHEMA_EXTERNAL_SCHEMALOCATION[];
  166. static const XMLCh SAX_XERCES_SCHEMA_EXTERNAL_NONAMESPACESCHEMALOCATION[];
  167. SAX2XMLReaderImpl() ;
  168. ~SAX2XMLReaderImpl() ;
  169. // -----------------------------------------------------------------------
  170.     //  Implementation of the XMLDocumentHandler interface
  171.     // -----------------------------------------------------------------------
  172.     /** @name Implementation of the XMLDocumentHandler Interface. */
  173.     //@{
  174.     /**
  175.       * This method is used to report all the characters scanned
  176.       * by the parser. The driver will invoke the 'characters'
  177.       * method of the user installed SAX Document Handler.
  178.       *
  179.       * <p>If any advanced callback handlers are installed, the
  180.       * corresponding 'docCharacters' method will also be invoked.</p>
  181.       *
  182.       * @param chars   A const pointer to a Unicode string representing the
  183.       *                character data.
  184.       * @param length  The length of the Unicode string returned in 'chars'.
  185.       * @param cdataSection  A flag indicating if the characters represent
  186.       *                      content from the CDATA section.
  187.       * @see DocumentHandler#characters
  188.       */
  189.     virtual void docCharacters
  190.     (
  191.         const   XMLCh* const    chars
  192.         , const unsigned int    length
  193.         , const bool            cdataSection
  194.     );
  195.     /**
  196.       * This method is used to report any comments scanned by the parser.
  197.       * This method is a no-op unless, unless an advanced callback handler
  198.       * is installed, in which case the corresponding 'docComment' method
  199.       * is invoked.
  200.       *
  201.       * @param comment A const pointer to a null terminated Unicode
  202.       *                string representing the comment text.
  203.       */
  204.     virtual void docComment
  205.     (
  206.         const   XMLCh* const    comment
  207.     );
  208.     /**
  209.       * This method is used to report any PI scanned by the parser.
  210.       *
  211.       * <p>Any PI's occurring before any 'content' are not reported
  212.       * to any SAX handler as per the specification. However, all
  213.       * PI's within content are reported via the SAX Document Handler's
  214.       * 'processingInstruction' method.
  215.       *
  216.       * <p>If any advanced callback handlers are installed, the
  217.       * corresponding 'docPI' method will be invoked.</p>
  218.       *
  219.       * @param target A const pointer to a Unicode string representing the
  220.       *               target of the PI declaration.
  221.       * @param data   A const pointer to a Unicode string representing the
  222.       *               data of the PI declaration. See the PI production rule
  223.       *               in the XML specification for details.
  224.       *
  225.       * @see DocumentHandler#processingInstruction
  226.       */
  227.     virtual void docPI
  228.     (
  229.         const   XMLCh* const    target
  230.         , const XMLCh* const    data
  231.     );
  232.     /**
  233.       * This method is used to indicate the end of root element
  234.       * was just scanned by the parser. Corresponding 'endDocument'
  235.       * method of the user installed SAX Document Handler will also
  236.       * be invoked.
  237.       *
  238.       * <p>In addition, if any advanced callback handlers are installed,
  239.       * the corresponding 'endDocument' method is invoked.</p>
  240.       *
  241.       * @see DocumentHandler#endDocument
  242.       */
  243.     virtual void endDocument();
  244.     /**
  245.       * This method is used to indicate the end tag of an element.
  246.       * The driver will invoke the corresponding 'endElement' method of
  247.       * the SAX Document Handler interface.
  248.       *
  249.       * <p>If any advanced callback handlers are installed, the
  250.       * corresponding 'endElement' method is also invoked.</p>
  251.       *
  252.       * @param elemDecl A const reference to the object containing element
  253.       *                 declaration information.
  254.       * @param urlId    An id referring to the namespace prefix, if
  255.       *                 namespaces setting is switched on.
  256.       * @param isRoot   A flag indicating whether this element was the
  257.       *                 root element.
  258.       * @see DocumentHandler#endElement
  259.       */
  260.     virtual void endElement
  261.     (
  262.         const   XMLElementDecl& elemDecl
  263.         , const unsigned int    urlId
  264.         , const bool            isRoot
  265.     );
  266.     /**
  267.       * This method is used to indicate that an end of an entity reference
  268.       * was just scanned.
  269.       *
  270.       * <p>If any advanced callback handlers are installed, the
  271.       * corresponding 'endEnityReference' method is invoked.</p>
  272.       *
  273.       * @param entDecl A const reference to the object containing the
  274.       *                entity declaration information.
  275.       */
  276.     virtual void endEntityReference
  277.     (
  278.         const   XMLEntityDecl&  entDecl
  279.     );
  280.     /**
  281.       * This method is used to report all the whitespace characters,
  282.       * which are determined to be 'ignorable'. This distinction
  283.       * between characters is only made, if validation is enabled.
  284.       * Corresponding 'ignorableWhitespace' method of the user installed
  285.       * SAX Document Handler interface is called.
  286.       *
  287.       * <p>Any whitespace before content is not reported to the SAX
  288.       * Document Handler method, as per the SAX specification.
  289.       * However, if any advanced callback handlers are installed, the
  290.       * corresponding 'ignorableWhitespace' method is invoked.</p>
  291.       *
  292.       * @param chars   A const pointer to a Unicode string representing the
  293.       *                ignorable whitespace character data.
  294.       * @param length  The length of the Unicode string 'chars'.
  295.       * @param cdataSection  A flag indicating if the characters represent
  296.       *                      content from the CDATA section.
  297.       * @see DocumentHandler#ignorableWhitespace
  298.       */
  299.     virtual void ignorableWhitespace
  300.     (
  301.         const   XMLCh* const    chars
  302.         , const unsigned int    length
  303.         , const bool            cdataSection
  304.     );
  305.     /**
  306.       * This method allows the user installed Document Handler and
  307.       * any advanced callback handlers to 'reset' themselves.
  308.       */
  309.     virtual void resetDocument();
  310.     /**
  311.       * This method is used to report the start of the parsing process.
  312.       * The corresponding user installed SAX Document Handler's method
  313.       * 'startDocument' is invoked.
  314.       *
  315.       * <p>If any advanced callback handlers are installed, then the
  316.       * corresponding 'startDocument' method is also called.</p>
  317.       *
  318.       * @see DocumentHandler#startDocument
  319.       */
  320.     virtual void startDocument();
  321.     /**
  322.       * This method is used to report the start of an element. It is
  323.       * called at the end of the element, by which time all attributes
  324.       * specified are also parsed. The corresponding user installed
  325.       * SAX Document Handler's method 'startElement' is invoked.
  326.       *
  327.       * <p>If any advanced callback handlers are installed, then the
  328.       * corresponding 'startElement' method is also called.</p>
  329.       *
  330.       * @param elemDecl A const reference to the object containing element
  331.       *                 declaration information.
  332.       * @param urlId    An id referring to the namespace prefix, if
  333.       *                 namespaces setting is switched on.
  334.       * @param elemPrefix A const pointer to a Unicode string containing
  335.       *                   the namespace prefix for this element. Applicable
  336.       *                   only when namespace processing is enabled.
  337.       * @param attrList  A const reference to the object containing the
  338.       *                  list of attributes just scanned for this element.
  339.       * @param attrCount A count of number of attributes in the list
  340.       *                  specified by the parameter 'attrList'.
  341.       * @param isEmpty  A flag indicating whether this is an empty element
  342.       *                 or not.
  343.       * @param isRoot   A flag indicating whether this element was the
  344.       *                 root element.
  345.       * @see DocumentHandler#startElement
  346.       */
  347.     virtual void startElement
  348.     (
  349.         const   XMLElementDecl&         elemDecl
  350.         , const unsigned int            urlId
  351.         , const XMLCh* const            elemPrefix
  352.         , const RefVectorOf<XMLAttr>&   attrList
  353.         , const unsigned int            attrCount
  354.         , const bool                    isEmpty
  355.         , const bool                    isRoot
  356.     );
  357.     /**
  358.       * This method is used to indicate the start of an entity reference.
  359.       *
  360.       * <p>If any advanced callback handlers are installed, the
  361.       * corresponding 'endEnityReference' method is invoked.</p>
  362.       *
  363.       * @param entDecl A const reference to the object containing the
  364.       *                entity declaration information.
  365.       */
  366.     virtual void startEntityReference
  367.     (
  368.         const   XMLEntityDecl&  entDecl
  369.     );
  370.     /**
  371.       * This method is used to report the XML decl scanned by the parser.
  372.       * Refer to the XML specification to see the meaning of parameters.
  373.       *
  374.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  375.       * implementation.</font></b>
  376.       *
  377.       * @param versionStr A const pointer to a Unicode string representing
  378.       *                   version string value.
  379.       * @param encodingStr A const pointer to a Unicode string representing
  380.       *                    the encoding string value.
  381.       * @param standaloneStr A const pointer to a Unicode string
  382.       *                      representing the standalone string value.
  383.       * @param actualEncodingStr A const pointer to a Unicode string
  384.       *                          representing the actual encoding string
  385.       *                          value.
  386.       */
  387.     virtual void XMLDecl
  388.     (
  389.         const   XMLCh* const    versionStr
  390.         , const XMLCh* const    encodingStr
  391.         , const XMLCh* const    standaloneStr
  392.         , const XMLCh* const    actualEncodingStr
  393.     );
  394.     //@}
  395. // -----------------------------------------------------------------------
  396.     //  Implementation of the XMLReader interface
  397.     // -----------------------------------------------------------------------
  398.     /** @name Getter methods */
  399.     //@{
  400.     /** Get error count from the last parse operation.
  401.       *
  402.       * This method returns the error count from the last parse
  403.       * operation. Note that this count is actually stored in the
  404.       * scanner, so this method simply returns what the
  405.       * scanner reports.
  406.       *
  407.       * @return number of errors encountered during the latest
  408.       * parse operation.
  409.       */
  410.     virtual int getErrorCount() const;
  411.     /**
  412.       * This method returns the installed content handler.
  413.       *
  414.       * @return A pointer to the installed content handler object.
  415.       */
  416.     virtual ContentHandler* getContentHandler() const;
  417.     /**
  418.       * This method returns the installed DTD handler.
  419.       *
  420.       * @return A pointer to the installed DTD handler object.
  421.       */
  422.     virtual DTDHandler* getDTDHandler() const ;
  423.     /**
  424.       * This method returns the installed entity resolver.
  425.       *
  426.       * @return A pointer to the installed entity resolver object.
  427.       */
  428.     virtual EntityResolver* getEntityResolver() const  ;
  429.     /**
  430.       * This method returns the installed error handler.
  431.       *
  432.       * @return A pointer to the installed error handler object.
  433.       */
  434.     virtual ErrorHandler* getErrorHandler() const ;
  435.     /**
  436.       * This method returns the installed lexical handler.
  437.       *
  438.       * @return A pointer to the installed lexical handler object.
  439.       */
  440.     virtual LexicalHandler* getLexicalHandler() const ;
  441.     /**
  442.       * This method returns the state of the parser's
  443.       * exit-on-First-Fatal-Error flag.
  444.       *
  445.       * @return true, if the parser is currently configured to
  446.       *         exit on the first fatal error, false otherwise.
  447.       *
  448.       * @see #setExitOnFirstFatalError
  449.       */
  450.     virtual bool getExitOnFirstFatalError() const;
  451.     /**
  452.       * This method returns the state of the parser's
  453.       * validation-constraint-fatal flag.
  454.       *
  455.       * @return true, if the parser is currently configured to
  456.       *         set validation constraint errors as fatal, false
  457.       *         otherwise.
  458.       *
  459.       * @see #setValidationContraintFatal
  460.       */
  461.     virtual bool getValidationConstraintFatal() const;
  462.     /** @name Implementation of SAX 2.0 interface's. */
  463.     //@{
  464.     /**
  465.       * This method invokes the parsing process on the XML file specified
  466.       * by the InputSource parameter.
  467.       *
  468.       * @param source A const reference to the InputSource object which
  469.       *               points to the XML file to be parsed.
  470.       */
  471.     virtual void parse(const InputSource& source);
  472.     /**
  473.       * This method invokes the parsing process on the XML file specified by
  474.       * the Unicode string parameter 'systemId'.
  475.       *
  476.       * @param systemId A const XMLCh pointer to the Unicode string which
  477.       *                 contains the path to the XML file to be parsed.
  478.       */
  479.     virtual void parse(const XMLCh* const systemId);
  480.     /**
  481.       * This method invokes the parsing process on the XML file specified by
  482.       * the native char* string parameter 'systemId'.
  483.       *
  484.       * @param systemId A const char pointer to a native string which
  485.       *                 contains the path to the XML file to be parsed.
  486.       */
  487.     virtual void parse(const char* const systemId);
  488.     /**
  489.       * This method installs the user specified SAX Document Handler
  490.       * callback function on parser.
  491.       *
  492.       * @param handler A pointer to the document handler to be called
  493.       *                when the parser comes across 'document' events
  494.       *                as per the SAX specification.
  495.       */
  496.     virtual void setContentHandler(ContentHandler* const handler);
  497.   /**
  498.     * Allow an application to register a DTD event handler.
  499.     *
  500.     * If the application does not register a DTD handler, all DTD
  501.     * events reported by the SAX parser will be silently ignored (this
  502.     * is the default behaviour implemented by HandlerBase).
  503.     *
  504.     * Applications may register a new or different handler in the middle
  505.     * of a parse, and the SAX parser must begin using the new handler
  506.     * immediately.
  507.     *
  508.     * @param handler The DTD handler.
  509.     * @see DTDHandler#DTDHandler
  510.     * @see HandlerBase#HandlerBase
  511.     */
  512.     virtual void setDTDHandler(DTDHandler* const handler) ;
  513.   /**
  514.     * Allow an application to register a custom entity resolver.
  515.     *
  516.     * If the application does not register an entity resolver, the
  517.     * SAX parser will resolve system identifiers and open connections
  518.     * to entities itself (this is the default behaviour implemented in
  519.     * DefaultHandler).
  520.     *
  521.     * Applications may register a new or different entity resolver
  522.     * in the middle of a parse, and the SAX parser must begin using
  523.     * the new resolver immediately.
  524.     *
  525.     * @param resolver The object for resolving entities.
  526.     * @see EntityResolver#EntityResolver
  527.     * @see DefaultHandler#DefaultHandler
  528.     */
  529.     virtual void setEntityResolver(EntityResolver* const resolver) ;
  530.   /**
  531.     * Allow an application to register an error event handler.
  532.     *
  533.     * If the application does not register an error event handler,
  534.     * all error events reported by the SAX parser will be silently
  535.     * ignored, except for fatalError, which will throw a SAXException
  536.     * (this is the default behaviour implemented by HandlerBase).
  537.     *
  538.     * Applications may register a new or different handler in the
  539.     * middle of a parse, and the SAX parser must begin using the new
  540.     * handler immediately.
  541.     *
  542.     * @param handler The error handler.
  543.     * @see ErrorHandler#ErrorHandler
  544.     * @see SAXException#SAXException
  545.     * @see HandlerBase#HandlerBase
  546.     */
  547.     virtual void setErrorHandler(ErrorHandler* const handler) ;
  548. /**
  549.     * Allow an application to register a lexical event handler.
  550.     *
  551.     * If the application does not register a lexical handler,
  552.     * all events reported by the SAX parser will be silently
  553.     * ignored. (this is the default behaviour implemented by HandlerBase).
  554.     *
  555.     * Applications may register a new or different handler in the
  556.     * middle of a parse, and the SAX parser must begin using the new
  557.     * handler immediately.
  558.     *
  559.     * @param handler The error handler.
  560.     * @see LexicalHandler#LexicalHandler
  561.     * @see SAXException#SAXException
  562.     * @see HandlerBase#HandlerBase
  563.     */
  564.     virtual void setLexicalHandler(LexicalHandler* const handler) ;
  565.     /**
  566.       * This method allows users to set the parser's behaviour when it
  567.       * encounters the first fatal error. If set to true, the parser
  568.       * will exit at the first fatal error. If false, then it will
  569.       * report the error and continue processing.
  570.       *
  571.       * <p>The default value is 'true' and the parser exits on the
  572.       * first fatal error.</p>
  573.       *
  574.       * @param newState The value specifying whether the parser should
  575.       *                 continue or exit when it encounters the first
  576.       *                 fatal error.
  577.       *
  578.       * @see #getExitOnFirstFatalError
  579.       */
  580.     virtual void setExitOnFirstFatalError(const bool newState);
  581.     /**
  582.       * This method allows users to set the parser's behaviour when it
  583.       * encounters a validtion constraint error. If set to true, and the
  584.       * the parser is set to exit when it encounter the first fatal error,
  585.       * the parser will exit at the first encounter. If false, then it will
  586.       * report the error and continue processing.
  587.       *
  588.       * <p>The default value is 'false'.</p>
  589.       *
  590.       * @param newState The value specifying whether the parser should
  591.       *                 continue or exit when it encounters a validation
  592.       *                 constraint error.
  593.       *
  594.       * @see #getValidationConstraintFatal
  595.       */
  596.     virtual void setValidationConstraintFatal(const bool newState);
  597.   /**
  598.     * Set the state of any feature in a SAX2 XMLReader.
  599.     * Supported features in SAX2 for xerces-c are:
  600.     * <br>(See http://xml.apache.org/xerces-c/program.html#SAX2Features for detail description).
  601.     *
  602.     * <br>http://xml.org/sax/features/validation (default: true)
  603.     * <br>http://xml.org/sax/features/namespaces (default: true)
  604.     * <br>http://xml.org/sax/features/namespace-prefixes (default: true)
  605.     * <br>http://apache.org/xml/features/validation/dynamic (default: false)
  606.     * <br>http://apache.org/xml/features/validation/reuse-grammar (default: false)
  607.     * <br>http://apache.org/xml/features/validation/schema (default: true)
  608.     * <br>http://apache.org/xml/features/validation/schema-full-checking (default: false)
  609.     * <br>http://apache.org/xml/features/validation/reuse-validator (Deprecated) (default: false)
  610.     *
  611.     * @param name The unique identifier (URI) of the feature.
  612.     * @param value The requested state of the feature (true or false).
  613.     * @exception SAXNotRecognizedException If the requested feature is not known.
  614.     * @exception SAXNotSupportedException Feature modification is not supported during parse
  615.     *
  616.     */
  617. virtual void setFeature(const XMLCh* const name, const bool value);
  618. /**
  619.      * Query the current state of any feature in a SAX2 XMLReader.
  620.   *
  621.   * @param name The unique identifier (URI) of the feature being set.
  622.   * @return The current state of the feature.
  623.      * @exception SAXNotRecognizedException If the requested feature is not known.
  624.   */
  625. virtual bool getFeature(const XMLCh* const name) const;
  626.   /**
  627.     * Set the value of any property in a SAX2 XMLReader.
  628.     * Supported properties in SAX2 for xerces-c are:
  629.     * <br>(See http://xml.apache.org/xerces-c/program.html#SAX2Properties for detail description).
  630.     *
  631.     * <br>http://apache.org/xml/properties/schema/external-schemaLocation
  632.     * <br>http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation.
  633.     *
  634.     * It takes a void pointer as the property value.  Application is required to initialize this void
  635.     * pointer to a correct type.  See http://xml.apache.org/xerces-c/program.html#SAX2Properties
  636.     * to learn exactly what type of property value each property expects for processing.
  637.     * Passing a void pointer that was initialized with a wrong type will lead to unexpected result.
  638.     * If the same property is set more than once, the last one takes effect.
  639.     *
  640.     * @param name The unique identifier (URI) of the property being set.
  641.     * @param value The requested value for the property.  See
  642.     *            http://xml.apache.org/xerces-c/program.html#SAX2Properties to learn
  643.     *            exactly what type of property value each property expects for processing.
  644.     *            Passing a void pointer that was initialized with a wrong type will lead
  645.     *            to unexpected result.
  646.     * @exception SAXNotRecognizedException If the requested property is not known.
  647.     * @exception SAXNotSupportedException Property modification is not supported during parse
  648.     */
  649. virtual void setProperty(const XMLCh* const name, void* value);
  650. /**
  651.      * Query the current value of a property in a SAX2 XMLReader.
  652.      *
  653.      * The parser owns the returned pointer, and the memory allocated for
  654.      * the returned pointer will be destroyed when the parser is deleted.
  655.      *
  656.      * To ensure assessiblity of the returned information after the parser
  657.      * is deleted, callers need to copy and store the returned information
  658.      * somewhere else; other you may get unexpected result.  Since the returned
  659.      * pointer is a generic void pointer, see
  660.      * http://xml.apache.org/xerces-c/program.html#SAX2Properties to learn
  661.      * exactly what type of object each property returns for replication.
  662.      *
  663.      * @param name The unique identifier (URI) of the property being set.
  664.      * @return     The current value of the property.  The pointer spans the same
  665.      *             life-time as the parser.  A null pointer is returned if nothing
  666.      *             was specified externally.
  667.      * @exception  SAXNotRecognizedException If the requested property is not known.
  668.      */
  669. virtual void* getProperty(const XMLCh* const name) const;
  670. //@}
  671.     // -----------------------------------------------------------------------
  672.     //  Implementation of the XMLErrorReporter interface
  673.     // -----------------------------------------------------------------------
  674.     /** @name Implementation of the XMLErrorReporter Interface. */
  675.     //@{
  676.     /**
  677.       * This method is used to report back errors found while parsing the
  678.       * XML file. The driver will call the corresponding user installed
  679.       * SAX Error Handler methods: 'fatal', 'error', 'warning' depending
  680.       * on the severity of the error. This classification is defined by
  681.       * the XML specification.
  682.       *
  683.       * @param errCode An integer code for the error.
  684.       * @param msgDomain A const pointer to an Unicode string representing
  685.       *                  the message domain to use.
  686.       * @param errType An enumeration classifying the severity of the error.
  687.       * @param errorText A const pointer to an Unicode string representing
  688.       *                  the text of the error message.
  689.       * @param systemId  A const pointer to an Unicode string representing
  690.       *                  the system id of the XML file where this error
  691.       *                  was discovered.
  692.       * @param publicId  A const pointer to an Unicode string representing
  693.       *                  the public id of the XML file where this error
  694.       *                  was discovered.
  695.       * @param lineNum   The line number where the error occurred.
  696.       * @param colNum    The column number where the error occurred.
  697.       * @see ErrorHandler
  698.       */
  699.     virtual void error
  700.     (
  701.         const   unsigned int                errCode
  702.         , const XMLCh* const                msgDomain
  703.         , const XMLErrorReporter::ErrTypes  errType
  704.         , const XMLCh* const                errorText
  705.         , const XMLCh* const                systemId
  706.         , const XMLCh* const                publicId
  707.         , const unsigned int                lineNum
  708.         , const unsigned int                colNum
  709.     );
  710.     /**
  711.       * This method allows the user installed Error Handler
  712.       * callback to 'reset' itself.
  713.       *
  714.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  715.       * implementation.</font></b>
  716.       *
  717.       */
  718.     virtual void resetErrors();
  719.     //@}
  720.     // -----------------------------------------------------------------------
  721.     //  Implementation of the XMLEntityHandler interface
  722.     // -----------------------------------------------------------------------
  723.     /** @name Implementation of the XMLEntityHandler Interface. */
  724.     //@{
  725.     /**
  726.       * This method is used to indicate the end of parsing of an external
  727.       * entity file.
  728.       *
  729.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  730.       * implementation.</font></b>
  731.       *
  732.       * @param inputSource A const reference to the InputSource object
  733.       *                    which points to the XML file being parsed.
  734.       * @see InputSource
  735.       */
  736.     virtual void endInputSource(const InputSource& inputSource);
  737.     /**
  738.       * This method allows an installed XMLEntityHandler to further
  739.       * process any system id's of enternal entities encountered in
  740.       * the XML file being parsed, such as redirection etc.
  741.       *
  742.       * <b><font color="#FF0000">This method always returns 'false'
  743.       * for this SAX driver implementation.</font></b>
  744.       *
  745.       * @param systemId  A const pointer to an Unicode string representing
  746.       *                  the system id scanned by the parser.
  747.       * @param toFill    A pointer to a buffer in which the application
  748.       *                  processed system id is stored.
  749.       * @return 'true', if any processing is done, 'false' otherwise.
  750.       */
  751.     virtual bool expandSystemId
  752.     (
  753.         const   XMLCh* const    systemId
  754.         ,       XMLBuffer&      toFill
  755.     );
  756.     /**
  757.       * This method allows the installed XMLEntityHandler to reset
  758.       * itself.
  759.       *
  760.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  761.       * implementation.</font></b>
  762.       */
  763.     virtual void resetEntities();
  764.     /**
  765.       * This method allows a user installed entity handler to further
  766.       * process any pointers to external entities. The applications
  767.       * can implement 'redirection' via this callback. The driver
  768.       * should call the SAX EntityHandler 'resolveEntity' method.
  769.       *
  770.       * @param publicId A const pointer to a Unicode string representing the
  771.       *                 public id of the entity just parsed.
  772.       * @param systemId A const pointer to a Unicode string representing the
  773.       *                 system id of the entity just parsed.
  774.       * @return The value returned by the SAX resolveEntity method or
  775.       *         NULL otherwise to indicate no processing was done.
  776.       * @see EntityResolver
  777.       */
  778.     virtual InputSource* resolveEntity
  779.     (
  780.         const   XMLCh* const    publicId
  781.         , const XMLCh* const    systemId
  782.     );
  783.     /**
  784.       * This method is used to indicate the start of parsing an
  785.       * external entity file.
  786.       *
  787.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  788.       * implementation.</font></b>
  789.       *
  790.       * @param inputSource A const reference to the InputSource object
  791.       *                    which points to the external entity
  792.       *                    being parsed.
  793.       */
  794.     virtual void startInputSource(const InputSource& inputSource);
  795.     //@}
  796.     // -----------------------------------------------------------------------
  797.     //  Implementation of the DocTypeHandler Interface
  798.     // -----------------------------------------------------------------------
  799.     /** @name Implementation of the DocTypeHandler Interface */
  800.     //@{
  801.     /**
  802.       * This method is used to report an attribute definition.
  803.       *
  804.       * <b><font color="#FF0000">This method is a no-op for this SAX
  805.       * driver implementation.</font></b>
  806.       *
  807.       * @param elemDecl A const reference to the object containing information
  808.       *                 about the element whose attribute definition was just
  809.       *                 parsed.
  810.       * @param attDef   A const reference to the object containing information
  811.       *                 attribute definition.
  812.       * @param ignore   The flag indicating whether this attribute definition
  813.       *                 was ignored by the parser or not.
  814.       */
  815.     virtual void attDef
  816.     (
  817.         const   DTDElementDecl& elemDecl
  818.         , const DTDAttDef&      attDef
  819.         , const bool            ignoring
  820.     );
  821.     /**
  822.       * This method is used to report a comment occurring within the DTD.
  823.       *
  824.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  825.       * implementation.</font></b>
  826.       *
  827.       * @param comment  A const pointer to a Unicode string representing the
  828.       *                 text of the comment just parsed.
  829.       */
  830.     virtual void doctypeComment
  831.     (
  832.         const   XMLCh* const    comment
  833.     );
  834.     /**
  835.       * This method is used to report the DOCTYPE declaration.
  836.       *
  837.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  838.       * implementation.</font></b>
  839.       *
  840.       * @param elemDecl A const reference to the object containing information
  841.       *                 about the root element definition declaration of the
  842.       *                 XML document being parsed.
  843.       * @param publicId A const pointer to a Unicode string representing the
  844.       *                 public id of the DTD file.
  845.       * @param systemId A const pointer to a Unicode string representing the
  846.       *                 system id of the DTD file.
  847.       * @param hasIntSubset A flag indicating if this XML file contains any
  848.       *                     internal subset.
  849.       */
  850.     virtual void doctypeDecl
  851.     (
  852.         const   DTDElementDecl& elemDecl
  853.         , const XMLCh* const    publicId
  854.         , const XMLCh* const    systemId
  855.         , const bool            hasIntSubset
  856.     );
  857.     /**
  858.       * This method is used to report any PI declarations
  859.       * occurring inside the DTD definition block.
  860.       *
  861.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  862.       * implementation.</font></b>
  863.       *
  864.       * @param target A const pointer to a Unicode string representing the
  865.       *               target of the PI declaration.
  866.       * @param data   A const pointer to a Unicode string representing the
  867.       *               data of the PI declaration. See the PI production rule
  868.       *               in the XML specification for details.
  869.       */
  870.     virtual void doctypePI
  871.     (
  872.         const   XMLCh* const    target
  873.         , const XMLCh* const    data
  874.     );
  875.     /**
  876.       * This method is used to report any whitespaces
  877.       * occurring inside the DTD definition block.
  878.       *
  879.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  880.       * implementation.</font></b>
  881.       *
  882.       * @param chars  A const pointer to a Unicode string representing the
  883.       *               whitespace characters.
  884.       * @param length The length of the whitespace Unicode string.
  885.       */
  886.     virtual void doctypeWhitespace
  887.     (
  888.         const   XMLCh* const    chars
  889.         , const unsigned int    length
  890.     );
  891.     /**
  892.       * This method is used to report an element declarations
  893.       * successfully scanned by the parser.
  894.       *
  895.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  896.       * implementation.</font></b>
  897.       *
  898.       * @param decl   A const reference to the object containing element
  899.       *               declaration information.
  900.       * @param isIgnored The flag indicating whether this definition was
  901.       *                  ignored by the parser or not.
  902.       */
  903.     virtual void elementDecl
  904.     (
  905.         const   DTDElementDecl& decl
  906.         , const bool            isIgnored
  907.     );
  908.     /**
  909.       * This method is used to report the end of an attribute
  910.       * list declaration for an element.
  911.       *
  912.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  913.       * implementation.</font></b>
  914.       *
  915.       * @param elemDecl A const reference to the object containing element
  916.       *                 declaration information.
  917.       */
  918.     virtual void endAttList
  919.     (
  920.         const   DTDElementDecl& elemDecl
  921.     );
  922.     /**
  923.       * This method is used to report the end of the internal subset.
  924.       *
  925.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  926.       * implementation.</font></b>
  927.       */
  928.     virtual void endIntSubset();
  929.     /**
  930.       * This method is used to report the end of the external subset.
  931.       *
  932.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  933.       * implementation.</font></b>
  934.       */
  935.     virtual void endExtSubset();
  936.     /**
  937.       * This method is used to report any entity declarations.
  938.       * For unparsed entities, this driver will invoke the
  939.       * SAX DTDHandler::unparsedEntityDecl callback.
  940.       *
  941.       * @param entityDecl A const reference to the object containing
  942.       *                   the entity declaration information.
  943.       * @param isPEDecl  The flag indicating whether this was a
  944.       *                  parameter entity declaration or not.
  945.       * @param isIgnored The flag indicating whether this definition
  946.       *                  was ignored by the parser or not.
  947.       *
  948.       * @see DTDHandler#unparsedEntityDecl
  949.       */
  950.     virtual void entityDecl
  951.     (
  952.         const   DTDEntityDecl&  entityDecl
  953.         , const bool            isPEDecl
  954.         , const bool            isIgnored
  955.     );
  956.     /**
  957.       * This method allows the user installed DTD handler to
  958.       * reset itself.
  959.       */
  960.     virtual void resetDocType();
  961.     /**
  962.       * This method is used to report any notation declarations.
  963.       * If there is a user installed DTDHandler, then the driver will
  964.       * invoke the SAX DTDHandler::notationDecl callback.
  965.       *
  966.       * @param notDecl A const reference to the object containing the notation
  967.       *                declaration information.
  968.       * @param isIgnored The flag indicating whether this definition was ignored
  969.       *                  by the parser or not.
  970.       *
  971.       * @see DTDHandler#notationDecl
  972.       */
  973.     virtual void notationDecl
  974.     (
  975.         const   XMLNotationDecl&    notDecl
  976.         , const bool                isIgnored
  977.     );
  978.     /**
  979.       * This method is used to indicate the start of an element's attribute
  980.       * list declaration.
  981.       *
  982.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  983.       * implementation.</font></b>
  984.       *
  985.       * @param elemDecl A const reference to the object containing element
  986.       *                 declaration information.
  987.       */
  988.     virtual void startAttList
  989.     (
  990.         const   DTDElementDecl& elemDecl
  991.     );
  992.     /**
  993.       * This method is used indicate the start of the internal subset.
  994.       *
  995.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  996.       * implementation.</font></b>
  997.       */
  998.     virtual void startIntSubset();
  999.     /**
  1000.       * This method is used indicate the start of the external subset.
  1001.       *
  1002.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1003.       * implementation.</font></b>
  1004.       */
  1005.     virtual void startExtSubset();
  1006.     /**
  1007.       * This method is used to report the TextDecl. Refer to the XML
  1008.       * specification for the syntax of a TextDecl.
  1009.       *
  1010.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1011.       * implementation.</font></b>
  1012.       *
  1013.       * @param versionStr A const pointer to a Unicode string representing
  1014.       *                   the version number of the 'version' clause.
  1015.       * @param encodingStr A const pointer to a Unicode string representing
  1016.       *                    the encoding name of the 'encoding' clause.
  1017.       */
  1018.     virtual void TextDecl
  1019.     (
  1020.         const   XMLCh* const    versionStr
  1021.         , const XMLCh* const    encodingStr
  1022.     );
  1023.     //@}
  1024.     // -----------------------------------------------------------------------
  1025.     //  Validator: setters and getters
  1026.     // -----------------------------------------------------------------------
  1027.     /** @name Validator: setters and getters (Xerces-C specific) */
  1028.     //@{
  1029.     /**
  1030.   * This method is used to set a validator.
  1031.   *
  1032.   * <b>SAX2XMLReader assumes responsibility for the validator.  It will be
  1033.   * deleted when the XMLReader is destroyed.</b>
  1034.   *
  1035.   * @param valueToAdopt A pointer to the validator that the reader should use.
  1036.   *
  1037.   */
  1038. virtual void setValidator(XMLValidator* valueToAdopt);
  1039.     /**
  1040.   * This method is used to get the current validator.
  1041.   *
  1042.   * <b>SAX2XMLReader assumes responsibility for the validator.  It will be
  1043.   * deleted when the XMLReader is destroyed.</b>
  1044.   *
  1045.   * @return A pointer to the validator.  An application should not delete
  1046.   * the object returned.
  1047.   *
  1048.   */
  1049. virtual XMLValidator* getValidator() const;
  1050.     //@}
  1051.     // -----------------------------------------------------------------------
  1052.     //  Advanced document handler list maintenance methods
  1053.     // -----------------------------------------------------------------------
  1054.     /** @name Advanced document handler list maintenance methods */
  1055.     //@{
  1056.     /**
  1057.       * This method installs the specified 'advanced' document callback
  1058.       * handler, thereby allowing the user to customize the processing,
  1059.       * if they choose to do so. Any number of advanced callback handlers
  1060.       * maybe installed.
  1061.       *
  1062.       * <p>The methods in the advanced callback interface represent
  1063.       * Xerces-C extensions. There is no specification for this interface.</p>
  1064.       *
  1065.       * @param toInstall A pointer to the users advanced callback handler.
  1066.       *
  1067.       * @see #removeAdvDocHandler
  1068.       */
  1069.     virtual void installAdvDocHandler(XMLDocumentHandler* const toInstall);
  1070.     /**
  1071.       * This method removes the 'advanced' document handler callback from
  1072.       * the underlying parser scanner. If no handler is installed, advanced
  1073.       * callbacks are not invoked by the scanner.
  1074.       * @param toRemove A pointer to the advanced callback handler which
  1075.       *                 should be removed.
  1076.       *
  1077.       * @see #installAdvDocHandler
  1078.       */
  1079.     virtual bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
  1080.     //@}
  1081.     // -----------------------------------------------------------------------
  1082.     //  Progressive scan methods
  1083.     // -----------------------------------------------------------------------
  1084.     /** @name Progressive scan methods */
  1085.     //@{
  1086.     /** Begin a progressive parse operation
  1087.       *
  1088.       * This method is used to start a progressive parse on a XML file.
  1089.       * To continue parsing, subsequent calls must be to the parseNext
  1090.       * method.
  1091.       *
  1092.       * It scans through the prolog and returns a token to be used on
  1093.       * subsequent scanNext() calls. If the return value is true, then the
  1094.       * token is legal and ready for further use. If it returns false, then
  1095.       * the scan of the prolog failed and the token is not going to work on
  1096.       * subsequent scanNext() calls.
  1097.       *
  1098.       * @param systemId A pointer to a Unicode string represting the path
  1099.       *                 to the XML file to be parsed.
  1100.       * @param toFill   A token maintaing state information to maintain
  1101.       *                 internal consistency between invocation of 'parseNext'
  1102.       *                 calls.
  1103.       * @param reuseGrammar The flag indicating whether the existing Grammar
  1104.       *                     should be reused or not for this parsing run.
  1105.       *                     If true, there cannot be any internal subset.
  1106.       *
  1107.       * @return 'true', if successful in parsing the prolog. It indicates the
  1108.       *         user can go ahead with parsing the rest of the file. It
  1109.       *         returns 'false' to indicate that the parser could parse the
  1110.       *         prolog (which means the token will not be valid.)
  1111.       *
  1112.       * @see #parseNext
  1113.       * @see #parseFirst(char*,...)
  1114.       * @see #parseFirst(InputSource&,...)
  1115.       */
  1116.     virtual bool parseFirst
  1117.     (
  1118.         const   XMLCh* const    systemId
  1119.         ,       XMLPScanToken&  toFill
  1120.         , const bool            reuseGrammar = false
  1121.     );
  1122.     /** Begin a progressive parse operation
  1123.       *
  1124.       * This method is used to start a progressive parse on a XML file.
  1125.       * To continue parsing, subsequent calls must be to the parseNext
  1126.       * method.
  1127.       *
  1128.       * It scans through the prolog and returns a token to be used on
  1129.       * subsequent scanNext() calls. If the return value is true, then the
  1130.       * token is legal and ready for further use. If it returns false, then
  1131.       * the scan of the prolog failed and the token is not going to work on
  1132.       * subsequent scanNext() calls.
  1133.       *
  1134.       * @param systemId A pointer to a regular native string represting
  1135.       *                 the path to the XML file to be parsed.
  1136.       * @param toFill   A token maintaing state information to maintain
  1137.       *                 internal consIstency between invocation of 'parseNext'
  1138.       *                 calls.
  1139.       * @param reuseGrammar The flag indicating whether the existing Grammar
  1140.       *                     should be reused or not for this parsing run.
  1141.       *                     If true, there cannot be any internal subset.
  1142.       *
  1143.       * @return 'true', if successful in parsing the prolog. It indicates the
  1144.       *         user can go ahead with parsing the rest of the file. It
  1145.       *         returns 'false' to indicate that the parser could not parse
  1146.       *         the prolog.
  1147.       *
  1148.       * @see #parseNext
  1149.       * @see #parseFirst(XMLCh*,...)
  1150.       * @see #parseFirst(InputSource&,...)
  1151.       */
  1152.     virtual bool parseFirst
  1153.     (
  1154.         const   char* const     systemId
  1155.         ,       XMLPScanToken&  toFill
  1156.         , const bool            reuseGrammar = false
  1157.     );
  1158.     /** Begin a progressive parse operation
  1159.       *
  1160.       * This method is used to start a progressive parse on a XML file.
  1161.       * To continue parsing, subsequent calls must be to the parseNext
  1162.       * method.
  1163.       *
  1164.       * It scans through the prolog and returns a token to be used on
  1165.       * subsequent scanNext() calls. If the return value is true, then the
  1166.       * token is legal and ready for further use. If it returns false, then
  1167.       * the scan of the prolog failed and the token is not going to work on
  1168.       * subsequent scanNext() calls.
  1169.       *
  1170.       * @param source   A const reference to the InputSource object which
  1171.       *                 points to the XML file to be parsed.
  1172.       * @param toFill   A token maintaing state information to maintain
  1173.       *                 internal consistency between invocation of 'parseNext'
  1174.       *                 calls.
  1175.       * @param reuseGrammar The flag indicating whether the existing Grammar
  1176.       *                     should be reused or not for this parsing run.
  1177.       *                     If true, there cannot be any internal subset.
  1178.       *
  1179.       * @return 'true', if successful in parsing the prolog. It indicates the
  1180.       *         user can go ahead with parsing the rest of the file. It
  1181.       *         returns 'false' to indicate that the parser could not parse
  1182.       *         the prolog.
  1183.       *
  1184.       * @see #parseNext
  1185.       * @see #parseFirst(XMLCh*,...)
  1186.       * @see #parseFirst(char*,...)
  1187.       */
  1188.     virtual bool parseFirst
  1189.     (
  1190.         const   InputSource&    source
  1191.         ,       XMLPScanToken&  toFill
  1192.         , const bool            reuseGrammar = false
  1193.     );
  1194.     /** Continue a progressive parse operation
  1195.       *
  1196.       * This method is used to continue with progressive parsing of
  1197.       * XML files started by a call to 'parseFirst' method.
  1198.       *
  1199.       * It parses the XML file and stops as soon as it comes across
  1200.       * a XML token (as defined in the XML specification). Relevant
  1201.       * callback handlers are invoked as required by the SAX
  1202.       * specification.
  1203.       *
  1204.       * @param token A token maintaing state information to maintain
  1205.       *              internal consistency between invocation of 'parseNext'
  1206.       *              calls.
  1207.       *
  1208.       * @return 'true', if successful in parsing the next XML token.
  1209.       *         It indicates the user can go ahead with parsing the rest
  1210.       *         of the file. It returns 'false' to indicate that the parser
  1211.       *         could not find next token as per the XML specification
  1212.       *         production rule.
  1213.       *
  1214.       * @see #parseFirst(XMLCh*,...)
  1215.       * @see #parseFirst(char*,...)
  1216.       * @see #parseFirst(InputSource&,...)
  1217.       */
  1218.     virtual bool parseNext(XMLPScanToken& token);
  1219.     /** Reset the parser after a progressive parse
  1220.       *
  1221.       * If a progressive parse loop exits before the end of the document
  1222.       * is reached, the parser has no way of knowing this. So it will leave
  1223.       * open any files or sockets or memory buffers that were in use at
  1224.       * the time that the parse loop exited.
  1225.       *
  1226.       * The next parse operation will cause these open files and such to
  1227.       * be closed, but the next parse operation might occur at some unknown
  1228.       * future point. To avoid this problem, you should reset the parser if
  1229.       * you exit the loop early.
  1230.       *
  1231.       * If you exited because of an error, then this cleanup will be done
  1232.       * for you. Its only when you exit the file prematurely of your own
  1233.       * accord, because you've found what you wanted in the file most
  1234.       * likely.
  1235.       *
  1236.       * @param token A token maintaing state information to maintain
  1237.       *              internal consistency between invocation of 'parseNext'
  1238.       *              calls.
  1239.       */
  1240.     virtual void parseReset(XMLPScanToken& token);
  1241.     //@}
  1242. private :
  1243.     // -----------------------------------------------------------------------
  1244.     //  Unimplemented constructors and operators
  1245.     // -----------------------------------------------------------------------
  1246.     SAX2XMLReaderImpl(const SAX2XMLReaderImpl&);
  1247.     void operator=(const SAX2XMLReaderImpl&);
  1248.     // -----------------------------------------------------------------------
  1249.     //  Private data members
  1250.     //
  1251.     //  fAttrList
  1252.     //      A temporary implementation of the basic SAX2 Attributes
  1253.     //      interface. We use this one over and over on each startElement
  1254.     //      event to allow SAX-like access to the element attributes.
  1255.     //
  1256.     //  fDocHandler
  1257.     //      The installed SAX content handler, if any. Null if none.
  1258.     //
  1259.     //  fnamespacePrefix
  1260.     //      Indicates whether the namespace-prefix feature is on or off.
  1261.     //
  1262.     //  fautoValidation
  1263.     //      Indicates whether automatic validation is on or off
  1264.     //
  1265.     //  fValidation
  1266.     //      Indicates whether the 'validation' core features is on or off
  1267.     //
  1268.     //  fReuseGrammar
  1269.     //      Tells the parser whether it should reuse the grammar or not.
  1270.     //      If true, there cannot be any internal subset.
  1271.     //
  1272.     // fStringBuffers
  1273.     // Any temporary strings we need are pulled out of this pool
  1274.     //
  1275.     // fPrefixes
  1276.     // A Stack of the current namespace prefixes that need calls to
  1277.     // endPrefixMapping
  1278.     //
  1279.     // fPrefixCounts
  1280.     // A Stack of the number of prefixes that need endPrefixMapping
  1281.     // calls for that element
  1282.     //
  1283.     //  fDTDHandler
  1284.     //      The installed SAX DTD handler, if any. Null if none.
  1285.     //
  1286.     //  fElemDepth
  1287.     //      This is used to track the element nesting depth, so that we can
  1288.     //      know when we are inside content. This is so we can ignore char
  1289.     //      data outside of content.
  1290.     //
  1291.     //  fEntityResolver
  1292.     //      The installed SAX entity handler, if any. Null if none.
  1293.     //
  1294.     //  fErrorHandler
  1295.     //      The installed SAX error handler, if any. Null if none.
  1296.     //
  1297.     //  fLexicalHandler
  1298.     //      The installed SAX lexical handler, if any.  Null if none.
  1299.     //
  1300.     //  fAdvDHCount
  1301.     //  fAdvDHList
  1302.     //  fAdvDHListSize
  1303.     //      This is an array of pointers to XMLDocumentHandlers, which is
  1304.     //      how we see installed advanced document handlers. There will
  1305.     //      usually not be very many at all, so a simple array is used
  1306.     //      instead of a collection, for performance. It will grow if needed,
  1307.     //      but that is unlikely.
  1308.     //
  1309.     //      The count is how many handlers are currently installed. The size
  1310.     //      is how big the array itself is (for expansion purposes.) When
  1311.     //      count == size, is time to expand.
  1312.     //
  1313.     //  fParseInProgress
  1314.     //      This flag is set once a parse starts. It is used to prevent
  1315.     //      multiple entrance or reentrance of the parser.
  1316.     //
  1317.     //  fScanner
  1318.     //      The scanner being used by this parser. It is created internally
  1319.     //      during construction.
  1320.     //
  1321.     // -----------------------------------------------------------------------
  1322. VecAttributesImpl    fAttrList ;
  1323. ContentHandler*    fDocHandler ;
  1324. RefVectorOf<XMLAttr>*      tempAttrVec ;
  1325. bool                       fnamespacePrefix;
  1326. bool                       fautoValidation;
  1327. bool                       fValidation;
  1328. bool                       fReuseGrammar;
  1329. XMLBufferMgr    fStringBuffers ;
  1330. RefStackOf<XMLBuffer> *    fPrefixes ;
  1331. ValueStackOf<unsigned int> * prefixCounts ;
  1332.     DTDHandler*                fDTDHandler;
  1333.     unsigned int               fElemDepth;
  1334.     EntityResolver*            fEntityResolver;
  1335.     ErrorHandler*              fErrorHandler;
  1336.     LexicalHandler*            fLexicalHandler;
  1337.     unsigned int               fAdvDHCount;
  1338.     XMLDocumentHandler**       fAdvDHList;
  1339.     unsigned int               fAdvDHListSize;
  1340.     bool                       fParseInProgress;
  1341.     XMLScanner*                fScanner;
  1342. // internal function used to set the state of validation: always, never, or auto
  1343. void setValidationScheme(const ValSchemes newScheme);
  1344.     void setDoNamespaces(const bool newState);
  1345.     bool getDoNamespaces() const;
  1346.     void setDoSchema(const bool newState);
  1347.     bool getDoSchema() const;
  1348. };
  1349. // ---------------------------------------------------------------------------
  1350. //  SAX2XMLReader: Getter methods
  1351. // ---------------------------------------------------------------------------
  1352. inline ContentHandler* SAX2XMLReaderImpl::getContentHandler() const
  1353. {
  1354.     return fDocHandler;
  1355. }
  1356. inline DTDHandler* SAX2XMLReaderImpl::getDTDHandler() const
  1357. {
  1358. return fDTDHandler ;
  1359. }
  1360. inline EntityResolver* SAX2XMLReaderImpl::getEntityResolver() const
  1361. {
  1362. return fEntityResolver;
  1363. }
  1364. inline ErrorHandler* SAX2XMLReaderImpl::getErrorHandler() const
  1365. {
  1366. return fErrorHandler;
  1367. }
  1368. inline LexicalHandler* SAX2XMLReaderImpl::getLexicalHandler() const
  1369. {
  1370.    return fLexicalHandler;
  1371. }
  1372. inline bool SAX2XMLReaderImpl::getExitOnFirstFatalError() const
  1373. {
  1374.     return fScanner->getExitOnFirstFatal();
  1375. }
  1376. inline bool SAX2XMLReaderImpl::getValidationConstraintFatal() const
  1377. {
  1378.     return fScanner->getValidationConstraintFatal();
  1379. }
  1380. #endif