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

Home

Readme
Release Info

Installation
Download
Build

FAQs
Samples
API Docs

DOM C++ Binding
Programming
Migration Guide

Feedback
Bug-Reporting
PDF Document

CVS Repository
Mail Archive

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.