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

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

Initial check-in of icXML 0.8 source files

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