📄 xmlelementdecl.hpp
字号:
/* * The Apache Software License, Version 1.1 * * Copyright (c) 1999-2001 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Xerces" and "Apache Software Foundation" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact apache\@apache.org. * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation, and was * originally based on software copyright (c) 1999, International * Business Machines, Inc., http://www.ibm.com . For more information * on the Apache Software Foundation, please see * <http://www.apache.org/>. *//* * $Log: XMLElementDecl.hpp,v $ * Revision 1.11 2003/12/12 18:34:43 peiyongz * loadElement/storeElement * * Revision 1.10 2003/11/27 06:08:18 neilg * mark DOMTypeInfo-related methods on XMLElementDecl deprecated since they are not thread-safe * * Revision 1.9 2003/11/24 05:19:15 neilg * update method documentation * * Revision 1.8 2003/10/10 16:23:29 peiyongz * Implementation of Serialization/Deserialization * * Revision 1.7 2003/05/16 21:36:55 knoaman * Memory manager implementation: Modify constructors to pass in the memory manager. * * Revision 1.6 2003/05/15 18:26:07 knoaman * Partial implementation of the configurable memory manager. * * Revision 1.5 2003/03/07 18:08:10 tng * Return a reference instead of void for operator= * * Revision 1.4 2003/01/29 19:45:35 gareth * added api for DOMTypeInfo * * Revision 1.3 2002/11/04 15:00:21 tng * C++ Namespace Support. * * Revision 1.2 2002/08/20 16:55:33 tng * [Bug 6251] Info during compilation. * * Revision 1.1.1.1 2002/02/01 22:21:51 peiyongz * sane_include * * Revision 1.18 2001/08/21 16:06:10 tng * Schema: Unique Particle Attribution Constraint Checking. * * Revision 1.17 2001/07/24 18:30:47 knoaman * Added support for <group> + extra constraint checking for complexType * * Revision 1.16 2001/06/21 14:25:28 knoaman * Fix for bug 1946 * * Revision 1.15 2001/05/11 13:25:32 tng * Copyright update. * * Revision 1.14 2001/05/03 20:34:22 tng * Schema: SchemaValidator update * * Revision 1.13 2001/04/19 18:16:52 tng * Schema: SchemaValidator update, and use QName in Content Model * * Revision 1.12 2001/03/21 21:56:02 tng * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar. * * Revision 1.11 2001/03/21 19:29:29 tng * Schema: Content Model Updates, by Pei Yong Zhang. * * Revision 1.10 2001/02/26 19:29:13 tng * Schema: add virtual method getURI(), getContentSpec and setContenSpec in XMLElementDecl, and DTDElementDecl. * * Revision 1.9 2001/02/26 19:21:30 tng * Schema: add parameter prefix in findElem and findAttr. * * Revision 1.8 2000/12/14 18:49:57 tng * Fix API document generation warning: "Warning: end of member group without matching begin" * * Revision 1.7 2000/11/30 18:22:38 andyh * reuseValidator - fix bugs (spurious errors) that occured on reuse due to * pools already containing some items. Fixed by Tinny Ng. * * Revision 1.6 2000/05/11 23:11:32 andyh * Add missing validity checks for stand-alone documents, character range * and Well-formed parsed entities. Changes contributed by Sean MacRoibeaird * <sean.Macroibeaird@ireland.sun.com> * * Revision 1.5 2000/02/24 20:00:23 abagchi * Swat for removing Log from API docs * * Revision 1.4 2000/02/16 19:48:56 roddey * More documentation updates * * Revision 1.3 2000/02/15 01:21:30 roddey * Some initial documentation improvements. More to come... * * Revision 1.2 2000/02/06 07:47:48 rahulj * Year 2K copyright swat. * * Revision 1.1.1.1 1999/11/09 01:08:32 twl * Initial checkin * * Revision 1.2 1999/11/08 20:44:38 rahul * Swat for adding in Product name and CVS comment log variable. * */#if !defined(XMLELEMENTDECL_HPP)#define XMLELEMENTDECL_HPP#include <xercesc/framework/XMLAttr.hpp>#include <xercesc/framework/XMLAttDefList.hpp>#include <xercesc/util/XMLString.hpp>#include <xercesc/util/PlatformUtils.hpp>#include <xercesc/internal/XSerializable.hpp>XERCES_CPP_NAMESPACE_BEGINclass ContentSpecNode;class XMLContentModel;/** * This class defines the core information of an element declaration. Each * validator (DTD, Schema, etc...) will have its own information that it * associations with the declaration of an element, but they must all share * at least this core information, i.e. they must all derive from this * class. The set of info enforced at this level is driven by the needs of * XML 1.0 spec validation and well formedness checks. * * This class defines some special element id values for invalid elements * and PCDATA elements, as well as a string for the special PCDATA element * name. All validators must honor these special values in order to allow * content models to work generically (i.e. to let code know when its dealing * with invalid or PCDATA element ids without having to know what type of * validator its messing with.) */class XMLPARSER_EXPORT XMLElementDecl : public XSerializable, public XMemory{ public: // ----------------------------------------------------------------------- // Class specific types // // CreateReasons // This type is used to store how an element declaration got into // the grammar's element pool. They are faulted in for various // reasons. // // LookupOpts // These are the values used by the attribute lookup methods. // // CharDataOpts // This is used to indicate how this type of element reacts to // character data as content. // ----------------------------------------------------------------------- enum CreateReasons { NoReason , Declared , AttList , InContentModel , AsRootElem , JustFaultIn }; /** * @deprecated Use of addIfNotFound couldl produce undefined * behaviour in multithreaded environments. */ enum LookupOpts { AddIfNotFound , FailIfNotFound }; enum CharDataOpts { NoCharData , SpacesOk , AllCharData }; // ----------------------------------------------------------------------- // Public static data // // fgInvalidElemId // A value to represent an invalid element node id. // // fgPCDataElemId // This is the value to use to represent a PCDATA node when an // element id is required. // // fgPCDataElemName // This is the value to use to represent a PCDATA node when an // element name is required. // ----------------------------------------------------------------------- static const unsigned int fgInvalidElemId; static const unsigned int fgPCDataElemId; static const XMLCh fgPCDataElemName[]; // ----------------------------------------------------------------------- // Destructor // ----------------------------------------------------------------------- /** @name Destructor */ //@{ virtual ~XMLElementDecl(); //@} // ----------------------------------------------------------------------- // The virtual element decl interface // ----------------------------------------------------------------------- /** @name Virual ElementDecl interface */ //@{ /** Find an attribute by name or optionally fault it in. * * The derived class should look up the passed attribute in the list of * of attributes for this element. If namespaces are enabled, then it * should use the uriId/baseName pair, else it should use the qName. The * options allow the caller to indicate whether the attribute should be * defaulted in if not found. If it is defaulted in, then wasAdded should * be set, else it should be cleared. If its not found and the caller does * not want defaulting, then return a null pointer. * Note that, in a multithreaded environment, it is dangerous for a * caller to invoke this method with options set to AddIfNotFound. * * @param qName This is the qName of the attribute, i.e. the actual * lexical name found. * * @param uriId This is the id of the URI of the namespace to which * this attribute mapped. Only valid if namespaces are * enabled. * * @param baseName This is the base part of the name, i.e. after any * prefix. * * @param prefix The prefix, if any, of this attribute's name. If * this is empty, then uriID is meaningless as well. * * @param options Indicates the lookup options. * * @param wasAdded Should be set if the attribute is faulted in, else * cleared. */ virtual XMLAttDef* findAttr ( const XMLCh* const qName , const unsigned int uriId , const XMLCh* const baseName , const XMLCh* const prefix , const LookupOpts options , bool& wasAdded ) const = 0; /** Get a list of attributes defined for this element. * * The derived class should return a reference to some member object which * implements the XMLAttDefList interface. This object gives the scanner the * ability to look through the attributes defined for this element. * * It is done this way for efficiency, though of course this is not thread * safe. The scanner guarantees that it won't ever call this method in any * nested way, but the outside world must be careful about when it calls * this method, and optimally never would. */ virtual XMLAttDefList& getAttDefList() const = 0; /** The character data options for this element type * * The derived class should return an appropriate character data opts value * which correctly represents its tolerance towards whitespace or character * data inside of its instances. This allows the scanner to do all of the * validation of character data. */ virtual CharDataOpts getCharDataOpts() const = 0; /** Indicate whether this element type defined any attributes * * The derived class should return a boolean that indicates whether this * element has any attributes defined for it or not. This is an optimization * that allows the scanner to skip some work if no attributes exist. */ virtual bool hasAttDefs() const = 0; /** Reset the flags on the attribute definitions. * * This method is called by the scanner at the beginning of each scan * of a start tag, asking this element decl to reset the 'declared' flag * of each of its attribute defs. This allows the scanner to mark each * one as declared yet or not. */ virtual bool resetDefs() = 0; /** Get a pointer to the content spec node * * This method will return a const pointer to the content spec node object * of this element. * * @return A const pointer to the element's content spec node */ virtual const ContentSpecNode* getContentSpec() const = 0; /** Get a pointer to the content spec node * * This method is identical to the previous one, except that it is non * const. */ virtual ContentSpecNode* getContentSpec() = 0; /** Set the content spec node object for this element type * * This method will adopt the based content spec node object. This is called * by the actual validator which is parsing its DTD or Schema or whatever * and store it on the element decl object via this method. * * @param toAdopt This method will adopt the passed content node spec * object. Any previous object is destroyed. */ virtual void setContentSpec(ContentSpecNode* toAdopt) = 0; /** Get a pointer to the abstract content model * * This method will return a const pointer to the content model object * of this element. This class is a simple abstraction that allows an * element to define and use multiple, specialized content model types * internally but still allow the outside world to do simple stuff with * them. * * @return A pointer to the element's content model, via the basic
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -