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

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

Various fixes

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#ifdef TEST_NAMESPACE_RESOLVER
79        virtual bool validateContent
80        (
81                XMLElementDecl ** const                 children
82          , XMLSize_t                                           childCount
83          , XMLSize_t*                                          indexFailingChild
84          , MemoryManager*  const                       manager = XMLPlatformUtils::fgMemoryManager
85        ) const = 0;
86
87        virtual bool validateContentSpecial
88        (
89                XMLElementDecl ** const                 children
90          , XMLSize_t                                           childCount
91          , GrammarResolver*  const                     pGrammarResolver
92          , XMLNamespaceResolver*    const      pUriResolver
93          , XMLSize_t*                                          indexFailingChild
94          , MemoryManager*    const                     manager = XMLPlatformUtils::fgMemoryManager
95        ) const = 0;
96
97        virtual void checkUniqueParticleAttribution
98        (
99                SchemaGrammar*    const                 pGrammar
100          , GrammarResolver*  const                     pGrammarResolver
101          , XMLNamespaceResolver*    const      pUriResolver
102          , XMLValidator*     const                     pValidator
103          , unsigned int*     const                     pContentSpecOrgURI
104          , const XMLCh*                                        pComplexTypeName = 0
105        ) = 0;
106#endif
107
108        virtual bool validateContent
109        (
110                QName** const         children
111          , XMLSize_t             childCount
112          , unsigned int          emptyNamespaceId
113          , XMLSize_t*            indexFailingChild
114          , MemoryManager*  const manager = XMLPlatformUtils::fgMemoryManager
115        ) const = 0;
116
117        virtual bool validateContentSpecial
118        (
119                QName** const           children
120          , XMLSize_t               childCount
121          , unsigned int            emptyNamespaceId
122          , GrammarResolver*  const pGrammarResolver
123          , XMLStringPool*    const pStringPool
124          , XMLSize_t*              indexFailingChild
125          , MemoryManager*    const manager = XMLPlatformUtils::fgMemoryManager
126        ) const = 0;
127
128        virtual void checkUniqueParticleAttribution
129        (
130                SchemaGrammar*    const pGrammar
131          , GrammarResolver*  const pGrammarResolver
132          , XMLStringPool*    const pStringPool
133          , XMLValidator*     const pValidator
134          , unsigned int*     const pContentSpecOrgURI
135          , const XMLCh*            pComplexTypeName = 0
136        ) = 0;
137
138        virtual ContentLeafNameTypeVector* getContentLeafNameTypeVector() const = 0;
139
140        virtual unsigned int getNextState(unsigned int currentState,
141                                                                          XMLSize_t    elementIndex) const = 0;
142
143        virtual bool handleRepetitions( const QName* const curElem,
144                                                                        unsigned int curState,
145                                                                        unsigned int currentLoop,
146                                                                        unsigned int& nextState,
147                                                                        unsigned int& nextLoop,
148                                                                        XMLSize_t elementIndex,
149                                                                        SubstitutionGroupComparator * comparator) const = 0;
150
151        #ifdef PRINT_DEBUG_MESSAGE
152        virtual void debug_out(std::ostream & out) const = 0;
153        #endif
154
155protected :
156        // -----------------------------------------------------------------------
157        //  Hidden Constructors
158        // -----------------------------------------------------------------------
159        XMLContentModel()
160        {
161        }
162
163
164private :
165        // -----------------------------------------------------------------------
166        //  Unimplemented constructors and operators
167        // -----------------------------------------------------------------------
168        XMLContentModel(const XMLContentModel&);
169        XMLContentModel& operator=(const XMLContentModel&);
170};
171
172
173#ifdef PRINT_DEBUG_MESSAGE
174static std::ostream & operator << (std::ostream & out, const XMLContentModel * model)
175{
176        if (model)
177        {
178                model->debug_out(out);
179        }
180        return out;
181}
182#endif
183
184XERCES_CPP_NAMESPACE_END
185
186#endif
Note: See TracBrowser for help on using the repository browser.