| API Docs for SAX and DOM |

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

# XSModel.hpp

Go to the documentation of this file.

    00001 /*
    00002  * The Apache Software License, Version 1.1
    00003  *
    00004  * Copyright (c) 2003 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: XSModel.hpp,v $
    00059  * Revision 1.9  2003/11/26 16:12:23  knoaman
    00060  * Add a method to return the XSObject mapped to a schema grammar component
    00061  *
    00062  * Revision 1.8  2003/11/21 22:34:45  neilg
    00063  * More schema component model implementation, thanks to David Cargill.
    00064  * In particular, this cleans up and completes the XSModel, XSNamespaceItem,
    00065  * XSAttributeDeclaration and XSAttributeGroup implementations.
    00066  *
    00067  * Revision 1.7  2003/11/21 17:25:09  knoaman
    00068  * Use XSObjectFactory to create various components.
    00069  *
    00070  * Revision 1.6  2003/11/15 21:18:39  neilg
    00071  * fixes for compilation under gcc
    00072  *
    00073  * Revision 1.5  2003/11/14 22:47:53  neilg
    00074  * fix bogus log message from previous commit...
    00075  *
    00076  * Revision 1.4  2003/11/14 22:33:30  neilg
    00077  * Second phase of schema component model implementation.
    00078  * Implement XSModel, XSNamespaceItem, and the plumbing necessary
    00079  * to connect them to the other components.
    00080  * Thanks to David Cargill.
    00081  *
    00082  * Revision 1.3  2003/11/06 15:30:04  neilg
    00083  * first part of PSVI/schema component model implementation, thanks to David Cargill.  This covers setting the PSVIHandler on parser objects, as well as implementing XSNotation, XSSimpleTypeDefinition, XSIDCDefinition, and most of XSWildcard, XSComplexTypeDefinition, XSElementDeclaration, XSAttributeDeclaration and XSAttributeUse.
    00084  *
    00085  * Revision 1.2  2003/10/10 18:37:51  neilg
    00086  * update XSModel and XSObject interface so that IDs can be used to query components in XSModels, and so that those IDs can be recovered from components
    00087  *
    00088  * Revision 1.1  2003/09/16 14:33:36  neilg
    00089  * PSVI/schema component model classes, with Makefile/configuration changes necessary to build them
    00090  *
    00091  */
    00092
    00093 #if !defined(XSMODEL_HPP)
    00094 #define XSMODEL_HPP
    00095
    00096 #include <xercesc/util/PlatformUtils.hpp>
    00097 #include <xercesc/framework/psvi/XSObject.hpp>
    00098 #include <xercesc/framework/psvi/XSNamedMap.hpp>
    00099
    00100 #include <xercesc/util/ValueVectorOf.hpp>
    00101 #include <xercesc/validators/schema/SchemaElementDecl.hpp>
    00102
    00103 XERCES_CPP_NAMESPACE_BEGIN
    00104
    00117 // forward declarations
    00118 class Grammar;
    00119 class XMLGrammarPool;
    00120 class XSAnnotation;
    00121 class XSAttributeDeclaration;
    00122 class XSAttributeGroupDefinition;
    00123 class XSElementDeclaration;
    00124 class XSModelGroupDefinition;
    00125 class XSNamespaceItem;
    00126 class XSNotationDeclaration;
    00127 class XSTypeDefinition;
    00128 class XSObjectFactory;
    00129
    00130 class  XSModel : public XMemory
    00131 {
    00132 public:
    00133
    00134     //  Constructors and Destructor
    00135     // -----------------------------------------------------------------------
    00138
    00144     XSModel( XMLGrammarPool *grammarPool
    00145                 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
    00146
    00156     XSModel( XSModel *baseModel
    00157                 , GrammarResolver *grammarResolver
    00158                 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
    00159
    00161
    00164     ~XSModel();
    00166
    00167     //---------------------
    00171
    00178     StringList *getNamespaces();
    00179
    00188     XSNamespaceItemList *getNamespaceItems();
    00189
    00200     XSNamedMap<XSObject> *getComponents(XSConstants::COMPONENT_TYPE objectType);
    00201
    00214     XSNamedMap<XSObject> *getComponentsByNamespace(XSConstants::COMPONENT_TYPE objectType,
    00215                                                const XMLCh *compNamespace);
    00216
    00220     XSAnnotationList *getAnnotations();
    00221
    00229     XSElementDeclaration *getElementDeclaration(const XMLCh *name
    00230             , const XMLCh *compNamespace);
    00231
    00239     XSAttributeDeclaration *getAttributeDeclaration(const XMLCh *name
    00240             , const XMLCh *compNamespace);
    00241
    00250     XSTypeDefinition *getTypeDefinition(const XMLCh *name
    00251             , const XMLCh *compNamespace);
    00252
    00260     XSAttributeGroupDefinition *getAttributeGroup(const XMLCh *name
    00261             , const XMLCh *compNamespace);
    00262
    00270     XSModelGroupDefinition *getModelGroupDefinition(const XMLCh *name
    00271             , const XMLCh *compNamespace);
    00272
    00280     XSNotationDeclaration *getNotationDeclaration(const XMLCh *name
    00281             , const XMLCh *compNamespace);
    00282
    00292     XSObject *getXSObjectById(unsigned int  compId
    00293                 , XSConstants::COMPONENT_TYPE compType);
    00294
    00296
    00297     //----------------------------------
    00301     XMLStringPool*  getURIStringPool();
    00302
    00303     XSNamespaceItem* getNamespaceItem(const XMLCh* const key);
    00304
    00312     XSObject* getXSObject(void* key);
    00313
    00315 private:
    00316     // Local Functions:
    00317     void addGrammarToXSModel(XSNamespaceItem* namespaceItem);
    00318
    00319     // -----------------------------------------------------------------------
    00320     //  Unimplemented constructors and operators
    00321     // -----------------------------------------------------------------------
    00322     XSModel(const XSModel&);
    00323     XSModel & operator=(const XSModel &);
    00324
    00325 protected:
    00326     friend class XSObjectFactory;
    00327
    00328     // -----------------------------------------------------------------------
    00329     //  data members
    00330     // -----------------------------------------------------------------------
    00331     // fMemoryManager:
    00332     //  used for any memory allocations
    00333     MemoryManager* const                    fMemoryManager;
    00334
    00335     StringList*                             fNamespaceStringList;
    00336     XSNamespaceItemList*                    fXSNamespaceItemList;
    00337
    00338     RefVectorOf<XSElementDeclaration>*      fElementDeclarationVector;
    00339     RefVectorOf<XSAttributeDeclaration>*    fAttributeDeclarationVector;
    00340
    00341     /* Need a XSNamedMap for each component    top-level?
    00342           ATTRIBUTE_DECLARATION     = 1,
    00343           ELEMENT_DECLARATION       = 2,
    00344           TYPE_DEFINITION           = 3,
    00345           ATTRIBUTE_USE             = 4,       no
    00346           ATTRIBUTE_GROUP_DEFINITION= 5,
    00347           MODEL_GROUP_DEFINITION    = 6,
    00348           MODEL_GROUP               = 7,       no
    00349           PARTICLE                  = 8,       no
    00350           WILDCARD                  = 9,       no
    00351           IDENTITY_CONSTRAINT       = 10,      no
    00352           NOTATION_DECLARATION      = 11,
    00353           ANNOTATION                = 12,      no
    00354           FACET                     = 13,      no
    00355           MULTIVALUE_FACET          = 14       no
    00356     */
    00357     XSNamedMap<XSObject>*                   fComponentMap[XSConstants::MULTIVALUE_FACET];
    00358
    00359     XMLStringPool*                          fURIStringPool;
    00360     XSAnnotationList*                       fXSAnnotationList;
    00361     RefHashTableOf<XSNamespaceItem>*        fHashNamespace;
    00362     XSObjectFactory*                        fObjFactory;
    00363     RefVectorOf<XSNamespaceItem>*           fDeleteNamespace;
    00364
    00365     XSModel*                                fParent;
    00366     bool                                    fDeleteParent;
    00367     bool                                    fAddedBuiltinDatatypeValidators;
    00368 };
    00369
    00370 inline XMLStringPool*  XSModel::getURIStringPool()
    00371 {
    00372     return fURIStringPool;
    00373 }
    00374
    00375 inline StringList *XSModel::getNamespaces()
    00376 {
    00377     return fNamespaceStringList;
    00378 }
    00379
    00380 inline XSNamespaceItemList *XSModel::getNamespaceItems()
    00381 {
    00382     return fXSNamespaceItemList;
    00383 }
    00384
    00385 XERCES_CPP_NAMESPACE_END
    00386
    00387 #endif

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