source: icXML/icXML-devel/src/icxercesc/framework/XMLContentModel.hpp @ 3157

Last change on this file since 3157 was 2807, checked in by cameron, 6 years ago

Fixes default attribute+namespace resolution; hashing

File size: 5.7 KB
Line 
1/*
2 * Unless required by applicable law or agreed to in writing, software
3 * distributed under the License is distributed on an "AS IS" BASIS,
4 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
5 * See the License for the specific language governing permissions and
6 * limitations under the License.
7 */
8
9/*
10 * $Id: XMLContentModel.hpp 677705 2008-07-17 20:15:32Z amassari $
11 */
12
13#if !defined(XERCESC_INCLUDE_GUARD_XMLCONTENTMODEL_HPP)
14#define XERCESC_INCLUDE_GUARD_XMLCONTENTMODEL_HPP
15
16#include <xercesc/util/XMemory.hpp>
17#include <icxercesc/util/QName.hpp>
18#include <icxercesc/framework/XMLElementDecl.hpp>
19#include <icxmlc/XMLConfig.hpp>
20
21XERCES_CPP_NAMESPACE_BEGIN
22
23class ContentLeafNameTypeVector;
24class GrammarResolver;
25class XMLStringPool;
26class XMLValidator;
27class SchemaGrammar;
28class SubstitutionGroupComparator;
29class XMLNamespaceResolver;
30
31/**
32 *  This class defines the abstract interface for all content models. All
33 *  elements have a content model against which (if validating) its content
34 *  is checked. Each type of validator (DTD, Schema, etc...) can have
35 *  different types of content models, and even with each type of validator
36 *  there can be specialized content models. So this simple class provides
37 *  the abstract API via which all the types of contents models are dealt
38 *  with generically. Its pretty simple.
39 */
40class XMLPARSER_EXPORT XMLContentModel : public XMemory
41{
42public:
43        // ---------------------------------------------------------------------------
44        //  Public static data
45        //
46        //  gInvalidTrans
47        //      This value represents an invalid transition in each line of the
48        //      transition table.
49        //
50        //  gEOCFakeId
51        //  gEpsilonFakeId
52        //      We have to put in a couple of special CMLeaf nodes to represent
53        //      special values, using fake element ids that we know won't conflict
54        //      with real element ids.
55        //
56        //
57        // ---------------------------------------------------------------------------
58        static const unsigned int   gInvalidTrans;
59        static const unsigned int   gEOCFakeId;
60        static const unsigned int   gEpsilonFakeId;
61
62        // -----------------------------------------------------------------------
63        //  Constructors are hidden, only the virtual Destructor is exposed
64        // -----------------------------------------------------------------------
65        /** @name Destructor */
66        //@{
67        virtual ~XMLContentModel()
68        {
69
70        }
71        //@}
72
73
74        // -----------------------------------------------------------------------
75        //  The virtual content model interface provided by derived classes
76        // -----------------------------------------------------------------------
77
78        virtual bool validateContent
79        (
80                XMLElementDecl ** const                 children
81          , XMLSize_t                                           childCount
82          , XMLSize_t*                                          indexFailingChild
83          , MemoryManager*  const                       manager = XMLPlatformUtils::fgMemoryManager
84        ) const = 0;
85
86        virtual bool validateContentSpecial
87        (
88                XMLElementDecl ** const                 children
89          , XMLSize_t                                           childCount
90          , GrammarResolver*  const                     pGrammarResolver
91          , XMLNamespaceResolver*    const      pUriResolver
92          , XMLSize_t*                                          indexFailingChild
93          , MemoryManager*    const                     manager = XMLPlatformUtils::fgMemoryManager
94        ) const = 0;
95
96        virtual void checkUniqueParticleAttribution
97        (
98                SchemaGrammar*    const                 pGrammar
99          , GrammarResolver*  const                     pGrammarResolver
100          , XMLNamespaceResolver*    const      pUriResolver
101          , XMLValidator*     const                     pValidator
102          , unsigned int*     const                     pContentSpecOrgURI
103          , const XMLCh*                                        pComplexTypeName = 0
104        ) = 0;
105
106        virtual bool validateContent
107        (
108                QName** const         children
109          , XMLSize_t             childCount
110          , unsigned int          emptyNamespaceId
111          , XMLSize_t*            indexFailingChild
112          , MemoryManager*  const manager = XMLPlatformUtils::fgMemoryManager
113        ) const = 0;
114
115        virtual bool validateContentSpecial
116        (
117                QName** const           children
118          , XMLSize_t               childCount
119          , unsigned int            emptyNamespaceId
120          , GrammarResolver*  const pGrammarResolver
121          , XMLStringPool*    const pStringPool
122          , XMLSize_t*              indexFailingChild
123          , MemoryManager*    const manager = XMLPlatformUtils::fgMemoryManager
124        ) const = 0;
125
126        virtual void checkUniqueParticleAttribution
127        (
128                SchemaGrammar*    const pGrammar
129          , GrammarResolver*  const pGrammarResolver
130          , XMLStringPool*    const pStringPool
131          , XMLValidator*     const pValidator
132          , unsigned int*     const pContentSpecOrgURI
133          , const XMLCh*            pComplexTypeName = 0
134        ) = 0;
135
136        virtual ContentLeafNameTypeVector* getContentLeafNameTypeVector() const = 0;
137
138        virtual unsigned int getNextState(unsigned int currentState,
139                                                                          XMLSize_t    elementIndex) const = 0;
140
141        virtual bool handleRepetitions( const QName* const curElem,
142                                                                        unsigned int curState,
143                                                                        unsigned int currentLoop,
144                                                                        unsigned int& nextState,
145                                                                        unsigned int& nextLoop,
146                                                                        XMLSize_t elementIndex,
147                                                                        SubstitutionGroupComparator * comparator) const = 0;
148
149        #ifdef PRINT_DEBUG_MESSAGE
150        virtual void debug_out(std::ostream & out) const = 0;
151        #endif
152
153protected :
154        // -----------------------------------------------------------------------
155        //  Hidden Constructors
156        // -----------------------------------------------------------------------
157        XMLContentModel()
158        {
159        }
160
161
162private :
163        // -----------------------------------------------------------------------
164        //  Unimplemented constructors and operators
165        // -----------------------------------------------------------------------
166        XMLContentModel(const XMLContentModel&);
167        XMLContentModel& operator=(const XMLContentModel&);
168};
169
170
171#ifdef PRINT_DEBUG_MESSAGE
172static std::ostream & operator << (std::ostream & out, const XMLContentModel * model)
173{
174        if (model)
175        {
176                model->debug_out(out);
177        }
178        return out;
179}
180#endif
181
182XERCES_CPP_NAMESPACE_END
183
184#endif
Note: See TracBrowser for help on using the repository browser.