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

Home

Readme
Charter
Release Info

Installation
Download
Build Instructions

FAQs
Samples
API Docs

DOM C++ Binding
Programming
Migration Guide

Feedback
Bug-Reporting
PDF Document

Source Repository
User Mail Archive
Devel Mail Archive

API Docs for SAX and DOM
 

XMLGrammarPool.hpp

Go to the documentation of this file.
00001 /*
00002  * Copyright 1999-2004 The Apache Software Foundation.
00003  * 
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  * 
00008  *      http://www.apache.org/licenses/LICENSE-2.0
00009  * 
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 /*
00018  * $Id: XMLGrammarPool.hpp 191054 2005-06-17 02:56:35Z jberry $
00019  */
00020 
00021 #if !defined(XMLGRAMMARPOOL_HPP)
00022 #define XMLGRAMMARPOOL_HPP
00023 
00024 #include <xercesc/util/PlatformUtils.hpp>
00025 #include <xercesc/util/RefHashTableOf.hpp>
00026 #include <xercesc/util/XMemory.hpp>
00027 #include <xercesc/framework/psvi/XSModel.hpp>
00028 
00029 
00030 XERCES_CPP_NAMESPACE_BEGIN
00031 
00032 class Grammar;
00033 class XMLGrammarDescription;
00034 class DTDGrammar;
00035 class SchemaGrammar;
00036 class XMLDTDDescription;
00037 class XMLSchemaDescription;
00038 class XMLStringPool;
00039 class BinInputStream;
00040 class BinOutputStream;
00041 
00042 class  XMLGrammarPool : public XMemory
00043 {
00044 public :
00045     // -----------------------------------------------------------------------
00047     // -----------------------------------------------------------------------
00049 
00054     virtual ~XMLGrammarPool(){};
00056 
00057     // -----------------------------------------------------------------------
00059     // -----------------------------------------------------------------------
00061 
00075     virtual bool           cacheGrammar(Grammar* const               gramToCache) = 0;
00076     
00084     virtual Grammar*       retrieveGrammar(XMLGrammarDescription* const gramDesc) = 0;
00085     
00086         
00095     virtual Grammar*       orphanGrammar(const XMLCh* const nameSpaceKey) = 0;  
00096 
00097 
00103     virtual RefHashTableOfEnumerator<Grammar> getGrammarEnumerator() const = 0;
00104 
00111     virtual bool           clear() = 0;
00112         
00122     virtual void           lockPool() = 0;
00123     
00134     virtual void           unlockPool() = 0;
00135 
00137 
00138     // -----------------------------------------------------------------------
00140     // -----------------------------------------------------------------------
00142 
00147     virtual DTDGrammar*            createDTDGrammar() = 0;
00148 
00153     virtual SchemaGrammar*         createSchemaGrammar() = 0;
00154                     
00159     virtual XMLDTDDescription*     createDTDDescription(const XMLCh* const systemId) = 0;
00164     virtual XMLSchemaDescription*  createSchemaDescription(const XMLCh* const targetNamespace) = 0;
00165 
00167 
00168     // -----------------------------------------------------------------------
00170     // -----------------------------------------------------------------------                                                        
00172 
00173     /***
00174       * Return an XSModel derived from the components of all SchemaGrammars
00175       * in the grammar pool.  If the pool is locked, this should
00176       * be a thread-safe operation.  It should return null if and only if
00177       * the pool is empty.
00178       *
00179       * Calling getXSModel() on an unlocked grammar pool may result in the
00180       * creation of a new XSModel with the old XSModel being deleted.  The
00181       * function will return a different address for the XSModel if it has
00182       * changed.
00183       * 
00184       * @deprecated (shouldn't use address to determine if XSModel changed)
00185       */
00186     virtual XSModel *getXSModel() = 0;
00187 
00188     /***
00189       * Return an XSModel derived from the components of all SchemaGrammars
00190       * in the grammar pool.  If the pool is locked, this should
00191       * be a thread-safe operation.
00192       *
00193       * NOTE: The function should NEVER return NULL.  If there are no grammars in
00194       *       the pool it should return an XSModel containing the Schema for Schema.      
00195       *
00196       * Calling getXSModel() on an unlocked grammar pool may result in the
00197       * creation of a new XSModel with the old XSModel being deleted.
00198       * The bool parameter will indicate if the XSModel was changed.
00199       *     
00200       * For source code compatibility, default implementation is to say
00201       * XSModelWasChanged.
00202       */
00203     virtual XSModel *getXSModel(bool& XSModelWasChanged)
00204     {
00205         XSModelWasChanged = true;
00206         return getXSModel();
00207     }
00208     
00209     // @}
00210 
00211     // -----------------------------------------------------------------------
00213     // -----------------------------------------------------------------------                                                        
00215 
00220     inline MemoryManager*    getMemoryManager()
00221     {
00222         return fMemMgr;
00223     }
00224 
00231     virtual XMLStringPool *getURIStringPool() = 0;
00233 
00234     // -----------------------------------------------------------------------
00236     // -----------------------------------------------------------------------                                                        
00237 
00238     /***
00239       *
00240       * 1. Context: Serialize/Deserialize All Grammars In One Session
00241       *
00242       *    Since it is common that a declaration in one grammar may reference 
00243       *    to definitions in other grammars, it is required to serialize those 
00244       *    related (or interdependent) grammars in to one persistent data store 
00245       *    in one serialization session (storing), and deserialize them from the
00246       *    persistent data store in one deserialization session (loading) back
00247       *    to the grammar pool.    
00248       *
00249       * 2. Multiple serializations
00250       *
00251       *    It is acceptable that client application requests more than one 
00252       *    grammar serialization on a particular grammar pool, to track the 
00253       *    different grammars cached, or for whatever reasons that client 
00254       *    application is interested in. 
00255       *
00256       * 3. Multiple deserializations
00257       * 
00258       *    Request for grammar deserialization either after the grammar pool has 
00259       *    its own cached grammars, or request for more than one grammar 
00260       *    deserialization, may cause undesired and unpredictable consequence
00261       *    and therefore client application shall be aware that individual 
00262       *    implementationis may NOT support this.
00263       *
00264       *    However it is strongly recommended that the client application requests 
00265       *    no more than one grammar deserialization even a particular implementation
00266       *    may allow multiple deserializations.
00267       *
00268       * 4. Locking
00269       *
00270       *    Both serialization and deserialization requires to lock the grammar pool
00271       *    before operation and unlock after operation. In the case the grammar pool
00272       *    is locked by a third party, the request for serialization/deserialization
00273       *    will NOT be entertained.
00274       *
00275       * 5. Versioning
00276       *
00277       *    The Persistent data store has a version tag to be verified during 
00278       *    deserialization, thus a grammar pool may decide if it supports
00279       *    a binary data created by a different release of Xerces.
00280       * 
00281       * 6. Clean up
00282       *
00283       *    The client application shall be aware that in the event of an exception
00284       *    thrown due to a corrupted data store during deserialization, implementation
00285       *    may not be able to clean up all resources allocated, and therefore it is 
00286       *    client application's responsibility to clean up those unreleased resources.
00287       *
00288       *
00289       */
00290     virtual void     serializeGrammars(BinOutputStream* const)  = 0; 
00291     virtual void     deserializeGrammars(BinInputStream* const) = 0;       
00292        
00293     /*
00294      * Set/get a flag to not create XSAnnotations when deserializing the grammar.
00295      * Defaults to false (create XSAnnotations when deserializing the grammar).
00296      */
00297     inline void setIgnoreSerializedAnnotations(const bool flag)
00298     {
00299         fIgnoreSerializedAnnotations = flag;
00300     };
00301     inline bool getIgnoreSerializedAnnotations() const
00302     {
00303         return fIgnoreSerializedAnnotations;
00304     };
00305 
00306 protected :
00307     // -----------------------------------------------------------------------
00309     // -----------------------------------------------------------------------
00311     XMLGrammarPool(MemoryManager* const memMgr = XMLPlatformUtils::fgMemoryManager)
00312     :fMemMgr(memMgr)
00313     ,fIgnoreSerializedAnnotations(false)
00314     {
00315     };
00317 
00318 private :
00319     // -----------------------------------------------------------------------
00321     // -----------------------------------------------------------------------
00323     XMLGrammarPool(const XMLGrammarPool& );
00324     XMLGrammarPool& operator=(const XMLGrammarPool& );
00326 
00327     // -----------------------------------------------------------------------
00328     //
00329     // fMemMgr: plugged-in (or defaulted-in) memory manager
00330     //          not owned 
00331     //          no reset after initialization
00332     //
00333     // -----------------------------------------------------------------------
00334     
00335     MemoryManager* const  fMemMgr;
00336     bool fIgnoreSerializedAnnotations;
00337 
00338 };
00339 
00340 XERCES_CPP_NAMESPACE_END
00341 
00342 #endif


Copyright © 1994-2004 The Apache Software Foundation. All Rights Reserved.