Xerces-C++ 3.1.3

- Main Page
- Related Pages
- Classes
- Files

- File List
- File Members

XSModel.hpp
Go to the documentation of this file.
1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18 /*
19 * $Id: XSModel.hpp 674012 2008-07-04 11:18:21Z borisk $
20 */
21
22 #if !defined(XERCESC_INCLUDE_GUARD_XSMODEL_HPP)
23 #define XERCESC_INCLUDE_GUARD_XSMODEL_HPP
24
25 #include <xercesc/util/PlatformUtils.hpp>
26 #include <xercesc/framework/psvi/XSObject.hpp>
27 #include <xercesc/framework/psvi/XSNamedMap.hpp>
28
29 #include <xercesc/util/ValueVectorOf.hpp>
30 #include <xercesc/validators/schema/SchemaElementDecl.hpp>
31
32 XERCES_CPP_NAMESPACE_BEGIN
33
46 // forward declarations
47 class Grammar;
48 class XMLGrammarPool;
49 class XSAnnotation;
50 class XSAttributeDeclaration;
51 class XSAttributeGroupDefinition;
52 class XSElementDeclaration;
53 class XSModelGroupDefinition;
54 class XSNamespaceItem;
55 class XSNotationDeclaration;
56 class XSTypeDefinition;
57 class XSObjectFactory;
58
59 class XMLPARSER_EXPORT XSModel : public XMemory
60 {
61 public:
62
63 // Constructors and Destructor
64 // -----------------------------------------------------------------------
67
73 XSModel( XMLGrammarPool *grammarPool
74 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
75
85 XSModel( XSModel *baseModel
86 , GrammarResolver *grammarResolver
87 , MemoryManager* const manager = XMLPlatformUtils::fgMemoryManager);
88
90
93 ~XSModel();
95
96 //---------------------
100
107 StringList *getNamespaces();
108
117 XSNamespaceItemList *getNamespaceItems();
118
129 XSNamedMap<XSObject> *getComponents(XSConstants::COMPONENT_TYPE objectType);
130
143 XSNamedMap<XSObject> *getComponentsByNamespace(XSConstants::COMPONENT_TYPE objectType,
144 const XMLCh *compNamespace);
145
149 XSAnnotationList *getAnnotations();
150
158 XSElementDeclaration *getElementDeclaration(const XMLCh *name
159 , const XMLCh *compNamespace);
160
168 XSAttributeDeclaration *getAttributeDeclaration(const XMLCh *name
169 , const XMLCh *compNamespace);
170
179 XSTypeDefinition *getTypeDefinition(const XMLCh *name
180 , const XMLCh *compNamespace);
181
189 XSAttributeGroupDefinition *getAttributeGroup(const XMLCh *name
190 , const XMLCh *compNamespace);
191
199 XSModelGroupDefinition *getModelGroupDefinition(const XMLCh *name
200 , const XMLCh *compNamespace);
201
209 XSNotationDeclaration *getNotationDeclaration(const XMLCh *name
210 , const XMLCh *compNamespace);
211
221 XSObject *getXSObjectById(XMLSize_t compId,
222 XSConstants::COMPONENT_TYPE compType);
223
225
226 //----------------------------------
230 XMLStringPool* getURIStringPool();
231
232 XSNamespaceItem* getNamespaceItem(const XMLCh* const key);
233
241 XSObject* getXSObject(void* key);
242
244 private:
245
246 // -----------------------------------------------------------------------
247 // Helper methods
248 // -----------------------------------------------------------------------
249 void addGrammarToXSModel
250 (
251 XSNamespaceItem* namespaceItem
252 );
253 void addS4SToXSModel
254 (
255 XSNamespaceItem* const namespaceItem
256 , RefHashTableOf<DatatypeValidator>* const builtInDV
257 );
258 void addComponentToNamespace
259 (
260 XSNamespaceItem* const namespaceItem
261 , XSObject* const component
262 , XMLSize_t componentIndex
263 , bool addToXSModel = true
264 );
265
266 void addComponentToIdVector
267 (
268 XSObject* const component
269 , XMLSize_t componentIndex
270 );
271
272 // -----------------------------------------------------------------------
273 // Unimplemented constructors and operators
274 // -----------------------------------------------------------------------
275 XSModel(const XSModel&);
276 XSModel & operator=(const XSModel &);
277
278 protected:
279 friend class XSObjectFactory;
280 friend class XSObject;
281
282 // -----------------------------------------------------------------------
283 // data members
284 // -----------------------------------------------------------------------
285 // fMemoryManager:
286 // used for any memory allocations
287 MemoryManager* const fMemoryManager;
288
289 StringList* fNamespaceStringList;
290 XSNamespaceItemList* fXSNamespaceItemList;
291
292 RefVectorOf<XSObject>* fIdVector[XSConstants::MULTIVALUE_FACET];
293
294 /* Need a XSNamedMap for each component top-level?
295 ATTRIBUTE_DECLARATION = 1,
296 ELEMENT_DECLARATION = 2,
297 TYPE_DEFINITION = 3,
298 ATTRIBUTE_USE = 4, no
299 ATTRIBUTE_GROUP_DEFINITION= 5,
300 MODEL_GROUP_DEFINITION = 6,
301 MODEL_GROUP = 7, no
302 PARTICLE = 8, no
303 WILDCARD = 9, no
304 IDENTITY_CONSTRAINT = 10, no
305 NOTATION_DECLARATION = 11,
306 ANNOTATION = 12, no
307 FACET = 13, no
308 MULTIVALUE_FACET = 14 no
309 */
310 XSNamedMap<XSObject>* fComponentMap[XSConstants::MULTIVALUE_FACET];
311 XMLStringPool* fURIStringPool;
312 XSAnnotationList* fXSAnnotationList;
313 RefHashTableOf<XSNamespaceItem>* fHashNamespace;
314 XSObjectFactory* fObjFactory;
315 RefVectorOf<XSNamespaceItem>* fDeleteNamespace;
316 XSModel* fParent;
317 bool fDeleteParent;
318 bool fAddedS4SGrammar;
319 };
320
321 inline XMLStringPool* XSModel::getURIStringPool()
322 {
323 return fURIStringPool;
324 }
325
326 inline StringList *XSModel::getNamespaces()
327 {
328 return fNamespaceStringList;
329 }
330
331 inline XSNamespaceItemList *XSModel::getNamespaceItems()
332 {
333 return fXSNamespaceItemList;
334 }
335
336 XERCES_CPP_NAMESPACE_END
337
338 #endif