📄 xmlelementdecl.hpp
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *//* * $Id: XMLElementDecl.hpp 568078 2007-08-21 11:43:25Z amassari $ */#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 * abstract content model type. */ virtual XMLContentModel* getContentModel() = 0; /** Set the content model object for this element type * * This method will adopt the based content model object. This is called * by the actual validator which is parsing its DTD or Schema or whatever * a creating an element decl. It will build what it feels is the correct * content model type object and store it on the element decl object via * this method. * * @param newModelToAdopt This method will adopt the passed content model * object. Any previous object is destroyed. */ virtual void setContentModel(XMLContentModel* const newModelToAdopt) = 0; /** Geta formatted string of the content model * * This method is a convenience method which will create a formatted * representation of the content model of the element. It will not always * exactly recreate the original model, since some normalization or * or reformatting may occur. But, it will be a technically accurate * representation of the original content model. * * @return A pointer to an internal buffer which contains the formatted * content model. The caller does not own this buffer and should * copy it if it needs to be kept around. */ virtual const XMLCh* getFormattedContentModel () const = 0; //@} // ----------------------------------------------------------------------- // Getter methods // ----------------------------------------------------------------------- /** @name Getter methods */ //@{ /** Get the base name of this element type. * * Return the base name part of the element's name. This is the * same regardless of whether namespaces are enabled or not. * * @return A const pointer to the base name of the element decl. */ const XMLCh* getBaseName() const; XMLCh* getBaseName(); /** Get the URI id of this element type. * * Return the URI Id of this element. * * @return The URI Id of the element decl, or the emptyNamespaceId if not applicable. */ unsigned int getURI() const; /** Get the QName of this element type. * * Return the QName part of the element's name. This is the * same regardless of whether namespaces are enabled or not. * * @return A const pointer to the QName of the element decl. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -