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: XMLElementDecl.hpp,v $ 00059 * Revision 1.1 2002/05/11 20:02:24 bhavani 00060 * CR#CR062582# adding xercesc 1.7 file 00061 * 00062 * Revision 1.1.1.1 2002/02/01 22:21:51 peiyongz 00063 * sane_include 00064 * 00065 * Revision 1.18 2001/08/21 16:06:10 tng 00066 * Schema: Unique Particle Attribution Constraint Checking. 00067 * 00068 * Revision 1.17 2001/07/24 18:30:47 knoaman 00069 * Added support for <group> + extra constraint checking for complexType 00070 * 00071 * Revision 1.16 2001/06/21 14:25:28 knoaman 00072 * Fix for bug 1946 00073 * 00074 * Revision 1.15 2001/05/11 13:25:32 tng 00075 * Copyright update. 00076 * 00077 * Revision 1.14 2001/05/03 20:34:22 tng 00078 * Schema: SchemaValidator update 00079 * 00080 * Revision 1.13 2001/04/19 18:16:52 tng 00081 * Schema: SchemaValidator update, and use QName in Content Model 00082 * 00083 * Revision 1.12 2001/03/21 21:56:02 tng 00084 * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar. 00085 * 00086 * Revision 1.11 2001/03/21 19:29:29 tng 00087 * Schema: Content Model Updates, by Pei Yong Zhang. 00088 * 00089 * Revision 1.10 2001/02/26 19:29:13 tng 00090 * Schema: add virtual method getURI(), getContentSpec and setContenSpec in XMLElementDecl, and DTDElementDecl. 00091 * 00092 * Revision 1.9 2001/02/26 19:21:30 tng 00093 * Schema: add parameter prefix in findElem and findAttr. 00094 * 00095 * Revision 1.8 2000/12/14 18:49:57 tng 00096 * Fix API document generation warning: "Warning: end of member group without matching begin" 00097 * 00098 * Revision 1.7 2000/11/30 18:22:38 andyh 00099 * reuseValidator - fix bugs (spurious errors) that occured on reuse due to 00100 * pools already containing some items. Fixed by Tinny Ng. 00101 * 00102 * Revision 1.6 2000/05/11 23:11:32 andyh 00103 * Add missing validity checks for stand-alone documents, character range 00104 * and Well-formed parsed entities. Changes contributed by Sean MacRoibeaird 00105 * <sean.Macroibeaird@ireland.sun.com> 00106 * 00107 * Revision 1.5 2000/02/24 20:00:23 abagchi 00108 * Swat for removing Log from API docs 00109 * 00110 * Revision 1.4 2000/02/16 19:48:56 roddey 00111 * More documentation updates 00112 * 00113 * Revision 1.3 2000/02/15 01:21:30 roddey 00114 * Some initial documentation improvements. More to come... 00115 * 00116 * Revision 1.2 2000/02/06 07:47:48 rahulj 00117 * Year 2K copyright swat. 00118 * 00119 * Revision 1.1.1.1 1999/11/09 01:08:32 twl 00120 * Initial checkin 00121 * 00122 * Revision 1.2 1999/11/08 20:44:38 rahul 00123 * Swat for adding in Product name and CVS comment log variable. 00124 * 00125 */ 00126 00127 #if !defined(XMLELEMENTDECL_HPP) 00128 #define XMLELEMENTDECL_HPP 00129 00130 #include <xercesc/util/XMLString.hpp> 00131 #include <xercesc/framework/XMLAttr.hpp> 00132 #include <xercesc/framework/XMLAttDefList.hpp> 00133 00134 class ContentSpecNode; 00135 class XMLContentModel; 00136 00152 class XMLPARSER_EXPORT XMLElementDecl 00153 { 00154 public: 00155 // ----------------------------------------------------------------------- 00156 // Class specific types 00157 // 00158 // CreateReasons 00159 // This type is used to store how an element declaration got into 00160 // the grammar's element pool. They are faulted in for various 00161 // reasons. 00162 // 00163 // LookupOpts 00164 // These are the values used by the attribute lookup methods. 00165 // 00166 // CharDataOpts 00167 // This is used to indicate how this type of element reacts to 00168 // character data as content. 00169 // ----------------------------------------------------------------------- 00170 enum CreateReasons 00171 { 00172 NoReason 00173 , Declared 00174 , AttList 00175 , InContentModel 00176 , AsRootElem 00177 , JustFaultIn 00178 }; 00179 00180 enum LookupOpts 00181 { 00182 AddIfNotFound 00183 , FailIfNotFound 00184 }; 00185 00186 enum CharDataOpts 00187 { 00188 NoCharData 00189 , SpacesOk 00190 , AllCharData 00191 }; 00192 00193 00194 // ----------------------------------------------------------------------- 00195 // Public static data 00196 // 00197 // fgInvalidElemId 00198 // A value to represent an invalid element node id. 00199 // 00200 // fgPCDataElemId 00201 // This is the value to use to represent a PCDATA node when an 00202 // element id is required. 00203 // 00204 // fgPCDataElemName 00205 // This is the value to use to represent a PCDATA node when an 00206 // element name is required. 00207 // ----------------------------------------------------------------------- 00208 static const unsigned int fgInvalidElemId; 00209 static const unsigned int fgPCDataElemId; 00210 static const XMLCh fgPCDataElemName[]; 00211 00212 00213 00214 // ----------------------------------------------------------------------- 00215 // Destructor 00216 // ----------------------------------------------------------------------- 00219 virtual ~XMLElementDecl(); 00221 00222 00223 // ----------------------------------------------------------------------- 00224 // The virtual element decl interface 00225 // ----------------------------------------------------------------------- 00226 00229 00258 virtual XMLAttDef* findAttr 00259 ( 00260 const XMLCh* const qName 00261 , const unsigned int uriId 00262 , const XMLCh* const baseName 00263 , const XMLCh* const prefix 00264 , const LookupOpts options 00265 , bool& wasAdded 00266 ) const = 0; 00267 00279 virtual XMLAttDefList& getAttDefList() const = 0; 00280 00288 virtual CharDataOpts getCharDataOpts() const = 0; 00289 00296 virtual bool hasAttDefs() const = 0; 00297 00305 virtual bool resetDefs() = 0; 00306 00314 virtual const ContentSpecNode* getContentSpec() const = 0; 00315 00321 virtual ContentSpecNode* getContentSpec() = 0; 00322 00332 virtual void setContentSpec(ContentSpecNode* toAdopt) = 0; 00333 00345 virtual XMLContentModel* getContentModel() = 0; 00346 00358 virtual void setContentModel(XMLContentModel* const newModelToAdopt) = 0; 00359 00372 virtual const XMLCh* getFormattedContentModel () const = 0; 00373 00375 00376 00377 // ----------------------------------------------------------------------- 00378 // Getter methods 00379 // ----------------------------------------------------------------------- 00380 00383 00391 const XMLCh* getBaseName() const; 00392 XMLCh* getBaseName(); 00393 00400 const unsigned int getURI() const; 00401 00409 const QName* getElementName() const; 00410 QName* getElementName(); 00411 00420 const XMLCh* getFullName() const; 00421 00433 CreateReasons getCreateReason() const; 00434 00444 unsigned int getId() const; 00445 00455 bool isDeclared() const; 00456 00465 bool isExternal() const; 00466 00468 00469 00470 // ----------------------------------------------------------------------- 00471 // Setter methods 00472 // ----------------------------------------------------------------------- 00473 00476 00487 void setElementName(const XMLCh* const prefix 00488 , const XMLCh* const localPart 00489 , const int uriId ); 00490 00500 void setElementName(const XMLCh* const rawName 00501 , const int uriId ); 00502 00511 void setElementName(const QName* const elementName); 00512 00523 void setCreateReason(const CreateReasons newReason); 00524 00531 void setId(const unsigned int newId); 00532 00533 00537 void setExternalElemDeclaration(const bool aValue); 00538 00540 00541 00542 // ----------------------------------------------------------------------- 00543 // Miscellaneous methods 00544 // ----------------------------------------------------------------------- 00545 00548 00550 00551 00552 protected : 00553 // ----------------------------------------------------------------------- 00554 // Hidden constructors 00555 // ----------------------------------------------------------------------- 00556 XMLElementDecl(); 00557 00558 private : 00559 // ----------------------------------------------------------------------- 00560 // Unimplemented constructors and operators 00561 // ----------------------------------------------------------------------- 00562 XMLElementDecl(const XMLElementDecl&); 00563 void operator=(const XMLElementDecl&); 00564 00565 00566 // ----------------------------------------------------------------------- 00567 // Data members 00568 // 00569 // fElementName 00570 // This is the name of the element decl. 00571 // 00572 // fCreateReason 00573 // We sometimes have to put an element decl object into the elem 00574 // decl pool before the element's declaration is seen, such as when 00575 // its used in another element's content model or an att list is 00576 // seen for it. This flag tells us whether its been declared, and 00577 // if not why it had to be created. 00578 // 00579 // fId 00580 // The unique id of this element. This is created by the derived 00581 // class, or more accurately the grammar that owns the objects 00582 // of the derived types. But, since they all have to have them, we 00583 // let them all store the id here. It is defaulted to have the 00584 // value fgInvalidElem until explicitly set. 00585 // 00586 // fExternalElement 00587 // This flag indicates whether or the element was declared externally. 00588 // ----------------------------------------------------------------------- 00589 QName* fElementName; 00590 CreateReasons fCreateReason; 00591 unsigned int fId; 00592 bool fExternalElement; 00593 }; 00594 00595 00596 // --------------------------------------------------------------------------- 00597 // XMLElementDecl: Getter methods 00598 // --------------------------------------------------------------------------- 00599 inline const XMLCh* XMLElementDecl::getBaseName() const 00600 { 00601 return fElementName->getLocalPart(); 00602 } 00603 00604 inline XMLCh* XMLElementDecl::getBaseName() 00605 { 00606 return fElementName->getLocalPart(); 00607 } 00608 00609 inline const unsigned int XMLElementDecl::getURI() const 00610 { 00611 return fElementName->getURI(); 00612 } 00613 00614 inline const QName* XMLElementDecl::getElementName() const 00615 { 00616 return fElementName; 00617 } 00618 00619 inline QName* XMLElementDecl::getElementName() 00620 { 00621 return fElementName; 00622 } 00623 00624 inline const XMLCh* XMLElementDecl::getFullName() const 00625 { 00626 return fElementName->getRawName(); 00627 } 00628 00629 inline XMLElementDecl::CreateReasons XMLElementDecl::getCreateReason() const 00630 { 00631 return fCreateReason; 00632 } 00633 00634 inline unsigned int XMLElementDecl::getId() const 00635 { 00636 return fId; 00637 } 00638 00639 inline bool XMLElementDecl::isDeclared() const 00640 { 00641 return (fCreateReason == Declared); 00642 } 00643 00644 00645 inline bool XMLElementDecl::isExternal() const 00646 { 00647 return fExternalElement; 00648 } 00649 00650 00651 // --------------------------------------------------------------------------- 00652 // XMLElementDecl: Setter methods 00653 // --------------------------------------------------------------------------- 00654 inline void 00655 XMLElementDecl::setCreateReason(const XMLElementDecl::CreateReasons newReason) 00656 { 00657 fCreateReason = newReason; 00658 } 00659 00660 inline void XMLElementDecl::setId(const unsigned int newId) 00661 { 00662 fId = newId; 00663 } 00664 00665 00666 inline void XMLElementDecl::setExternalElemDeclaration(const bool aValue) 00667 { 00668 fExternalElement = aValue; 00669 } 00670 00671 #endif