http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Readme
Download
Installation
Build

API Docs
Samples
Schema

FAQs
Programming
Migration

Releases
Bug-Reporting
Feedback

Y2K Compliance
PDF Document

CVS Repository
Mail Archive

API Docs for SAX and DOM
 

Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

XMLAttDef.hpp

Go to the documentation of this file.
00001 /*
00002  * The Apache Software License, Version 1.1
00003  *
00004  * Copyright (c) 1999-2001 The Apache Software Foundation.  All rights
00005  * reserved.
00006  *
00007  * Redistribution and use in source and binary forms, with or without
00008  * modification, are permitted provided that the following conditions
00009  * are met:
00010  *
00011  * 1. Redistributions of source code must retain the above copyright
00012  *    notice, this list of conditions and the following disclaimer.
00013  *
00014  * 2. Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in
00016  *    the documentation and/or other materials provided with the
00017  *    distribution.
00018  *
00019  * 3. The end-user documentation included with the redistribution,
00020  *    if any, must include the following acknowledgment:
00021  *       "This product includes software developed by the
00022  *        Apache Software Foundation (http://www.apache.org/)."
00023  *    Alternately, this acknowledgment may appear in the software itself,
00024  *    if and wherever such third-party acknowledgments normally appear.
00025  *
00026  * 4. The names "Xerces" and "Apache Software Foundation" must
00027  *    not be used to endorse or promote products derived from this
00028  *    software without prior written permission. For written
00029  *    permission, please contact apache\@apache.org.
00030  *
00031  * 5. Products derived from this software may not be called "Apache",
00032  *    nor may "Apache" appear in their name, without prior written
00033  *    permission of the Apache Software Foundation.
00034  *
00035  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
00036  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
00037  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
00038  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
00039  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00040  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00041  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
00042  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
00043  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
00044  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
00045  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00046  * SUCH DAMAGE.
00047  * ====================================================================
00048  *
00049  * This software consists of voluntary contributions made by many
00050  * individuals on behalf of the Apache Software Foundation, and was
00051  * originally based on software copyright (c) 1999, International
00052  * Business Machines, Inc., http://www.ibm.com .  For more information
00053  * on the Apache Software Foundation, please see
00054  * <http://www.apache.org/>.
00055  */
00056 
00057 /*
00058  * $Log: XMLAttDef.hpp,v $
00059  * Revision 1.12  2001/08/09 15:23:37  knoaman
00060  * add support for <anyAttribute> declaration.
00061  *
00062  * Revision 1.11  2001/06/21 14:25:26  knoaman
00063  * Fix for bug 1946
00064  *
00065  * Revision 1.10  2001/05/11 13:25:31  tng
00066  * Copyright update.
00067  *
00068  * Revision 1.9  2001/02/27 18:48:20  tng
00069  * Schema: Add SchemaAttDef, SchemaElementDecl, SchemaAttDefList.
00070  *
00071  * Revision 1.8  2000/12/14 18:49:56  tng
00072  * Fix API document generation warning: "Warning: end of member group without matching begin"
00073  *
00074  * Revision 1.7  2000/11/30 18:22:38  andyh
00075  * reuseValidator - fix bugs (spurious errors) that occured on reuse due to
00076  * pools already containing some items.  Fixed by Tinny Ng.
00077  *
00078  * Revision 1.6  2000/07/07 22:23:38  jpolast
00079  * remove useless getKey() functions.
00080  *
00081  * Revision 1.5  2000/02/24 20:00:22  abagchi
00082  * Swat for removing Log from API docs
00083  *
00084  * Revision 1.4  2000/02/16 23:03:48  roddey
00085  * More documentation updates
00086  *
00087  * Revision 1.3  2000/02/15 01:21:30  roddey
00088  * Some initial documentation improvements. More to come...
00089  *
00090  * Revision 1.2  2000/02/06 07:47:46  rahulj
00091  * Year 2K copyright swat.
00092  *
00093  * Revision 1.1.1.1  1999/11/09 01:08:27  twl
00094  * Initial checkin
00095  *
00096  * Revision 1.2  1999/11/08 20:44:34  rahul
00097  * Swat for adding in Product name and CVS comment log variable.
00098  *
00099  */
00100 
00101 #if !defined(ATTDEF_HPP)
00102 #define ATTDEF_HPP
00103 
00104 #include <util/XMLString.hpp>
00105 
00106 class XMLAttr;
00107 
00126 class  XMLAttDef
00127 {
00128 public:
00129     // -----------------------------------------------------------------------
00130     //  Class specific types
00131     //
00132     //  AttTypes
00133     //      The list of possible types that an attribute can have, according
00134     //      to the XML 1.0 spec and schema.
00135     //
00136     //  DefAttTypes
00137     //      The modifiers that an attribute decl can have, which indicates
00138     //      whether instances of that attributes are required, implied, etc..
00139     //
00140     //  CreateReasons
00141     //      This type is used to store how an attribute declaration got into
00142     //      the elementdecl's attribute pool.
00143     //
00144     // -----------------------------------------------------------------------
00145     enum AttTypes
00146     {
00147         CData               = 0
00148         , ID                = 1
00149         , IDRef             = 2
00150         , IDRefs            = 3
00151         , Entity            = 4
00152         , Entities          = 5
00153         , NmToken           = 6
00154         , NmTokens          = 7
00155         , Notation          = 8
00156         , Enumeration       = 9
00157         , Simple            = 10
00158         , Any_Any           = 11
00159         , Any_Other         = 12
00160         , Any_List          = 13
00161 
00162         , AttTypes_Count
00163         , AttTypes_Min      = 0
00164         , AttTypes_Max      = 13
00165         , AttTypes_Unknown  = -1
00166     };
00167 
00168     enum DefAttTypes
00169     {
00170         Default                  = 0
00171         , Required               = 1
00172         , Implied                = 2
00173         , Prohibited             = 3
00174         , Fixed                  = 4
00175         , Required_And_Fixed     = 5
00176         , ProcessContents_Strict = 6
00177         , ProcessContents_Lax    = 7
00178         , ProcessContents_Skip   = 8
00179 
00180         , DefAttTypes_Count
00181         , DefAttTypes_Min   = 0
00182         , DefAttTypes_Max   = 8
00183         , DefAttTypes_Unknown = -1
00184     };
00185 
00186     enum CreateReasons
00187     {
00188         NoReason
00189         , JustFaultIn
00190     };
00191 
00192     // -----------------------------------------------------------------------
00193     //  Public static data members
00194     // -----------------------------------------------------------------------
00195     static const unsigned int fgInvalidAttrId;
00196 
00197 
00198     // -----------------------------------------------------------------------
00199     //  Public, static methods
00200     // -----------------------------------------------------------------------
00201 
00204 
00215     static const XMLCh* getAttTypeString(const AttTypes attrType);
00216 
00227     static const XMLCh* getDefAttTypeString(const DefAttTypes attrType);
00228 
00230 
00231 
00232     // -----------------------------------------------------------------------
00233     //  Destructor
00234     // -----------------------------------------------------------------------
00235 
00238 
00242     virtual ~XMLAttDef();
00244 
00245 
00246     // -----------------------------------------------------------------------
00247     //  The virtual attribute def interface
00248     // -----------------------------------------------------------------------
00249 
00252 
00261     virtual const XMLCh* getFullName() const = 0;
00262 
00264 
00265 
00266     // -----------------------------------------------------------------------
00267     //  Getter methods
00268     // -----------------------------------------------------------------------
00269 
00272 
00281     DefAttTypes getDefaultType() const;
00282 
00292     const XMLCh* getEnumeration() const;
00293 
00302     unsigned int getId() const;
00303 
00317     bool getProvided() const;
00318 
00328     AttTypes getType() const;
00329 
00339     const XMLCh* getValue() const;
00340 
00349     CreateReasons getCreateReason() const;
00350 
00358     bool isExternal() const;
00359 
00361 
00362 
00363     // -----------------------------------------------------------------------
00364     //  Setter methods
00365     // -----------------------------------------------------------------------
00366 
00369 
00378     void setDefaultType(const XMLAttDef::DefAttTypes newValue);
00379 
00388     void setId(const unsigned int newId);
00389 
00398     void setProvided(const bool newValue);
00399 
00407     void setType(const XMLAttDef::AttTypes newValue);
00408 
00419     void setValue(const XMLCh* const newValue);
00420 
00431     void setEnumeration(const XMLCh* const newValue);
00432 
00438     void setCreateReason(const CreateReasons newReason);
00439 
00443     void setExternalAttDeclaration(const bool aValue);
00444 
00446 
00447 protected :
00448     // -----------------------------------------------------------------------
00449     //  Hidden constructors
00450     // -----------------------------------------------------------------------
00451     XMLAttDef
00452     (
00453         const   AttTypes            type = CData
00454         , const DefAttTypes         defType = Implied
00455     );
00456     XMLAttDef
00457     (
00458         const   XMLCh* const        attValue
00459         , const AttTypes            type
00460         , const DefAttTypes         defType
00461         , const XMLCh* const        enumValues = 0
00462     );
00463 
00464 
00465 private :
00466     // -----------------------------------------------------------------------
00467     //  Unimplemented constructors and operators
00468     // -----------------------------------------------------------------------
00469     XMLAttDef(const XMLAttDef&);
00470     void operator=(const XMLAttDef&);
00471 
00472 
00473     // -----------------------------------------------------------------------
00474     //  Private helper methods
00475     // -----------------------------------------------------------------------
00476     void cleanUp();
00477 
00478 
00479     // -----------------------------------------------------------------------
00480     //  Private data members
00481     //
00482     //  fDefaultType
00483     //      Indicates what, if any, default stuff this attribute has.
00484     //
00485     //  fEnumeration
00486     //      If its an enumeration, this is the list of values as space
00487     //      separated values.
00488     //
00489     //  fId
00490     //      This is the unique id of this attribute, given to it when its put
00491     //      into the validator's attribute decl pool. It defaults to the
00492     //      special value XMLAttrDef::fgInvalidAttrId.
00493     //
00494     //  fProvided
00495     //      This field is really for use by the scanner. It is used to track
00496     //      which of the attributes of an element were provided. Any marked
00497     //      as not provided (after scanning the start tag) and having a
00498     //      default type of Required, is in error.
00499     //
00500     //  fType
00501     //      The type of attribute, which is one of the AttTypes values.
00502     //
00503     //  fValue
00504     //      This is the value of the attribute, which is the default value
00505     //      given in the attribute declaration.
00506     //
00507     //  fCreateReason
00508     //      This flag tells us how this attribute got created.  Sometimes even
00509     //      the attribute was not declared for the element, we want to fault
00510     //      fault it into the pool to avoid lots of redundant errors.
00511     //
00512     //  fExternalAttribute
00513     //      This flag indicates whether or not the attribute was declared externally.
00514     // -----------------------------------------------------------------------
00515     DefAttTypes     fDefaultType;
00516     XMLCh*          fEnumeration;
00517     unsigned int    fId;
00518     bool            fProvided;
00519     AttTypes        fType;
00520     XMLCh*          fValue;
00521     CreateReasons   fCreateReason;
00522     bool            fExternalAttribute;
00523 };
00524 
00525 
00526 
00527 // ---------------------------------------------------------------------------
00528 //  Getter methods
00529 // ---------------------------------------------------------------------------
00530 inline XMLAttDef::DefAttTypes XMLAttDef::getDefaultType() const
00531 {
00532     return fDefaultType;
00533 }
00534 
00535 inline const XMLCh* XMLAttDef::getEnumeration() const
00536 {
00537     return fEnumeration;
00538 }
00539 
00540 inline unsigned int XMLAttDef::getId() const
00541 {
00542     return fId;
00543 }
00544 
00545 inline bool XMLAttDef::getProvided() const
00546 {
00547     return fProvided;
00548 }
00549 
00550 inline XMLAttDef::AttTypes XMLAttDef::getType() const
00551 {
00552     return fType;
00553 }
00554 
00555 inline const XMLCh* XMLAttDef::getValue() const
00556 {
00557     return fValue;
00558 }
00559 
00560 inline XMLAttDef::CreateReasons XMLAttDef::getCreateReason() const
00561 {
00562     return fCreateReason;
00563 }
00564 
00565 inline bool XMLAttDef::isExternal() const
00566 {
00567     return fExternalAttribute;
00568 }
00569 
00570 
00571 // ---------------------------------------------------------------------------
00572 //  XMLAttDef: Setter methods
00573 // ---------------------------------------------------------------------------
00574 inline void XMLAttDef::setDefaultType(const XMLAttDef::DefAttTypes newValue)
00575 {
00576     fDefaultType = newValue;
00577 }
00578 
00579 inline void XMLAttDef::setEnumeration(const XMLCh* const newValue)
00580 {
00581     delete [] fEnumeration;
00582 
00583     if (newValue) {
00584         fEnumeration = XMLString::replicate(newValue);
00585     }
00586     else {
00587         fEnumeration = 0;
00588     }
00589 }
00590 
00591 inline void XMLAttDef::setId(const unsigned int newId)
00592 {
00593     fId = newId;
00594 }
00595 
00596 inline void XMLAttDef::setProvided(const bool newValue)
00597 {
00598     fProvided = newValue;
00599 }
00600 
00601 inline void XMLAttDef::setType(const XMLAttDef::AttTypes newValue)
00602 {
00603     fType = newValue;
00604 }
00605 
00606 inline void XMLAttDef::setValue(const XMLCh* const newValue)
00607 {
00608     delete [] fValue;
00609     fValue = XMLString::replicate(newValue);
00610 }
00611 
00612 inline void
00613 XMLAttDef::setCreateReason(const XMLAttDef::CreateReasons newReason)
00614 {
00615     fCreateReason = newReason;
00616 }
00617 
00618 inline void XMLAttDef::setExternalAttDeclaration(const bool aValue)
00619 {
00620     fExternalAttribute = aValue;
00621 }
00622 
00623 #endif


Copyright © 2000 The Apache Software Foundation. All Rights Reserved.