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

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: SAXParser.hpp,v $
  58.  * Revision 1.22  2001/12/05 22:09:02  tng
  59.  * Update documentation for setExternalSchemaLocation and setExternalNoNamespaceSchemaLocation.
  60.  *
  61.  * Revision 1.21  2001/11/20 18:51:44  tng
  62.  * 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).
  63.  *
  64.  * Revision 1.20  2001/08/01 19:11:02  tng
  65.  * Add full schema constraint checking flag to the samples and the parser.
  66.  *
  67.  * Revision 1.19  2001/07/27 20:24:21  tng
  68.  * put getScanner() back as they were there before, not to break existing apps.
  69.  *
  70.  * Revision 1.18  2001/07/16 12:52:09  tng
  71.  * APIDocs fix: default for schema processing in DOMParser, IDOMParser, and SAXParser should be false.
  72.  *
  73.  * Revision 1.17  2001/06/23 14:13:16  tng
  74.  * Remove getScanner from the Parser headers as this is not needed and Scanner is not internal class.
  75.  *
  76.  * Revision 1.16  2001/06/03 19:26:20  jberry
  77.  * Add support for querying error count following parse; enables simple parse without requiring error handler.
  78.  *
  79.  * Revision 1.15  2001/05/11 13:26:22  tng
  80.  * Copyright update.
  81.  *
  82.  * Revision 1.14  2001/05/03 19:09:25  knoaman
  83.  * Support Warning/Error/FatalError messaging.
  84.  * Validity constraints errors are treated as errors, with the ability by user to set
  85.  * validity constraints as fatal errors.
  86.  *
  87.  * Revision 1.13  2001/03/30 16:46:57  tng
  88.  * Schema: Use setDoSchema instead of setSchemaValidation which makes more sense.
  89.  *
  90.  * Revision 1.12  2001/03/21 21:56:09  tng
  91.  * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar.
  92.  *
  93.  * Revision 1.11  2001/02/15 15:56:29  tng
  94.  * Schema: Add setSchemaValidation and getSchemaValidation for DOMParser and SAXParser.
  95.  * Add feature "http://apache.org/xml/features/validation/schema" for SAX2XMLReader.
  96.  * New data field  fSchemaValidation in XMLScanner as the flag.
  97.  *
  98.  * Revision 1.10  2001/01/12 21:23:41  tng
  99.  * Documentation Enhancement: explain values of Val_Scheme
  100.  *
  101.  * Revision 1.9  2000/08/02 18:05:15  jpolast
  102.  * changes required for sax2
  103.  * (changed private members to protected)
  104.  *
  105.  * Revision 1.8  2000/04/12 22:58:30  roddey
  106.  * Added support for 'auto validate' mode.
  107.  *
  108.  * Revision 1.7  2000/03/03 01:29:34  roddey
  109.  * Added a scanReset()/parseReset() method to the scanner and
  110.  * parsers, to allow for reset after early exit from a progressive parse.
  111.  * Added calls to new Terminate() call to all of the samples. Improved
  112.  * documentation in SAX and DOM parsers.
  113.  *
  114.  * Revision 1.6  2000/02/17 03:54:27  rahulj
  115.  * Added some new getters to query the parser state and
  116.  * clarified the documentation.
  117.  *
  118.  * Revision 1.5  2000/02/16 03:42:58  rahulj
  119.  * Finished documenting the SAX Driver implementation.
  120.  *
  121.  * Revision 1.4  2000/02/15 04:47:37  rahulj
  122.  * Documenting the SAXParser framework. Not done yet.
  123.  *
  124.  * Revision 1.3  2000/02/06 07:47:56  rahulj
  125.  * Year 2K copyright swat.
  126.  *
  127.  * Revision 1.2  1999/12/15 19:57:48  roddey
  128.  * Got rid of redundant 'const' on boolean return value. Some compilers choke
  129.  * on this and its useless.
  130.  *
  131.  * Revision 1.1.1.1  1999/11/09 01:07:51  twl
  132.  * Initial checkin
  133.  *
  134.  * Revision 1.6  1999/11/08 20:44:54  rahul
  135.  * Swat for adding in Product name and CVS comment log variable.
  136.  *
  137.  */
  138. #if !defined(SAXPARSER_HPP)
  139. #define SAXPARSER_HPP
  140. #include <sax/Parser.hpp>
  141. #include <internal/VecAttrListImpl.hpp>
  142. #include <framework/XMLDocumentHandler.hpp>
  143. #include <framework/XMLElementDecl.hpp>
  144. #include <framework/XMLEntityHandler.hpp>
  145. #include <framework/XMLErrorReporter.hpp>
  146. #include <validators/DTD/DocTypeHandler.hpp>
  147. class DocumentHandler;
  148. class EntityResolver;
  149. class XMLPScanToken;
  150. class XMLScanner;
  151. class XMLValidator;
  152. /**
  153.   * This class implements the SAX 'Parser' interface and should be
  154.   * used by applications wishing to parse the XML files using SAX.
  155.   * It allows the client program to install SAX handlers for event
  156.   * callbacks.
  157.   *
  158.   * <p>It can be used to instantiate a validating or non-validating
  159.   * parser, by setting a member flag.</p>
  160.   */
  161. class PARSERS_EXPORT SAXParser :
  162.     public Parser
  163.     , public XMLDocumentHandler
  164.     , public XMLErrorReporter
  165.     , public XMLEntityHandler
  166.     , public DocTypeHandler
  167. {
  168. public :
  169.     // -----------------------------------------------------------------------
  170.     //  Class types
  171.     // -----------------------------------------------------------------------
  172.     enum ValSchemes
  173.     {
  174.         Val_Never
  175.         , Val_Always
  176.         , Val_Auto
  177.     };
  178.     // -----------------------------------------------------------------------
  179.     //  Constructors and Destructor
  180.     // -----------------------------------------------------------------------
  181.     /** @name Constructors and Destructor */
  182.     //@{
  183.     /** Constructor with an instance of validator class to use for
  184.       * validation.
  185.       * @param valToAdopt Pointer to the validator instance to use. The
  186.       *                   parser is responsible for freeing the memory.
  187.       */
  188.     SAXParser(XMLValidator* const valToAdopt = 0);
  189.     /**
  190.       * Destructor
  191.       */
  192.     ~SAXParser();
  193.     //@}
  194.     /** @name Getter methods */
  195.     //@{
  196.     /**
  197.       * This method returns the installed document handler. Suitable
  198.       * for 'lvalue' usages.
  199.       *
  200.       * @return The pointer to the installed document handler object.
  201.       */
  202.     DocumentHandler* getDocumentHandler();
  203.     /**
  204.       * This method returns the installed document handler. Suitable
  205.       * only for 'rvalue' usages.
  206.       *
  207.       * @return A const pointer to the installed document handler object.
  208.       */
  209.     const DocumentHandler* getDocumentHandler() const;
  210.     /**
  211.       * This method returns the installed entity resolver. Suitable
  212.       * for 'lvalue' usages.
  213.       *
  214.       * @return The pointer to the installed entity resolver object.
  215.       */
  216.     EntityResolver* getEntityResolver();
  217.     /**
  218.       * This method returns the installed entity resolver. Suitable
  219.       * for 'rvalue' usages.
  220.       *
  221.       * @return A const pointer to the installed entity resolver object.
  222.       */
  223.     const EntityResolver* getEntityResolver() const;
  224.     /**
  225.       * This method returns the installed error handler. Suitable
  226.       * for 'lvalue' usages.
  227.       *
  228.       * @return The pointer to the installed error handler object.
  229.       */
  230.     ErrorHandler* getErrorHandler();
  231.     /**
  232.       * This method returns the installed error handler. Suitable
  233.       * for 'rvalue' usages.
  234.       *
  235.       * @return A const pointer to the installed error handler object.
  236.       */
  237.     const ErrorHandler* getErrorHandler() const;
  238.     /**
  239.       * This method returns a reference to the underlying scanner object.
  240.       * It allows read only access to data maintained in the scanner.
  241.       *
  242.       * @return A const reference to the underlying scanner object.
  243.       */
  244.     const XMLScanner& getScanner() const;
  245.     /**
  246.       * This method returns a reference to the parser's installed
  247.       * validator.
  248.       *
  249.       * @return A const reference to the installed validator object.
  250.       */
  251.     const XMLValidator& getValidator() const;
  252.     /**
  253.       * This method returns an enumerated value that indicates the current
  254.       * validation scheme set on this parser.
  255.       *
  256.       * @return The ValSchemes value current set on this parser.
  257.       * @see #setValidationScheme
  258.       */
  259.     ValSchemes getValidationScheme() const;
  260.     /** Get the 'do schema' flag
  261.       *
  262.       * This method returns the state of the parser's schema processing
  263.       * flag.
  264.       *
  265.       * @return true, if the parser is currently configured to
  266.       *         understand schema, false otherwise.
  267.       *
  268.       * @see #setDoSchema
  269.       */
  270.     bool getDoSchema() const;
  271.     /** Get the 'full schema constraint checking' flag
  272.       *
  273.       * This method returns the state of the parser's full schema constraint
  274.       * checking flag.
  275.       *
  276.       * @return true, if the parser is currently configured to
  277.       *         have full schema constraint checking, false otherwise.
  278.       *
  279.       * @see #setValidationSchemaFullChecking
  280.       */
  281.     bool getValidationSchemaFullChecking() const;
  282.     /** Get error count from the last parse operation.
  283.       *
  284.       * This method returns the error count from the last parse
  285.       * operation. Note that this count is actually stored in the
  286.       * scanner, so this method simply returns what the
  287.       * scanner reports.
  288.       *
  289.       * @return number of errors encountered during the latest
  290.       * parse operation.
  291.       */
  292.     int getErrorCount() const;
  293.     /**
  294.       * This method returns the state of the parser's namespace
  295.       * handling capability.
  296.       *
  297.       * @return true, if the parser is currently configured to
  298.       *         understand namespaces, false otherwise.
  299.       *
  300.       * @see #setDoNamespaces
  301.       */
  302.     bool getDoNamespaces() const;
  303.     /**
  304.       * This method returns the state of the parser's
  305.       * exit-on-First-Fatal-Error flag.
  306.       *
  307.       * @return true, if the parser is currently configured to
  308.       *         exit on the first fatal error, false otherwise.
  309.       *
  310.       * @see #setExitOnFirstFatalError
  311.       */
  312.     bool getExitOnFirstFatalError() const;
  313.     /**
  314.       * This method returns the state of the parser's
  315.       * validation-constraint-fatal flag.
  316.       *
  317.       * @return true, if the parser is currently configured to
  318.       *         set validation constraint errors as fatal, false
  319.       *         otherwise.
  320.       *
  321.       * @see #setValidationContraintFatal
  322.       */
  323.     bool getValidationConstraintFatal() const;
  324.    /** Get the set of Namespace/SchemaLocation that is specified externaly.
  325.       *
  326.       * This method returns the list of Namespace/SchemaLocation that was
  327.       * specified using setExternalSchemaLocation.
  328.       *
  329.       * The parser owns the returned string, and the memory allocated for
  330.       * the returned string will be destroyed when the parser is deleted.
  331.       *
  332.       * To ensure assessiblity of the returned information after the parser
  333.       * is deleted, callers need to copy and store the returned information
  334.       * somewhere else.
  335.       *
  336.       * @return a pointer to the list of Namespace/SchemaLocation that was
  337.       *         specified externally.  The pointer spans the same life-time as
  338.       *         the parser.  A null pointer is returned if nothing
  339.       *         was specified externally.
  340.       *
  341.       * @see #setExternalSchemaLocation(const XMLCh* const)
  342.       */
  343.     XMLCh* getExternalSchemaLocation() const;
  344.    /** Get the noNamespace SchemaLocation that is specified externaly.
  345.       *
  346.       * This method returns the no target namespace XML Schema Location
  347.       * that was specified using setExternalNoNamespaceSchemaLocation.
  348.       *
  349.       * The parser owns the returned string, and the memory allocated for
  350.       * the returned string will be destroyed when the parser is deleted.
  351.       *
  352.       * To ensure assessiblity of the returned information after the parser
  353.       * is deleted, callers need to copy and store the returned information
  354.       * somewhere else.
  355.       *
  356.       * @return a pointer to the no target namespace Schema Location that was
  357.       *         specified externally.  The pointer spans the same life-time as
  358.       *         the parser.  A null pointer is returned if nothing
  359.       *         was specified externally.
  360.       *
  361.       * @see #setExternalNoNamespaceSchemaLocation(const XMLCh* const)
  362.       */
  363.     XMLCh* getExternalNoNamespaceSchemaLocation() const;
  364.     //@}
  365.     // -----------------------------------------------------------------------
  366.     //  Setter methods
  367.     // -----------------------------------------------------------------------
  368.     /** @name Setter methods */
  369.     //@{
  370.     /**
  371.       * This method allows users to enable or disable the parser's
  372.       * namespace processing. When set to true, parser starts enforcing
  373.       * all the constraints / rules specified by the NameSpace
  374.       * specification.
  375.       *
  376.       * <p>The parser's default state is: false.</p>
  377.       *
  378.       * <p>This flag is ignored by the underlying scanner if the installed
  379.       * validator indicates that namespace constraints should be
  380.       * enforced.</p>
  381.       *
  382.       * @param newState The value specifying whether NameSpace rules should
  383.       *                 be enforced or not.
  384.       *
  385.       * @see #getDoNamespaces
  386.       */
  387.     void setDoNamespaces(const bool newState);
  388.     /**
  389.       * This method allows users to set the validation scheme to be used
  390.       * by this parser. The value is one of the ValSchemes enumerated values
  391.       * defined by this class:
  392.       *
  393.       * <br>  Val_Never  - turn off validation
  394.       * <br>  Val_Always - turn on validation
  395.       * <br>  Val_Auto   - turn on validation if any internal/external
  396.       *                  DTD subset have been seen
  397.       *
  398.       * <p>The parser's default state is: Val_Auto.</p>
  399.       *
  400.       * @param newScheme The new validation scheme to use.
  401.       *
  402.       * @see #getValidationScheme
  403.       */
  404.     void setValidationScheme(const ValSchemes newScheme);
  405.     /** Set the 'schema support' flag
  406.       *
  407.       * This method allows users to enable or disable the parser's
  408.       * schema processing. When set to false, parser will not process
  409.       * any schema found.
  410.       *
  411.       * The parser's default state is: false.
  412.       *
  413.       * @param newState The value specifying whether schema support should
  414.       *                 be enforced or not.
  415.       *
  416.       * @see #getDoSchema
  417.       */
  418.     void setDoSchema(const bool newState);
  419.     /**
  420.       * This method allows the user to turn full Schema constraint checking on/off.
  421.       * Only takes effect if Schema validation is enabled.
  422.       * If turned off, partial constraint checking is done.
  423.       *
  424.       * Full schema constraint checking includes those checking that may
  425.       * be time-consuming or memory intensive. Currently, particle unique
  426.       * attribution constraint checking and particle derivation resriction checking
  427.       * are controlled by this option.
  428.       *
  429.       * The parser's default state is: false.
  430.       *
  431.       * @param schemaFullChecking True to turn on full schema constraint checking.
  432.       *
  433.       * @see #getValidationSchemaFullChecking
  434.       */
  435.     void setValidationSchemaFullChecking(const bool schemaFullChecking);
  436.     /**
  437.       * This method allows users to set the parser's behaviour when it
  438.       * encounters the first fatal error. If set to true, the parser
  439.       * will exit at the first fatal error. If false, then it will
  440.       * report the error and continue processing.
  441.       *
  442.       * <p>The default value is 'true' and the parser exits on the
  443.       * first fatal error.</p>
  444.       *
  445.       * @param newState The value specifying whether the parser should
  446.       *                 continue or exit when it encounters the first
  447.       *                 fatal error.
  448.       *
  449.       * @see #getExitOnFirstFatalError
  450.       */
  451.     void setExitOnFirstFatalError(const bool newState);
  452.     /**
  453.       * This method allows users to set the parser's behaviour when it
  454.       * encounters a validtion constraint error. If set to true, and the
  455.       * the parser is set to exit when it encounter the first fatal error,
  456.       * the parser will exit at the first encounter. If false, then it will
  457.       * report the error and continue processing.
  458.       *
  459.       * <p>The default value is 'false'.</p>
  460.       *
  461.       * @param newState The value specifying whether the parser should
  462.       *                 continue or exit when it encounters a validation
  463.       *                 constraint error.
  464.       *
  465.       * @see #getValidationConstraintFatal
  466.       */
  467.     void setValidationConstraintFatal(const bool newState);
  468.     /**
  469.       * This method allows the user to specify a list of schemas to use.
  470.       * If the targetNamespace of a schema specified using this method matches
  471.       * the targetNamespace of a schema occuring in the instance document in
  472.       * the schemaLocation attribute, or if the targetNamespace matches the
  473.       * namespace attribute of the "import" element, the schema specified by the
  474.       * user using this method will be used (i.e., the schemaLocation attribute
  475.       * in the instance document or on the "import" element will be effectively ignored).
  476.       *
  477.       * If this method is called more than once, only the last one takes effect.
  478.       *
  479.       * The syntax is the same as for schemaLocation attributes in instance
  480.       * documents: e.g, "http://www.example.com file_name.xsd". The user can
  481.       * specify more than one XML Schema in the list.
  482.       *
  483.       * @param the list of schemas to use
  484.       *
  485.       * @see #getExternalSchemaLocation
  486.       */
  487.     void setExternalSchemaLocation(const XMLCh* const schemaLocation);
  488.     /**
  489.       * This method is same as setExternalSchemaLocation(const XMLCh* const).
  490.       * It takes native char string as parameter
  491.       *
  492.       * @param the list of schemas to use
  493.       *
  494.       * @see #setExternalSchemaLocation(const XMLCh* const)
  495.       */
  496.     void setExternalSchemaLocation(const char* const schemaLocation);
  497.     /**
  498.       * This method allows the user to specify the no target namespace XML
  499.       * Schema Location externally.  If specified, the instance document's
  500.       * noNamespaceSchemaLocation attribute will be effectively ignored.
  501.       *
  502.       * If this method is called more than once, only the last one takes effect.
  503.       *
  504.       * The syntax is the same as for the noNamespaceSchemaLocation attribute
  505.       * that may occur in an instance document: e.g."file_name.xsd".
  506.       *
  507.       * @param the XML Schema Location with no target namespace
  508.       *
  509.       * @see #getExternalNoNamespaceSchemaLocation
  510.       */
  511.     void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
  512.     /**
  513.       * This method is same as setExternalNoNamespaceSchemaLocation(const XMLCh* const).
  514.       * It takes native char string as parameter
  515.       *
  516.       * @param the XML Schema Location with no target namespace
  517.       *
  518.       * @see #setExternalNoNamespaceSchemaLocation(const XMLCh* const)
  519.       */
  520.     void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
  521.     //@}
  522.     // -----------------------------------------------------------------------
  523.     //  Advanced document handler list maintenance methods
  524.     // -----------------------------------------------------------------------
  525.     /** @name Advanced document handler list maintenance methods */
  526.     //@{
  527.     /**
  528.       * This method installs the specified 'advanced' document callback
  529.       * handler, thereby allowing the user to customize the processing,
  530.       * if they choose to do so. Any number of advanced callback handlers
  531.       * maybe installed.
  532.       *
  533.       * <p>The methods in the advanced callback interface represent
  534.       * Xerces-C extensions. There is no specification for this interface.</p>
  535.       *
  536.       * @param toInstall A pointer to the users advanced callback handler.
  537.       *
  538.       * @see #removeAdvDocHandler
  539.       */
  540.     void installAdvDocHandler(XMLDocumentHandler* const toInstall);
  541.     /**
  542.       * This method removes the 'advanced' document handler callback from
  543.       * the underlying parser scanner. If no handler is installed, advanced
  544.       * callbacks are not invoked by the scanner.
  545.       * @param toRemove A pointer to the advanced callback handler which
  546.       *                 should be removed.
  547.       *
  548.       * @see #installAdvDocHandler
  549.       */
  550.     bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
  551.     //@}
  552.     // -----------------------------------------------------------------------
  553.     //  Implementation of the SAXParser interface
  554.     // -----------------------------------------------------------------------
  555.     /** @name Implementation of SAX 1.0 interface's. */
  556.     //@{
  557.     /**
  558.       * This method invokes the parsing process on the XML file specified
  559.       * by the InputSource parameter.
  560.       *
  561.       * @param source A const reference to the InputSource object which
  562.       *               points to the XML file to be parsed.
  563.       * @param reuseGrammar The flag indicating whether the existing Grammar
  564.       *                     should be reused or not for this parsing run.
  565.       *                     If true, there cannot be any internal subset.
  566.       *
  567.       * @see Parser#parse(InputSource)
  568.       */
  569.     virtual void parse(const InputSource& source, const bool reuseGrammar = false);
  570.     /**
  571.       * This method invokes the parsing process on the XML file specified by
  572.       * the Unicode string parameter 'systemId'.
  573.       *
  574.       * @param systemId A const XMLCh pointer to the Unicode string which
  575.       *                 contains the path to the XML file to be parsed.
  576.       * @param reuseGrammar The flag indicating whether the existing Grammar
  577.       *                     should be reused or not for this parsing run.
  578.       *                     If true, there cannot be any internal subset.
  579.       *
  580.       * @see Parser#parse(XMLCh*)
  581.       */
  582.     virtual void parse(const XMLCh* const systemId, const bool reuseGrammar = false);
  583.     /**
  584.       * This method invokes the parsing process on the XML file specified by
  585.       * the native char* string parameter 'systemId'.
  586.       *
  587.       * @param systemId A const char pointer to a native string which
  588.       *                 contains the path to the XML file to be parsed.
  589.       * @param reuseGrammar The flag indicating whether the existing Grammar
  590.       *                     should be reused or not for this parsing run.
  591.       *                     If true, there cannot be any internal subset.
  592.       */
  593.     virtual void parse(const char* const systemId, const bool reuseGrammar = false);
  594.     /**
  595.       * This method installs the user specified SAX Document Handler
  596.       * callback function on parser.
  597.       *
  598.       * @param handler A pointer to the document handler to be called
  599.       *                when the parser comes across 'document' events
  600.       *                as per the SAX specification.
  601.       *
  602.       * @see Parser#parse(char*)
  603.       */
  604.     virtual void setDocumentHandler(DocumentHandler* const handler);
  605.     /**
  606.       * This method installs the user specified DTD handler on the parser.
  607.       *
  608.       * @param handler A pointer to the DTD handler to be called
  609.       *                when the parser comes across 'DTD' events
  610.       *                as per the SAX specification.
  611.       *
  612.       * @see Parser#setDTDHandler
  613.       */
  614.     virtual void setDTDHandler(DTDHandler* const handler);
  615.     /**
  616.       * This method installs the user specified error handler on
  617.       * the parser.
  618.       *
  619.       * @param handler A pointer to the error handler to be called
  620.       *                when the parser comes across 'error' events
  621.       *                as per the SAX specification.
  622.       *
  623.       * @see Parser#setErrorHandler
  624.       */
  625.     virtual void setErrorHandler(ErrorHandler* const handler);
  626.     /**
  627.       * This method installs the user specified entity resolver on the
  628.       * parser. It allows applications to trap and redirect calls to
  629.       * external entities.
  630.       *
  631.       * @param handler A pointer to the entity resolver to be called
  632.       *                when the parser comes across references to
  633.       *                entities in the XML file.
  634.       *
  635.       * @see Parser#setEntityResolver
  636.       */
  637.     virtual void setEntityResolver(EntityResolver* const resolver);
  638.     //@}
  639.     // -----------------------------------------------------------------------
  640.     //  Progressive scan methods
  641.     // -----------------------------------------------------------------------
  642.     /** @name Progressive scan methods */
  643.     //@{
  644.     /** Begin a progressive parse operation
  645.       *
  646.       * This method is used to start a progressive parse on a XML file.
  647.       * To continue parsing, subsequent calls must be to the parseNext
  648.       * method.
  649.       *
  650.       * It scans through the prolog and returns a token to be used on
  651.       * subsequent scanNext() calls. If the return value is true, then the
  652.       * token is legal and ready for further use. If it returns false, then
  653.       * the scan of the prolog failed and the token is not going to work on
  654.       * subsequent scanNext() calls.
  655.       *
  656.       * @param systemId A pointer to a Unicode string represting the path
  657.       *                 to the XML file to be parsed.
  658.       * @param toFill   A token maintaing state information to maintain
  659.       *                 internal consistency between invocation of 'parseNext'
  660.       *                 calls.
  661.       * @param reuseGrammar The flag indicating whether the existing Grammar
  662.       *                     should be reused or not for this parsing run.
  663.       *                     If true, there cannot be any internal subset.
  664.       *
  665.       * @return 'true', if successful in parsing the prolog. It indicates the
  666.       *         user can go ahead with parsing the rest of the file. It
  667.       *         returns 'false' to indicate that the parser could parse the
  668.       *         prolog (which means the token will not be valid.)
  669.       *
  670.       * @see #parseNext
  671.       * @see #parseFirst(char*,...)
  672.       * @see #parseFirst(InputSource&,...)
  673.       */
  674.     bool parseFirst
  675.     (
  676.         const   XMLCh* const    systemId
  677.         ,       XMLPScanToken&  toFill
  678.         , const bool            reuseGrammar = false
  679.     );
  680.     /** Begin a progressive parse operation
  681.       *
  682.       * This method is used to start a progressive parse on a XML file.
  683.       * To continue parsing, subsequent calls must be to the parseNext
  684.       * method.
  685.       *
  686.       * It scans through the prolog and returns a token to be used on
  687.       * subsequent scanNext() calls. If the return value is true, then the
  688.       * token is legal and ready for further use. If it returns false, then
  689.       * the scan of the prolog failed and the token is not going to work on
  690.       * subsequent scanNext() calls.
  691.       *
  692.       * @param systemId A pointer to a regular native string represting
  693.       *                 the path to the XML file to be parsed.
  694.       * @param toFill   A token maintaing state information to maintain
  695.       *                 internal consIstency between invocation of 'parseNext'
  696.       *                 calls.
  697.       * @param reuseGrammar The flag indicating whether the existing Grammar
  698.       *                     should be reused or not for this parsing run.
  699.       *                     If true, there cannot be any internal subset.
  700.       *
  701.       * @return 'true', if successful in parsing the prolog. It indicates the
  702.       *         user can go ahead with parsing the rest of the file. It
  703.       *         returns 'false' to indicate that the parser could not parse
  704.       *         the prolog.
  705.       *
  706.       * @see #parseNext
  707.       * @see #parseFirst(XMLCh*,...)
  708.       * @see #parseFirst(InputSource&,...)
  709.       */
  710.     bool parseFirst
  711.     (
  712.         const   char* const     systemId
  713.         ,       XMLPScanToken&  toFill
  714.         , const bool            reuseGrammar = false
  715.     );
  716.     /** Begin a progressive parse operation
  717.       *
  718.       * This method is used to start a progressive parse on a XML file.
  719.       * To continue parsing, subsequent calls must be to the parseNext
  720.       * method.
  721.       *
  722.       * It scans through the prolog and returns a token to be used on
  723.       * subsequent scanNext() calls. If the return value is true, then the
  724.       * token is legal and ready for further use. If it returns false, then
  725.       * the scan of the prolog failed and the token is not going to work on
  726.       * subsequent scanNext() calls.
  727.       *
  728.       * @param source   A const reference to the InputSource object which
  729.       *                 points to the XML file to be parsed.
  730.       * @param toFill   A token maintaing state information to maintain
  731.       *                 internal consistency between invocation of 'parseNext'
  732.       *                 calls.
  733.       * @param reuseGrammar The flag indicating whether the existing Grammar
  734.       *                     should be reused or not for this parsing run.
  735.       *                     If true, there cannot be any internal subset.
  736.       *
  737.       * @return 'true', if successful in parsing the prolog. It indicates the
  738.       *         user can go ahead with parsing the rest of the file. It
  739.       *         returns 'false' to indicate that the parser could not parse
  740.       *         the prolog.
  741.       *
  742.       * @see #parseNext
  743.       * @see #parseFirst(XMLCh*,...)
  744.       * @see #parseFirst(char*,...)
  745.       */
  746.     bool parseFirst
  747.     (
  748.         const   InputSource&    source
  749.         ,       XMLPScanToken&  toFill
  750.         , const bool            reuseGrammar = false
  751.     );
  752.     /** Continue a progressive parse operation
  753.       *
  754.       * This method is used to continue with progressive parsing of
  755.       * XML files started by a call to 'parseFirst' method.
  756.       *
  757.       * It parses the XML file and stops as soon as it comes across
  758.       * a XML token (as defined in the XML specification). Relevant
  759.       * callback handlers are invoked as required by the SAX
  760.       * specification.
  761.       *
  762.       * @param token A token maintaing state information to maintain
  763.       *              internal consistency between invocation of 'parseNext'
  764.       *              calls.
  765.       *
  766.       * @return 'true', if successful in parsing the next XML token.
  767.       *         It indicates the user can go ahead with parsing the rest
  768.       *         of the file. It returns 'false' to indicate that the parser
  769.       *         could not find next token as per the XML specification
  770.       *         production rule.
  771.       *
  772.       * @see #parseFirst(XMLCh*,...)
  773.       * @see #parseFirst(char*,...)
  774.       * @see #parseFirst(InputSource&,...)
  775.       */
  776.     bool parseNext(XMLPScanToken& token);
  777.     /** Reset the parser after a progressive parse
  778.       *
  779.       * If a progressive parse loop exits before the end of the document
  780.       * is reached, the parser has no way of knowing this. So it will leave
  781.       * open any files or sockets or memory buffers that were in use at
  782.       * the time that the parse loop exited.
  783.       *
  784.       * The next parse operation will cause these open files and such to
  785.       * be closed, but the next parse operation might occur at some unknown
  786.       * future point. To avoid this problem, you should reset the parser if
  787.       * you exit the loop early.
  788.       *
  789.       * If you exited because of an error, then this cleanup will be done
  790.       * for you. Its only when you exit the file prematurely of your own
  791.       * accord, because you've found what you wanted in the file most
  792.       * likely.
  793.       *
  794.       * @param token A token maintaing state information to maintain
  795.       *              internal consistency between invocation of 'parseNext'
  796.       *              calls.
  797.       */
  798.     void parseReset(XMLPScanToken& token);
  799.     //@}
  800.     // -----------------------------------------------------------------------
  801.     //  Implementation of the DocTypeHandler Interface
  802.     // -----------------------------------------------------------------------
  803.     /** @name Implementation of the DocTypeHandler Interface */
  804.     //@{
  805.     /**
  806.       * This method is used to report an attribute definition.
  807.       *
  808.       * <b><font color="#FF0000">This method is a no-op for this SAX
  809.       * driver implementation.</font></b>
  810.       *
  811.       * @param elemDecl A const reference to the object containing information
  812.       *                 about the element whose attribute definition was just
  813.       *                 parsed.
  814.       * @param attDef   A const reference to the object containing information
  815.       *                 attribute definition.
  816.       * @param ignore   The flag indicating whether this attribute definition
  817.       *                 was ignored by the parser or not.
  818.       */
  819.     virtual void attDef
  820.     (
  821.         const   DTDElementDecl& elemDecl
  822.         , const DTDAttDef&      attDef
  823.         , const bool            ignoring
  824.     );
  825.     /**
  826.       * This method is used to report a comment occurring within the DTD.
  827.       *
  828.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  829.       * implementation.</font></b>
  830.       *
  831.       * @param comment  A const pointer to a Unicode string representing the
  832.       *                 text of the comment just parsed.
  833.       */
  834.     virtual void doctypeComment
  835.     (
  836.         const   XMLCh* const    comment
  837.     );
  838.     /**
  839.       * This method is used to report the DOCTYPE declaration.
  840.       *
  841.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  842.       * implementation.</font></b>
  843.       *
  844.       * @param elemDecl A const reference to the object containing information
  845.       *                 about the root element definition declaration of the
  846.       *                 XML document being parsed.
  847.       * @param publicId A const pointer to a Unicode string representing the
  848.       *                 public id of the DTD file.
  849.       * @param systemId A const pointer to a Unicode string representing the
  850.       *                 system id of the DTD file.
  851.       * @param hasIntSubset A flag indicating if this XML file contains any
  852.       *                     internal subset.
  853.       */
  854.     virtual void doctypeDecl
  855.     (
  856.         const   DTDElementDecl& elemDecl
  857.         , const XMLCh* const    publicId
  858.         , const XMLCh* const    systemId
  859.         , const bool            hasIntSubset
  860.     );
  861.     /**
  862.       * This method is used to report any PI declarations
  863.       * occurring inside the DTD definition block.
  864.       *
  865.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  866.       * implementation.</font></b>
  867.       *
  868.       * @param target A const pointer to a Unicode string representing the
  869.       *               target of the PI declaration.
  870.       * @param data   A const pointer to a Unicode string representing the
  871.       *               data of the PI declaration. See the PI production rule
  872.       *               in the XML specification for details.
  873.       */
  874.     virtual void doctypePI
  875.     (
  876.         const   XMLCh* const    target
  877.         , const XMLCh* const    data
  878.     );
  879.     /**
  880.       * This method is used to report any whitespaces
  881.       * occurring inside the DTD definition block.
  882.       *
  883.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  884.       * implementation.</font></b>
  885.       *
  886.       * @param chars  A const pointer to a Unicode string representing the
  887.       *               whitespace characters.
  888.       * @param length The length of the whitespace Unicode string.
  889.       */
  890.     virtual void doctypeWhitespace
  891.     (
  892.         const   XMLCh* const    chars
  893.         , const unsigned int    length
  894.     );
  895.     /**
  896.       * This method is used to report an element declarations
  897.       * successfully scanned by the parser.
  898.       *
  899.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  900.       * implementation.</font></b>
  901.       *
  902.       * @param decl   A const reference to the object containing element
  903.       *               declaration information.
  904.       * @param isIgnored The flag indicating whether this definition was
  905.       *                  ignored by the parser or not.
  906.       */
  907.     virtual void elementDecl
  908.     (
  909.         const   DTDElementDecl& decl
  910.         , const bool            isIgnored
  911.     );
  912.     /**
  913.       * This method is used to report the end of an attribute
  914.       * list declaration for an element.
  915.       *
  916.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  917.       * implementation.</font></b>
  918.       *
  919.       * @param elemDecl A const reference to the object containing element
  920.       *                 declaration information.
  921.       */
  922.     virtual void endAttList
  923.     (
  924.         const   DTDElementDecl& elemDecl
  925.     );
  926.     /**
  927.       * This method is used to report the end of the internal subset.
  928.       *
  929.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  930.       * implementation.</font></b>
  931.       */
  932.     virtual void endIntSubset();
  933.     /**
  934.       * This method is used to report the end of the external subset.
  935.       *
  936.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  937.       * implementation.</font></b>
  938.       */
  939.     virtual void endExtSubset();
  940.     /**
  941.       * This method is used to report any entity declarations.
  942.       * For unparsed entities, this driver will invoke the
  943.       * SAX DTDHandler::unparsedEntityDecl callback.
  944.       *
  945.       * @param entityDecl A const reference to the object containing
  946.       *                   the entity declaration information.
  947.       * @param isPEDecl  The flag indicating whether this was a
  948.       *                  parameter entity declaration or not.
  949.       * @param isIgnored The flag indicating whether this definition
  950.       *                  was ignored by the parser or not.
  951.       *
  952.       * @see DTDHandler#unparsedEntityDecl
  953.       */
  954.     virtual void entityDecl
  955.     (
  956.         const   DTDEntityDecl&  entityDecl
  957.         , const bool            isPEDecl
  958.         , const bool            isIgnored
  959.     );
  960.     /**
  961.       * This method allows the user installed DTD handler to
  962.       * reset itself.
  963.       */
  964.     virtual void resetDocType();
  965.     /**
  966.       * This method is used to report any notation declarations.
  967.       * If there is a user installed DTDHandler, then the driver will
  968.       * invoke the SAX DTDHandler::notationDecl callback.
  969.       *
  970.       * @param notDecl A const reference to the object containing the notation
  971.       *                declaration information.
  972.       * @param isIgnored The flag indicating whether this definition was ignored
  973.       *                  by the parser or not.
  974.       *
  975.       * @see DTDHandler#notationDecl
  976.       */
  977.     virtual void notationDecl
  978.     (
  979.         const   XMLNotationDecl&    notDecl
  980.         , const bool                isIgnored
  981.     );
  982.     /**
  983.       * This method is used to indicate the start of an element's attribute
  984.       * list declaration.
  985.       *
  986.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  987.       * implementation.</font></b>
  988.       *
  989.       * @param elemDecl A const reference to the object containing element
  990.       *                 declaration information.
  991.       */
  992.     virtual void startAttList
  993.     (
  994.         const   DTDElementDecl& elemDecl
  995.     );
  996.     /**
  997.       * This method is used indicate the start of the internal subset.
  998.       *
  999.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1000.       * implementation.</font></b>
  1001.       */
  1002.     virtual void startIntSubset();
  1003.     /**
  1004.       * This method is used indicate the start of the external subset.
  1005.       *
  1006.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1007.       * implementation.</font></b>
  1008.       */
  1009.     virtual void startExtSubset();
  1010.     /**
  1011.       * This method is used to report the TextDecl. Refer to the XML
  1012.       * specification for the syntax of a TextDecl.
  1013.       *
  1014.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1015.       * implementation.</font></b>
  1016.       *
  1017.       * @param versionStr A const pointer to a Unicode string representing
  1018.       *                   the version number of the 'version' clause.
  1019.       * @param encodingStr A const pointer to a Unicode string representing
  1020.       *                    the encoding name of the 'encoding' clause.
  1021.       */
  1022.     virtual void TextDecl
  1023.     (
  1024.         const   XMLCh* const    versionStr
  1025.         , const XMLCh* const    encodingStr
  1026.     );
  1027.     //@}
  1028.     // -----------------------------------------------------------------------
  1029.     //  Implementation of the XMLDocumentHandler interface
  1030.     // -----------------------------------------------------------------------
  1031.     /** @name Implementation of the XMLDocumentHandler Interface. */
  1032.     //@{
  1033.     /**
  1034.       * This method is used to report all the characters scanned
  1035.       * by the parser. The driver will invoke the 'characters'
  1036.       * method of the user installed SAX Document Handler.
  1037.       *
  1038.       * <p>If any advanced callback handlers are installed, the
  1039.       * corresponding 'docCharacters' method will also be invoked.</p>
  1040.       *
  1041.       * @param chars   A const pointer to a Unicode string representing the
  1042.       *                character data.
  1043.       * @param length  The length of the Unicode string returned in 'chars'.
  1044.       * @param cdataSection  A flag indicating if the characters represent
  1045.       *                      content from the CDATA section.
  1046.       * @see DocumentHandler#characters
  1047.       */
  1048.     virtual void docCharacters
  1049.     (
  1050.         const   XMLCh* const    chars
  1051.         , const unsigned int    length
  1052.         , const bool            cdataSection
  1053.     );
  1054.     /**
  1055.       * This method is used to report any comments scanned by the parser.
  1056.       * This method is a no-op unless, unless an advanced callback handler
  1057.       * is installed, in which case the corresponding 'docComment' method
  1058.       * is invoked.
  1059.       *
  1060.       * @param comment A const pointer to a null terminated Unicode
  1061.       *                string representing the comment text.
  1062.       */
  1063.     virtual void docComment
  1064.     (
  1065.         const   XMLCh* const    comment
  1066.     );
  1067.     /**
  1068.       * This method is used to report any PI scanned by the parser.
  1069.       *
  1070.       * <p>Any PI's occurring before any 'content' are not reported
  1071.       * to any SAX handler as per the specification. However, all
  1072.       * PI's within content are reported via the SAX Document Handler's
  1073.       * 'processingInstruction' method.
  1074.       *
  1075.       * <p>If any advanced callback handlers are installed, the
  1076.       * corresponding 'docPI' method will be invoked.</p>
  1077.       *
  1078.       * @param target A const pointer to a Unicode string representing the
  1079.       *               target of the PI declaration.
  1080.       * @param data   A const pointer to a Unicode string representing the
  1081.       *               data of the PI declaration. See the PI production rule
  1082.       *               in the XML specification for details.
  1083.       *
  1084.       * @see DocumentHandler#processingInstruction
  1085.       */
  1086.     virtual void docPI
  1087.     (
  1088.         const   XMLCh* const    target
  1089.         , const XMLCh* const    data
  1090.     );
  1091.     /**
  1092.       * This method is used to indicate the end of root element
  1093.       * was just scanned by the parser. Corresponding 'endDocument'
  1094.       * method of the user installed SAX Document Handler will also
  1095.       * be invoked.
  1096.       *
  1097.       * <p>In addition, if any advanced callback handlers are installed,
  1098.       * the corresponding 'endDocument' method is invoked.</p>
  1099.       *
  1100.       * @see DocumentHandler#endDocument
  1101.       */
  1102.     virtual void endDocument();
  1103.     /**
  1104.       * This method is used to indicate the end tag of an element.
  1105.       * The driver will invoke the corresponding 'endElement' method of
  1106.       * the SAX Document Handler interface.
  1107.       *
  1108.       * <p>If any advanced callback handlers are installed, the
  1109.       * corresponding 'endElement' method is also invoked.</p>
  1110.       *
  1111.       * @param elemDecl A const reference to the object containing element
  1112.       *                 declaration information.
  1113.       * @param urlId    An id referring to the namespace prefix, if
  1114.       *                 namespaces setting is switched on.
  1115.       * @param isRoot   A flag indicating whether this element was the
  1116.       *                 root element.
  1117.       * @see DocumentHandler#endElement
  1118.       */
  1119.     virtual void endElement
  1120.     (
  1121.         const   XMLElementDecl& elemDecl
  1122.         , const unsigned int    urlId
  1123.         , const bool            isRoot
  1124.     );
  1125.     /**
  1126.       * This method is used to indicate that an end of an entity reference
  1127.       * was just scanned.
  1128.       *
  1129.       * <p>If any advanced callback handlers are installed, the
  1130.       * corresponding 'endEnityReference' method is invoked.</p>
  1131.       *
  1132.       * @param entDecl A const reference to the object containing the
  1133.       *                entity declaration information.
  1134.       */
  1135.     virtual void endEntityReference
  1136.     (
  1137.         const   XMLEntityDecl&  entDecl
  1138.     );
  1139.     /**
  1140.       * This method is used to report all the whitespace characters,
  1141.       * which are determined to be 'ignorable'. This distinction
  1142.       * between characters is only made, if validation is enabled.
  1143.       * Corresponding 'ignorableWhitespace' method of the user installed
  1144.       * SAX Document Handler interface is called.
  1145.       *
  1146.       * <p>Any whitespace before content is not reported to the SAX
  1147.       * Document Handler method, as per the SAX specification.
  1148.       * However, if any advanced callback handlers are installed, the
  1149.       * corresponding 'ignorableWhitespace' method is invoked.</p>
  1150.       *
  1151.       * @param chars   A const pointer to a Unicode string representing the
  1152.       *                ignorable whitespace character data.
  1153.       * @param length  The length of the Unicode string 'chars'.
  1154.       * @param cdataSection  A flag indicating if the characters represent
  1155.       *                      content from the CDATA section.
  1156.       * @see DocumentHandler#ignorableWhitespace
  1157.       */
  1158.     virtual void ignorableWhitespace
  1159.     (
  1160.         const   XMLCh* const    chars
  1161.         , const unsigned int    length
  1162.         , const bool            cdataSection
  1163.     );
  1164.     /**
  1165.       * This method allows the user installed Document Handler and
  1166.       * any advanced callback handlers to 'reset' themselves.
  1167.       */
  1168.     virtual void resetDocument();
  1169.     /**
  1170.       * This method is used to report the start of the parsing process.
  1171.       * The corresponding user installed SAX Document Handler's method
  1172.       * 'startDocument' is invoked.
  1173.       *
  1174.       * <p>If any advanced callback handlers are installed, then the
  1175.       * corresponding 'startDocument' method is also called.</p>
  1176.       *
  1177.       * @see DocumentHandler#startDocument
  1178.       */
  1179.     virtual void startDocument();
  1180.     /**
  1181.       * This method is used to report the start of an element. It is
  1182.       * called at the end of the element, by which time all attributes
  1183.       * specified are also parsed. The corresponding user installed
  1184.       * SAX Document Handler's method 'startElement' is invoked.
  1185.       *
  1186.       * <p>If any advanced callback handlers are installed, then the
  1187.       * corresponding 'startElement' method is also called.</p>
  1188.       *
  1189.       * @param elemDecl A const reference to the object containing element
  1190.       *                 declaration information.
  1191.       * @param urlId    An id referring to the namespace prefix, if
  1192.       *                 namespaces setting is switched on.
  1193.       * @param elemPrefix A const pointer to a Unicode string containing
  1194.       *                   the namespace prefix for this element. Applicable
  1195.       *                   only when namespace processing is enabled.
  1196.       * @param attrList  A const reference to the object containing the
  1197.       *                  list of attributes just scanned for this element.
  1198.       * @param attrCount A count of number of attributes in the list
  1199.       *                  specified by the parameter 'attrList'.
  1200.       * @param isEmpty  A flag indicating whether this is an empty element
  1201.       *                 or not.
  1202.       * @param isRoot   A flag indicating whether this element was the
  1203.       *                 root element.
  1204.       * @see DocumentHandler#startElement
  1205.       */
  1206.     virtual void startElement
  1207.     (
  1208.         const   XMLElementDecl&         elemDecl
  1209.         , const unsigned int            urlId
  1210.         , const XMLCh* const            elemPrefix
  1211.         , const RefVectorOf<XMLAttr>&   attrList
  1212.         , const unsigned int            attrCount
  1213.         , const bool                    isEmpty
  1214.         , const bool                    isRoot
  1215.     );
  1216.     /**
  1217.       * This method is used to indicate the start of an entity reference.
  1218.       *
  1219.       * <p>If any advanced callback handlers are installed, the
  1220.       * corresponding 'endEnityReference' method is invoked.</p>
  1221.       *
  1222.       * @param entDecl A const reference to the object containing the
  1223.       *                entity declaration information.
  1224.       */
  1225.     virtual void startEntityReference
  1226.     (
  1227.         const   XMLEntityDecl&  entDecl
  1228.     );
  1229.     /**
  1230.       * This method is used to report the XML decl scanned by the parser.
  1231.       * Refer to the XML specification to see the meaning of parameters.
  1232.       *
  1233.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1234.       * implementation.</font></b>
  1235.       *
  1236.       * @param versionStr A const pointer to a Unicode string representing
  1237.       *                   version string value.
  1238.       * @param encodingStr A const pointer to a Unicode string representing
  1239.       *                    the encoding string value.
  1240.       * @param standaloneStr A const pointer to a Unicode string
  1241.       *                      representing the standalone string value.
  1242.       * @param actualEncodingStr A const pointer to a Unicode string
  1243.       *                          representing the actual encoding string
  1244.       *                          value.
  1245.       */
  1246.     virtual void XMLDecl
  1247.     (
  1248.         const   XMLCh* const    versionStr
  1249.         , const XMLCh* const    encodingStr
  1250.         , const XMLCh* const    standaloneStr
  1251.         , const XMLCh* const    actualEncodingStr
  1252.     );
  1253.     //@}
  1254.     // -----------------------------------------------------------------------
  1255.     //  Implementation of the XMLErrorReporter interface
  1256.     // -----------------------------------------------------------------------
  1257.     /** @name Implementation of the XMLErrorReporter Interface. */
  1258.     //@{
  1259.     /**
  1260.       * This method is used to report back errors found while parsing the
  1261.       * XML file. The driver will call the corresponding user installed
  1262.       * SAX Error Handler methods: 'fatal', 'error', 'warning' depending
  1263.       * on the severity of the error. This classification is defined by
  1264.       * the XML specification.
  1265.       *
  1266.       * @param errCode An integer code for the error.
  1267.       * @param msgDomain A const pointer to an Unicode string representing
  1268.       *                  the message domain to use.
  1269.       * @param errType An enumeration classifying the severity of the error.
  1270.       * @param errorText A const pointer to an Unicode string representing
  1271.       *                  the text of the error message.
  1272.       * @param systemId  A const pointer to an Unicode string representing
  1273.       *                  the system id of the XML file where this error
  1274.       *                  was discovered.
  1275.       * @param publicId  A const pointer to an Unicode string representing
  1276.       *                  the public id of the XML file where this error
  1277.       *                  was discovered.
  1278.       * @param lineNum   The line number where the error occurred.
  1279.       * @param colNum    The column number where the error occurred.
  1280.       * @see ErrorHandler
  1281.       */
  1282.     virtual void error
  1283.     (
  1284.         const   unsigned int                errCode
  1285.         , const XMLCh* const                msgDomain
  1286.         , const XMLErrorReporter::ErrTypes  errType
  1287.         , const XMLCh* const                errorText
  1288.         , const XMLCh* const                systemId
  1289.         , const XMLCh* const                publicId
  1290.         , const unsigned int                lineNum
  1291.         , const unsigned int                colNum
  1292.     );
  1293.     /**
  1294.       * This method allows the user installed Error Handler
  1295.       * callback to 'reset' itself.
  1296.       *
  1297.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1298.       * implementation.</font></b>
  1299.       *
  1300.       */
  1301.     virtual void resetErrors();
  1302.     //@}
  1303.     // -----------------------------------------------------------------------
  1304.     //  Implementation of the XMLEntityHandler interface
  1305.     // -----------------------------------------------------------------------
  1306.     /** @name Implementation of the XMLEntityHandler Interface. */
  1307.     //@{
  1308.     /**
  1309.       * This method is used to indicate the end of parsing of an external
  1310.       * entity file.
  1311.       *
  1312.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1313.       * implementation.</font></b>
  1314.       *
  1315.       * @param inputSource A const reference to the InputSource object
  1316.       *                    which points to the XML file being parsed.
  1317.       * @see InputSource
  1318.       */
  1319.     virtual void endInputSource(const InputSource& inputSource);
  1320.     /**
  1321.       * This method allows an installed XMLEntityHandler to further
  1322.       * process any system id's of enternal entities encountered in
  1323.       * the XML file being parsed, such as redirection etc.
  1324.       *
  1325.       * <b><font color="#FF0000">This method always returns 'false'
  1326.       * for this SAX driver implementation.</font></b>
  1327.       *
  1328.       * @param systemId  A const pointer to an Unicode string representing
  1329.       *                  the system id scanned by the parser.
  1330.       * @param toFill    A pointer to a buffer in which the application
  1331.       *                  processed system id is stored.
  1332.       * @return 'true', if any processing is done, 'false' otherwise.
  1333.       */
  1334.     virtual bool expandSystemId
  1335.     (
  1336.         const   XMLCh* const    systemId
  1337.         ,       XMLBuffer&      toFill
  1338.     );
  1339.     /**
  1340.       * This method allows the installed XMLEntityHandler to reset
  1341.       * itself.
  1342.       *
  1343.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1344.       * implementation.</font></b>
  1345.       */
  1346.     virtual void resetEntities();
  1347.     /**
  1348.       * This method allows a user installed entity handler to further
  1349.       * process any pointers to external entities. The applications
  1350.       * can implement 'redirection' via this callback. The driver
  1351.       * should call the SAX EntityHandler 'resolveEntity' method.
  1352.       *
  1353.       * @param publicId A const pointer to a Unicode string representing the
  1354.       *                 public id of the entity just parsed.
  1355.       * @param systemId A const pointer to a Unicode string representing the
  1356.       *                 system id of the entity just parsed.
  1357.       * @return The value returned by the SAX resolveEntity method or
  1358.       *         NULL otherwise to indicate no processing was done.
  1359.       * @see EntityResolver
  1360.       */
  1361.     virtual InputSource* resolveEntity
  1362.     (
  1363.         const   XMLCh* const    publicId
  1364.         , const XMLCh* const    systemId
  1365.     );
  1366.     /**
  1367.       * This method is used to indicate the start of parsing an
  1368.       * external entity file.
  1369.       *
  1370.       * <b><font color="#FF0000">This method is a no-op for this SAX driver
  1371.       * implementation.</font></b>
  1372.       *
  1373.       * @param inputSource A const reference to the InputSource object
  1374.       *                    which points to the external entity
  1375.       *                    being parsed.
  1376.       */
  1377.     virtual void startInputSource(const InputSource& inputSource);
  1378.     //@}
  1379.     /** @name Deprecated Methods */
  1380.     //@{
  1381.     /**
  1382.       * This method returns the state of the parser's validation
  1383.       * handling flag which controls whether validation checks
  1384.       * are enforced or not.
  1385.       *
  1386.       * @return true, if the parser is currently configured to
  1387.       *         do validation, false otherwise.
  1388.       *
  1389.       * @see #setDoValidation
  1390.       */
  1391.     bool getDoValidation() const;
  1392.     /**
  1393.       * This method allows users to enable or disable the parser's validation
  1394.       * checks.
  1395.       *
  1396.       * <p>By default, the parser does not to any validation. The default
  1397.       * value is false.</p>
  1398.       *
  1399.       * @param newState The value specifying whether the parser should
  1400.       *                 do validity checks or not against the DTD in the
  1401.       *                 input XML document.
  1402.       *
  1403.       * @see #getDoValidation
  1404.       */
  1405.     void setDoValidation(const bool newState);
  1406.     //@}
  1407. protected :
  1408.     // -----------------------------------------------------------------------
  1409.     //  Unimplemented constructors and operators
  1410.     // -----------------------------------------------------------------------
  1411.     SAXParser(const SAXParser&);
  1412.     void operator=(const SAXParser&);
  1413.     // -----------------------------------------------------------------------
  1414.     //  Private data members
  1415.     //
  1416.     //  fAttrList
  1417.     //      A temporary implementation of the basic SAX attribute list
  1418.     //      interface. We use this one over and over on each startElement
  1419.     //      event to allow SAX-like access to the element attributes.
  1420.     //
  1421.     //  fDocHandler
  1422.     //      The installed SAX doc handler, if any. Null if none.
  1423.     //
  1424.     //  fDTDHandler
  1425.     //      The installed SAX DTD handler, if any. Null if none.
  1426.     //
  1427.     //  fElemDepth
  1428.     //      This is used to track the element nesting depth, so that we can
  1429.     //      know when we are inside content. This is so we can ignore char
  1430.     //      data outside of content.
  1431.     //
  1432.     //  fEntityResolver
  1433.     //      The installed SAX entity handler, if any. Null if none.
  1434.     //
  1435.     //  fErrorHandler
  1436.     //      The installed SAX error handler, if any. Null if none.
  1437.     //
  1438.     //  fAdvDHCount
  1439.     //  fAdvDHList
  1440.     //  fAdvDHListSize
  1441.     //      This is an array of pointers to XMLDocumentHandlers, which is
  1442.     //      how we see installed advanced document handlers. There will
  1443.     //      usually not be very many at all, so a simple array is used
  1444.     //      instead of a collection, for performance. It will grow if needed,
  1445.     //      but that is unlikely.
  1446.     //
  1447.     //      The count is how many handlers are currently installed. The size
  1448.     //      is how big the array itself is (for expansion purposes.) When
  1449.     //      count == size, is time to expand.
  1450.     //
  1451.     //  fParseInProgress
  1452.     //      This flag is set once a parse starts. It is used to prevent
  1453.     //      multiple entrance or reentrance of the parser.
  1454.     //
  1455.     //  fScanner
  1456.     //      The scanner being used by this parser. It is created internally
  1457.     //      during construction.
  1458.     //
  1459.     // -----------------------------------------------------------------------
  1460.     VecAttrListImpl         fAttrList;
  1461.     DocumentHandler*        fDocHandler;
  1462.     DTDHandler*             fDTDHandler;
  1463.     unsigned int            fElemDepth;
  1464.     EntityResolver*         fEntityResolver;
  1465.     ErrorHandler*           fErrorHandler;
  1466.     unsigned int            fAdvDHCount;
  1467.     XMLDocumentHandler**    fAdvDHList;
  1468.     unsigned int            fAdvDHListSize;
  1469.     bool                    fParseInProgress;
  1470.     XMLScanner*             fScanner;
  1471. };
  1472. // ---------------------------------------------------------------------------
  1473. //  SAXParser: Getter methods
  1474. // ---------------------------------------------------------------------------
  1475. inline DocumentHandler* SAXParser::getDocumentHandler()
  1476. {
  1477.     return fDocHandler;
  1478. }
  1479. inline const DocumentHandler* SAXParser::getDocumentHandler() const
  1480. {
  1481.     return fDocHandler;
  1482. }
  1483. inline EntityResolver* SAXParser::getEntityResolver()
  1484. {
  1485.     return fEntityResolver;
  1486. }
  1487. inline const EntityResolver* SAXParser::getEntityResolver() const
  1488. {
  1489.     return fEntityResolver;
  1490. }
  1491. inline ErrorHandler* SAXParser::getErrorHandler()
  1492. {
  1493.     return fErrorHandler;
  1494. }
  1495. inline const ErrorHandler* SAXParser::getErrorHandler() const
  1496. {
  1497.     return fErrorHandler;
  1498. }
  1499. inline const XMLScanner& SAXParser::getScanner() const
  1500. {
  1501.     return *fScanner;
  1502. }
  1503. #endif