DOMConfiguration.hpp
上传用户:zhuqijet
上传日期:2013-06-25
资源大小:10074k
文件大小:23k
源码类别:

词法分析

开发平台:

Visual C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 2003 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) 2001, 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. #if !defined(DOMCONFIGURATION_HPP)
  57. #define DOMCONFIGURATION_HPP
  58. //------------------------------------------------------------------------------------
  59. //  Includes
  60. //------------------------------------------------------------------------------------
  61. #include <xercesc/util/XMLString.hpp>
  62. XERCES_CPP_NAMESPACE_BEGIN
  63. /**
  64.  *   The DOMConfiguration interface represents the configuration of
  65.  *   a document  and  maintains  a  table of recognized parameters.
  66.  *   using  the   configuration,   it   is   possible   to   change
  67.  *   Document.normalizeDocument  behavior,  such  as replacing
  68.  *   CDATASection   nodes   with   Text  nodes  or
  69.  *   specifying  the  type  of the schema that must be used when the
  70.  *   validation of the Document is requested. DOMConfiguration
  71.  *   objects  are  also used in [DOM Level 3 Load and Save] in
  72.  *   the DOMBuilder and DOMWriter interfaces.
  73.  *
  74.  *   The  DOMConfiguration  distinguish  two  types  of  parameters:
  75.  *   boolean     (boolean    parameters)    and    DOMUserData
  76.  *   (parameters). The names used by the DOMConfiguration object are
  77.  *   defined  throughout  the  DOM Level 3 specifications. Names are
  78.  *   case-insensitives.   To   avoid   possible   conflicts,   as  a
  79.  *   convention,   names   referring   to   boolean  parameters  and
  80.  *   parameters defined outside the DOM specification should be made
  81.  *   unique.  Names  are  recommended  to  follow the XML name
  82.  *   production   rule   but   it   is   not  enforced  by  the  DOM
  83.  *   implementation.  DOM  Level 3 Core Implementations are required
  84.  *   to  recognize  all boolean parameters and parameters defined in
  85.  *   this  specification.  Each boolean parameter state or parameter
  86.  *   value may then be supported or not by the implementation. Refer
  87.  *   to  their  definition  to  know  if  a state or a value must be
  88.  *   supported or not.
  89.  *
  90.  *   Note: Parameters are similar to features and properties used in
  91.  *   SAX2 [SAX].
  92.  *
  93.  * Issue DOMConfiguration-1:
  94.  *         Can we rename boolean parameters to "flags"?
  95.  *
  96.  * Issue DOMConfiguration-2:
  97.  *         Are  boolean  parameters  and  parameters within the same
  98.  *         scope for uniqueness? Which exception should be raised by
  99.  *         setBooleanParameter("error-handler", true)?
  100.  *
  101.  *   The following list of parameters defined in the DOM:
  102.  *
  103.  * "error-handler"
  104.  *         [required]
  105.  *         A   DOMErrorHandler   object.   If   an   error  is
  106.  *         encountered in the document, the implementation will call
  107.  *         back  the  DOMErrorHandler  registered  using  this
  108.  *         parameter.
  109.  *         When  called, DOMError.relatedData will contain the
  110.  *         closest   node   to  where  the  error  occured.  If  the
  111.  *         implementation  is unable to determine the node where the
  112.  *         error occurs, DOMError.relatedData will contain the
  113.  *         Document  node.  Mutations  to  the  document  from
  114.  *         within  an  error  handler  will result in implementation
  115.  *         dependent behaviour.
  116.  *
  117.  *       Issue DOMConfiguration-4:
  118.  *               Should   we   say  non  "readonly"  operations  are
  119.  *               implementation dependent instead?
  120.  *               Resolution:  Removed:  "or re-invoking a validation
  121.  *               operation".
  122.  *
  123.  * "schema-type"
  124.  *         [optional]
  125.  *         A  DOMString  object containing an absolute URI and
  126.  *         representing  the  type  of  the  schema language used to
  127.  *         validate   a  document  against.  Note  that  no  lexical
  128.  *         checking is done on the absolute URI.
  129.  *         If  this  parameter  is  not  set, a default value may be
  130.  *         provided  by  the  implementation,  based  on  the schema
  131.  *         languages  supported  and  on the schema language used at
  132.  *         load time.
  133.  *
  134.  *         Note:   For   XML   Schema  [XML  Schema  Part  1],
  135.  *         applications must use the value
  136.  *         "http://www.w3.org/2001/XMLSchema".     For    XML    DTD
  137.  *         [XML   1.0],   applications   must  use  the  value
  138.  *         "http://www.w3.org/TR/REC-xml".  Other  schema  languages
  139.  *         are  outside  the  scope  of the W3C and therefore should
  140.  *         recommend an absolute URI in order to use this method.
  141.  *
  142.  * "schema-location"
  143.  *         [optional]
  144.  *         A  DOMString  object  containing  a  list  of URIs,
  145.  *         separated   by  white  spaces  (characters  matching  the
  146.  *         nonterminal  production  S  defined  in section 2.3
  147.  *         [XML  1.0]),  that  represents  the schemas against
  148.  *         which  validation  should  occur.  The  types  of schemas
  149.  *         referenced  in  this  list  must match the type specified
  150.  *         with   schema-type,   otherwise   the   behaviour  of  an
  151.  *         implementation  is  undefined.  If the schema type is XML
  152.  *         Schema  [XML  Schema  Part  1], only one of the XML
  153.  *         Schemas in the list can be with no namespace.
  154.  *         If  validation  occurs  against a namespace aware schema,
  155.  *         i.e.  XML  Schema,  and  the  targetNamespace of a schema
  156.  *         (specified    using    this    property)    matches   the
  157.  *         targetNamespace  of  a  schema  occurring in the instance
  158.  *         document,  i.e  in  schemaLocation  attribute, the schema
  159.  *         specified  by  the  user using this property will be used
  160.  *         (i.e.,  in XML Schema the schemaLocation attribute in the
  161.  *         instance  document  or  on  the  import  element  will be
  162.  *         effectively ignored).
  163.  *
  164.  *         Note:  It is illegal to set the schema-location parameter
  165.  *         if  the  schema-type  parameter  value  is not set. It is
  166.  *         strongly  recommended that DOMInputSource.baseURI will be
  167.  *         set,  so  that an implementation can successfully resolve
  168.  *         any external entities referenced.
  169.  *
  170.  *   The  following list of boolean parameters (features) defined in
  171.  *   the DOM:
  172.  *
  173.  * "canonical-form"
  174.  *
  175.  *       true
  176.  *               [optional]
  177.  *               Canonicalize  the  document  according to the rules
  178.  *               specified  in [Canonical XML]. Note that this
  179.  *               is  limited  to what can be represented in the DOM.
  180.  *               In particular, there is no way to specify the order
  181.  *               of the attributes in the DOM.
  182.  *
  183.  *             Issue normalizationFeature-14:
  184.  *                     What  happen  to  other  features?  are  they
  185.  *                     ignored? if yes, how do you know if a feature
  186.  *                     is ignored?
  187.  *
  188.  *       false
  189.  *               [required] (default)
  190.  *               Do not canonicalize the document.
  191.  *
  192.  * "cdata-sections"
  193.  *
  194.  *       true
  195.  *               [required] (default)
  196.  *               Keep CDATASection nodes in the document.
  197.  *
  198.  *             Issue normalizationFeature-11:
  199.  *                     Name  does not work really well in this case.
  200.  *                     ALH     suggests     renaming     this     to
  201.  *                     "cdata-sections".  It works for both load and
  202.  *                     save.
  203.  *                     Resolution:  Renamed as suggested. (Telcon 27
  204.  *                     Jan 2002).
  205.  *
  206.  *       false
  207.  *               [required]
  208.  *               Transform  CDATASection nodes in the document
  209.  *               into  Text  nodes. The new Text node is
  210.  *               then combined with any adjacent Text node.
  211.  *
  212.  * "comments"
  213.  *
  214.  *       true
  215.  *               [required] (default)
  216.  *               Keep Comment nodes in the document.
  217.  *
  218.  *       false
  219.  *               [required]
  220.  *               Discard Comment nodes in the Document.
  221.  *
  222.  * "datatype-normalization"
  223.  *
  224.  *       true
  225.  *               [required]
  226.  *               Exposed normalized values in the tree.
  227.  *
  228.  *             Issue normalizationFeature-8:
  229.  *                     We should define "datatype normalization".
  230.  *                     Resolution:  DTD  normalization  always apply
  231.  *                     because  it's  part  of  XML 1.0. Clarify the
  232.  *                     spec. (Telcon 27 Jan 2002).
  233.  *
  234.  *       false
  235.  *               [required] (default)
  236.  *               Do not perform normalization on the tree.
  237.  *
  238.  * "discard-default-content"
  239.  *
  240.  *       true
  241.  *               [required] (default)
  242.  *               Use   whatever   information   available   to   the
  243.  *               implementation (i.e. XML schema, DTD, the specified
  244.  *               flag on Attr nodes, and so on) to decide what
  245.  *               attributes  and content should be discarded or not.
  246.  *               Note that the specified flag on Attr nodes in
  247.  *               itself  is not always reliable, it is only reliable
  248.  *               when  it  is set to false since the only case where
  249.  *               it  can  be  set  to  false is if the attribute was
  250.  *               created  by the implementation. The default content
  251.  *               won't be removed if an implementation does not have
  252.  *               any information available.
  253.  *
  254.  *             Issue normalizationFeature-2:
  255.  *                     How  does  exactly  work?  What's the comment
  256.  *                     about level 1 implementations?
  257.  *                     Resolution:  Remove  "Level 1" (Telcon 16 Jan
  258.  *                     2002).
  259.  *
  260.  *       false
  261.  *               [required]
  262.  *               Keep all attributes and all content.
  263.  *
  264.  * "entities"
  265.  *
  266.  *       true
  267.  *               [required]
  268.  *               Keep  EntityReference  and Entity nodes
  269.  *               in the document.
  270.  *
  271.  *             Issue normalizationFeature-9:
  272.  *                     How does that interact with
  273.  *                     expand-entity-references?     ALH    suggests
  274.  *                     consolidating  the  two  to  a single feature
  275.  *                     called  "entity-references" that is used both
  276.  *                     for load and save.
  277.  *                     Resolution:  Consolidate both features into a
  278.  *                     single  feature called 'entities'. (Telcon 27
  279.  *                     Jan 2002).
  280.  *
  281.  *       false
  282.  *               [required] (default)
  283.  *               Remove  all  EntityReference and Entity
  284.  *               nodes   from   the  document,  putting  the  entity
  285.  *               expansions  directly  in  their  place.  Text
  286.  *               nodes     are     into    "normal"    form.    Only
  287.  *               EntityReference nodes to non-defined entities
  288.  *               are kept in the document.
  289.  *
  290.  * "infoset"
  291.  *
  292.  *       true
  293.  *               [required]
  294.  *               Only  keep  in the document the information defined
  295.  *               in  the  XML Information Set [XML Information
  296.  *               set].
  297.  *               This   forces  the  following  features  to  false:
  298.  *               namespace-declarations,         validate-if-schema,
  299.  *               entities, datatype-normalization, cdata-sections.
  300.  *               This   forces   the  following  features  to  true:
  301.  *               whitespace-in-element-content,            comments,
  302.  *               namespaces.
  303.  *               Other  features  are  not  changed unless explicity
  304.  *               specified in the description of the features.
  305.  *               Note  that  querying  this  feature with getFeature
  306.  *               returns   true  only  if  the  individual  features
  307.  *               specified above are appropriately set.
  308.  *
  309.  *             Issue normalizationFeature-12:
  310.  *                     Name  doesn't  work  well  here. ALH suggests
  311.  *                     renaming    this   to   limit-to-infoset   or
  312.  *                     match-infoset, something like that.
  313.  *                     Resolution:  Renamed 'infoset' (Telcon 27 Jan
  314.  *                     2002).
  315.  *
  316.  *       false
  317.  *               Setting infoset to false has no effect.
  318.  *
  319.  *             Issue normalizationFeature-13:
  320.  *                     Shouldn't  we  change  this  to  setting  the
  321.  *                     relevant options back to their default value?
  322.  *                     Resolution:   No,   this   is   more  like  a
  323.  *                     convenience  function, it's better to keep it
  324.  *                     simple. (F2F 28 Feb 2002).
  325.  *
  326.  * "namespaces"
  327.  *
  328.  *       true
  329.  *               [required] (default)
  330.  *               Perform  the  namespace  processing  as  defined in
  331.  *               [XML Namespaces].
  332.  *
  333.  *       false
  334.  *               [optional]
  335.  *               Do not perform the namespace processing.
  336.  *
  337.  * "namespace-declarations"
  338.  *
  339.  *       true
  340.  *               [required] (default)
  341.  *               Include namespace declaration attributes, specified
  342.  *               or  defaulted  from  the  schema or the DTD, in the
  343.  *               document.  See  also  the  section  Declaring
  344.  *               Namespaces in [XML Namespaces].
  345.  *
  346.  *       false
  347.  *               [required]
  348.  *               Discard  all  namespace declaration attributes. The
  349.  *               Namespace   prefixes  are  retained  even  if  this
  350.  *               feature is set to false.
  351.  *
  352.  * "normalize-characters"
  353.  *
  354.  *       true
  355.  *               [optional]
  356.  *               Perform   the   W3C   Text   Normalization  of  the
  357.  *               characters [CharModel] in the document.
  358.  *
  359.  *       false
  360.  *               [required] (default)
  361.  *               Do not perform character normalization.
  362.  *
  363.  * "split-cdata-sections"
  364.  *
  365.  *       true
  366.  *               [required] (default)
  367.  *               Split  CDATA  sections containing the CDATA section
  368.  *               termination  marker  ']]>'. When a CDATA section is
  369.  *               split a warning is issued.
  370.  *
  371.  *       false
  372.  *               [required]
  373.  *               Signal an error if a CDATASection contains an
  374.  *               unrepresentable character.
  375.  *
  376.  * "validate"
  377.  *
  378.  *       true
  379.  *               [optional]
  380.  *               Require  the  validation against a schema (i.e. XML
  381.  *               schema,  DTD,  any  other type or representation of
  382.  *               schema)  of  the document as it is being normalized
  383.  *               as defined by [XML 1.0]. If validation errors
  384.  *               are  found,  or  no  schema  was  found,  the error
  385.  *               handler  is  notified.  Note  also  that normalized
  386.  *               values  will  not  be exposed to the schema in used
  387.  *               unless the feature datatype-normalization is true.
  388.  *
  389.  *               Note:  validate-if-schema and validate are mutually
  390.  *               exclusive, setting one of them to true will set the
  391.  *               other one to false.
  392.  *
  393.  *       false
  394.  *               [required] (default)
  395.  *               Only  XML  1.0  non-validating  processing  must be
  396.  *               done.  Note  that  validation might still happen if
  397.  *               validate-if-schema is true.
  398.  *
  399.  * "validate-if-schema"
  400.  *
  401.  *       true
  402.  *               [optional]
  403.  *               Enable  validation  only  if  a declaration for the
  404.  *               document  element  can  be  found (independently of
  405.  *               where  it  is  found,  i.e. XML schema, DTD, or any
  406.  *               other   type   or  representation  of  schema).  If
  407.  *               validation  errors  are found, the error handler is
  408.  *               notified. Note also that normalized values will not
  409.  *               be exposed to the schema in used unless the feature
  410.  *               datatype-normalization is true.
  411.  *
  412.  *               Note:  validate-if-schema and validate are mutually
  413.  *               exclusive, setting one of them to true will set the
  414.  *               other one to false.
  415.  *
  416.  *       false
  417.  *               [required] (default)
  418.  *               No  validation  should be performed if the document
  419.  *               has  a  schema.  Note  that  validation  must still
  420.  *               happen if validate is true.
  421.  *
  422.  * "whitespace-in-element-content"
  423.  *
  424.  *       true
  425.  *               [required] (default)
  426.  *               Keep all white spaces in the document.
  427.  *
  428.  *             Issue normalizationFeature-15:
  429.  *                     How   does   this   feature   interact   with
  430.  *                     "validate" and
  431.  *                     Text.isWhitespaceInElementContent.
  432.  *                     Resolution:  issue  no  longer  relevant (f2f
  433.  *                     october 2002).
  434.  *
  435.  *       false
  436.  *               [optional]
  437.  *               Discard   white  space  in  element  content  while
  438.  *               normalizing.  The implementation is expected to use
  439.  *               the isWhitespaceInElementContent flag on Text
  440.  *               nodes to determine if a text node should be written
  441.  *               out or not.
  442.  *
  443.  *   The  resolutions  of  entities  is done using Document.baseURI.
  444.  *   However,  when  the  features "LS-Load" or "LS-Save" defined in
  445.  *   [DOM  Level  3  Load  and  Save] are supported by the DOM
  446.  *   implementation,  the  parameter  "entity-resolver"  can also be
  447.  *   used  on  DOMConfiguration  objects  attached to Document
  448.  *   nodes. If this parameter is set,
  449.  *   Document.normalizeDocument   will   invoke   the   entity
  450.  *   resolver instead of using Document.baseURI.
  451.  */
  452. class CDOM_EXPORT DOMConfiguration
  453. {
  454. protected:
  455.     //-----------------------------------------------------------------------------------
  456.     //  Constructor
  457.     //-----------------------------------------------------------------------------------
  458.     /** @name Hidden constructors */
  459.     //@{
  460.     DOMConfiguration() {};
  461.     DOMConfiguration(const DOMConfiguration &) {};
  462.     DOMConfiguration & operator = (const DOMConfiguration &) {return *this;};
  463.     //@}
  464. public:
  465.     // -----------------------------------------------------------------------
  466.     //  Setter methods
  467.     // -----------------------------------------------------------------------
  468.     
  469.     /** Set the value of a parameter. 
  470.      * @param name The name of the parameter to set.
  471.      * @param value The new value or null if the user wishes to unset the 
  472.      * parameter. While the type of the value parameter is defined as 
  473.      * <code>DOMUserData</code>, the object type must match the type defined
  474.      * by the definition of the parameter. For example, if the parameter is 
  475.      * "error-handler", the value must be of type <code>DOMErrorHandler</code>
  476.      * @exception DOMException (NOT_SUPPORTED_ERR) Raised when the 
  477.      * parameter name is recognized but the requested value cannot be set.
  478.      * @exception DOMException (NOT_FOUND_ERR) Raised when the 
  479.      * parameter name is not recognized.
  480.      * @since DOM level 3
  481.      **/
  482.     virtual void setParameter(const XMLCh* name, const void* value) = 0;
  483.     // -----------------------------------------------------------------------
  484.     //  Getter methods
  485.     // -----------------------------------------------------------------------
  486.     /** Return the value of a parameter if known. 
  487.      * @param name The name of the parameter.
  488.      * @return The current object associated with the specified parameter or 
  489.      * null if no object has been associated or if the parameter is not 
  490.      * supported.
  491.      * @exception DOMException (NOT_FOUND_ERR) Raised when the i
  492.      * boolean parameter 
  493.      * name is not recognized.
  494.      * @since DOM level 3
  495.      **/    
  496.     virtual const void* getParameter(const XMLCh* name) const = 0;
  497.                                         
  498.     // -----------------------------------------------------------------------
  499.     //  Query methods
  500.     // -----------------------------------------------------------------------
  501.     /** Check if setting a parameter to a specific value is supported. 
  502.      * @param name The name of the parameter to check.
  503.      * @param value An object. if null, the returned value is true.
  504.      * @return true if the parameter could be successfully set to the specified 
  505.      * value, or false if the parameter is not recognized or the requested value 
  506.      * is not supported. This does not change the current value of the parameter 
  507.      * itself.
  508.      * @since DOM level 3
  509.      **/
  510.     virtual bool canSetParameter(const XMLCh* name, const void* value) const = 0;
  511. };
  512. XERCES_CPP_NAMESPACE_END
  513. #endif 
  514. /**
  515.  * End of file DOMConfiguration.hpp
  516.  */