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

xml/soap/webservice

开发平台:

C/C++

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  * 
  4.  * Copyright (c) 1999-2000 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: XMLEntityDecl.hpp,v $
  58.  * Revision 1.6  2000/02/24 20:00:23  abagchi
  59.  * Swat for removing Log from API docs
  60.  *
  61.  * Revision 1.5  2000/02/16 23:03:48  roddey
  62.  * More documentation updates
  63.  *
  64.  * Revision 1.4  2000/02/16 21:42:58  aruna1
  65.  * API Doc++ summary changes in
  66.  *
  67.  * Revision 1.3  2000/02/15 01:21:30  roddey
  68.  * Some initial documentation improvements. More to come...
  69.  *
  70.  * Revision 1.2  2000/02/06 07:47:48  rahulj
  71.  * Year 2K copyright swat.
  72.  *
  73.  * Revision 1.1.1.1  1999/11/09 01:08:32  twl
  74.  * Initial checkin
  75.  *
  76.  * Revision 1.2  1999/11/08 20:44:38  rahul
  77.  * Swat for adding in Product name and CVS comment log variable.
  78.  *
  79.  */
  80. #if !defined(XMLENTITYDECL_HPP)
  81. #define XMLENTITYDECL_HPP
  82. #include <util/XMLString.hpp>
  83. /**
  84.  *  This class defines that core information that defines an XML entity, no
  85.  *  matter what validator is used. Each validator will create a derivative
  86.  *  of this class which adds any extra information it requires.
  87.  *
  88.  *  This class supports keyed collection semantics via the getKey() method
  89.  *  which extracts the key field, the entity name in this case. The name will
  90.  *  have whatever form is deemed appropriate for the type of validator in
  91.  *  use.
  92.  *
  93.  *  When setting the fields of this class, you must make sure that you do
  94.  *  not set conflicting values. For instance, an internal entity cannot have
  95.  *  a notation name. And an external entity cannot have a value string.
  96.  *  These rules are defined by the XML specification. In most cases, these
  97.  *  objects are created by validator objects as they parse a DTD or Schema
  98.  *  or whatever, at which time they confirm the correctness of the data before
  99.  *  creating the entity decl object.
  100.  */
  101. class XMLPARSER_EXPORT XMLEntityDecl
  102. {
  103. public:
  104.     // -----------------------------------------------------------------------
  105.     //  Constructors and Destructor
  106.     // -----------------------------------------------------------------------
  107.     /** @name Constructors */
  108.     //@{
  109.     
  110.     /**
  111.       *  Deafult Constructor
  112.       */
  113.     XMLEntityDecl();
  114.     /** Constructor with a const entity name
  115.       *
  116.       * @param  entName The new name to give to this entity.
  117.       */
  118.     XMLEntityDecl
  119.     (
  120.         const   XMLCh* const    entName
  121.     );
  122.     
  123.     /**
  124.       * Constructor with a const entity name and value
  125.       *
  126.       * @param  entName The new name to give to this entity.
  127.       * @param  value   The new value to give to this entity name.
  128.       */
  129.     XMLEntityDecl
  130.     (
  131.         const   XMLCh* const    entName
  132.         , const XMLCh* const    value
  133.     );
  134.     /**
  135.       * Constructor with a const entity name and single XMLCh value
  136.       *
  137.       * @param  entName The new name to give to this entity.
  138.       * @param  value   The new value to give to this entity name.
  139.       */
  140.     XMLEntityDecl
  141.     (
  142.         const   XMLCh* const    entName
  143.         , const XMLCh           value
  144.     );
  145.     //@}
  146.     /** @name Destructor */
  147.     //@{
  148.     /**
  149.       *  Default destructor
  150.       */
  151.     virtual ~XMLEntityDecl();
  152.     //@}
  153.     // -----------------------------------------------------------------------
  154.     //  Virtual entity decl interface
  155.     // -----------------------------------------------------------------------
  156.     /** @name The pure virtual methods in this interface. */
  157.     //@{
  158.     /** Get the 'declared in internal subset' flag
  159.       *
  160.       * Gets the state of the flag which indicates whether the entity was
  161.       * declared in the internal or external subset. Some structural 
  162.       * description languages might not have an internal subset concept, in
  163.       * which case this will always return false.
  164.       */
  165.     virtual bool getDeclaredInIntSubset() const = 0;
  166.     /** Get the 'is parameter entity' flag
  167.       *
  168.       * Gets the state of the flag which indicates whether this entity is
  169.       * a parameter entity. If not, then its a general entity.
  170.       */
  171.     virtual bool getIsParameter() const = 0;
  172.     /** Get the 'is special char entity' flag
  173.       *
  174.       * Gets the state of the flag that indicates whether this entity is
  175.       * one of the special, intrinsically supported character entities.
  176.       */
  177.     virtual bool getIsSpecialChar() const = 0;
  178.     //@}
  179.     // -----------------------------------------------------------------------
  180.     //  Getter methods
  181.     // -----------------------------------------------------------------------
  182.     /** @name Getter methods */
  183.     //@{
  184.     /**
  185.       * Gets the pool id of this entity. Validators maintain all decls in 
  186.       * pools, from which they can be quickly extracted via id.
  187.       */
  188.     unsigned int getId() const;
  189.     /**
  190.       * Returns a const pointer to the name of this entity decl. This name
  191.       * will be in whatever format is appropriate for the type of validator
  192.       * in use.
  193.       */
  194.     const XMLCh* getName() const;
  195.     /**
  196.       * Gets the notation name, if any, declared for this entity. If this
  197.       * entity is not a notation type entity, it will be a null pointer.
  198.       */
  199.     const XMLCh* getNotationName() const;
  200.     /**
  201.       * Gets the public id declared for this entity. Public ids are optional
  202.       * so it can be a null pointer.
  203.       */
  204.     const XMLCh* getPublicId() const;
  205.     /**
  206.       * Gets the system id declared for this entity. The system id is required
  207.       * so this method should never return a null pointers.
  208.       */
  209.     const XMLCh* getSystemId() const;
  210.     /**
  211.       * This method returns the value of an internal entity. If this is not
  212.       * an internal entity (i.e. its external), then this will be a null
  213.       * pointer.
  214.       */
  215.     const XMLCh* getValue() const;
  216.     /**
  217.      *  This method returns the number of characters in the value returned
  218.      *  by getValue(). If this entity is external, this will be zero since
  219.      *  an external entity has no internal value.
  220.      */
  221.     unsigned int getValueLen() const;
  222.     /**
  223.       * Indicates that this entity is an external entity. If not, then it is
  224.       * assumed to be an internal entity, suprise.
  225.       */
  226.     bool isExternal() const;
  227.     /**
  228.       * Indicates whether this entity is unparsed. This is meaningless for
  229.       * internal entities. Some external entities are unparsed in that they
  230.       * refer to something other than XML source.
  231.       */
  232.     bool isUnparsed() const;
  233.     //@}
  234.     // -----------------------------------------------------------------------
  235.     //  Setter methods
  236.     // -----------------------------------------------------------------------
  237.     /** @name Setter methods */
  238.     //@{
  239.     /**
  240.      *  This method will set the entity name. The format of this name is
  241.      *  defined by the particular validator in use, since it will be the
  242.      *  one who creates entity definitions as it parses the DTD, Schema,
  243.      *  ect...
  244.      *
  245.      *  @param  entName   The new name to give to this entity.
  246.      */
  247.     void setName
  248.     (
  249.         const   XMLCh* const    entName
  250.     );
  251.     /**
  252.      *  This method will set the notation name for this entity. By setting
  253.      *  this, you are indicating that this is an unparsed external entity.
  254.      *
  255.      *  @param  newName   The new notation name to give to this entity.
  256.      */
  257.     void setNotationName(const XMLCh* const newName);
  258.     /**
  259.      *  This method will set a new public id on this entity. The public id
  260.      *  has no particular form and is purely for client consumption.
  261.      *
  262.      *  @param  newId     The new public id to give to this entity.
  263.      */
  264.     void setPublicId(const XMLCh* const newId);
  265.     /**
  266.      *  This method will set a new sysetm id on this entity. This will
  267.      *  then control where the source for this entity lives. If it is
  268.      *  an internal entity, then the system id is only for bookkeeping
  269.      *  purposes, and to allow any external entities referenced from
  270.      *  within the entity to be correctly resolved.
  271.      *
  272.      *  @param  newId     The new system id to give to the entity.
  273.      */
  274.     void setSystemId(const XMLCh* const newId);
  275.     /**
  276.      *  This method will set a new value for this entity. This is only
  277.      *  valid if the entity is to be an internal entity. By setting this
  278.      *  field, you are indicating that the entity is internal.
  279.      *
  280.      *  @param  newValue  The new value to give to this entity.
  281.      */
  282.     void setValue(const XMLCh* const newValue);
  283.     //@}
  284.     /* For internal use only */
  285.     void setId(const unsigned int newId);
  286.     // -----------------------------------------------------------------------
  287.     //  Support named pool syntax
  288.     // -----------------------------------------------------------------------
  289.     /** @name Setter methods */
  290.     //@{
  291.     /**
  292.       * This method allows objects of this class to be used within a standard
  293.       * keyed collection used commonly within the parser system. The collection
  294.       * calls this method to get the key (usually to hash it) by which the
  295.       * object is to be stored.
  296.       */
  297.     const XMLCh* getKey() const;
  298.     //@}
  299. private :
  300.     // -----------------------------------------------------------------------
  301.     //  Unimplemented constructors and operators
  302.     // -----------------------------------------------------------------------
  303.     XMLEntityDecl(const XMLEntityDecl&);
  304.     void operator=(XMLEntityDecl&);
  305.     // -----------------------------------------------------------------------
  306.     //  XMLEntityDecl: Private helper methods
  307.     // -----------------------------------------------------------------------
  308.     void cleanUp();
  309.     // -----------------------------------------------------------------------
  310.     //  Private data members
  311.     //
  312.     //  fId
  313.     //      This is the unique id given to this entity decl.
  314.     //
  315.     //  fName
  316.     //      The name of the enitity. Entity names are never namespace based.
  317.     //
  318.     //  fNotationName
  319.     //      The optional notation of the entity. If there was none, then its
  320.     //      empty.
  321.     //
  322.     //  fPublicId
  323.     //      The public id of the entity, which can be empty.
  324.     //
  325.     //  fSystemId
  326.     //      The system id of the entity.
  327.     //
  328.     //  fValue
  329.     //  fValueLen
  330.     //      The entity's value and length, which is only valid if its an
  331.     //      internal style entity.
  332.     // -----------------------------------------------------------------------
  333.     unsigned int    fId;
  334. XMLCh*          fName;
  335.     XMLCh*          fNotationName;
  336.     XMLCh*          fPublicId;
  337.     XMLCh*          fSystemId;
  338.     XMLCh*          fValue;
  339.     unsigned int    fValueLen;
  340. };
  341. // ---------------------------------------------------------------------------
  342. //  XMLEntityDecl: Getter methods
  343. // ---------------------------------------------------------------------------
  344. inline unsigned int XMLEntityDecl::getId() const
  345. {
  346.     return fId;
  347. }
  348. inline const XMLCh* XMLEntityDecl::getName() const
  349. {
  350.     return fName;
  351. }
  352. inline const XMLCh* XMLEntityDecl::getNotationName() const
  353. {
  354.     return fNotationName;
  355. }
  356. inline const XMLCh* XMLEntityDecl::getPublicId() const
  357. {
  358.     return fPublicId;
  359. }
  360. inline const XMLCh* XMLEntityDecl::getSystemId() const
  361. {
  362.     return fSystemId;
  363. }
  364. inline const XMLCh* XMLEntityDecl::getValue() const
  365. {
  366.     return fValue;
  367. }
  368. inline unsigned int XMLEntityDecl::getValueLen() const
  369. {
  370.     return fValueLen;
  371. }
  372. inline bool XMLEntityDecl::isExternal() const
  373. {
  374.     // If it has a system or public id, its external
  375.     return ((fPublicId != 0) || (fSystemId != 0));
  376. }
  377. inline bool XMLEntityDecl::isUnparsed() const
  378. {
  379.     // If it has a notation, its unparsed
  380.     return (fNotationName != 0);
  381. }
  382. // ---------------------------------------------------------------------------
  383. //  XMLEntityDecl: Setter methods
  384. // ---------------------------------------------------------------------------
  385. inline void XMLEntityDecl::setId(const unsigned int newId)
  386. {
  387.     fId = newId;
  388. }
  389. inline void XMLEntityDecl::setNotationName(const XMLCh* const newName)
  390. {
  391.     delete [] fNotationName;
  392.     fNotationName = XMLString::replicate(newName);
  393. }
  394. inline void XMLEntityDecl::setPublicId(const XMLCh* const newId)
  395. {
  396.     delete [] fPublicId;
  397.     fPublicId = XMLString::replicate(newId);
  398. }
  399. inline void XMLEntityDecl::setSystemId(const XMLCh* const newId)
  400. {
  401.     delete [] fSystemId;
  402.     fSystemId = XMLString::replicate(newId);
  403. }
  404. inline void XMLEntityDecl::setValue(const XMLCh* const newValue)
  405. {
  406.     delete [] fValue;
  407.     fValue = XMLString::replicate(newValue);
  408.     fValueLen = XMLString::stringLen(newValue);
  409. }
  410. // ---------------------------------------------------------------------------
  411. //  XMLEntityDecl: Support named pool syntax
  412. // ---------------------------------------------------------------------------
  413. inline const XMLCh* XMLEntityDecl::getKey() const
  414. {
  415.     return fName;
  416. }
  417. #endif