00001 /* 00002 * The Apache Software License, Version 1.1 00003 * 00004 * Copyright (c) 1999-2001 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: XMLContentModel.hpp,v $ 00059 * Revision 1.1 2002/05/11 20:01:55 bhavani 00060 * CR#CR062582# adding xercesc 1.7 file 00061 * 00062 * Revision 1.1.1.1 2002/02/01 22:21:51 peiyongz 00063 * sane_include 00064 * 00065 * Revision 1.14 2001/11/21 14:30:13 knoaman 00066 * Fix for UPA checking. 00067 * 00068 * Revision 1.13 2001/08/21 16:06:10 tng 00069 * Schema: Unique Particle Attribution Constraint Checking. 00070 * 00071 * Revision 1.12 2001/08/13 15:06:38 knoaman 00072 * update <any> validation. 00073 * 00074 * Revision 1.11 2001/05/28 20:53:35 tng 00075 * Schema: move static data gInvalidTrans, gEOCFakeId, gEpsilonFakeId to XMLContentModel for others to access 00076 * 00077 * Revision 1.10 2001/05/11 13:25:31 tng 00078 * Copyright update. 00079 * 00080 * Revision 1.9 2001/05/03 21:02:23 tng 00081 * Schema: Add SubstitutionGroupComparator and update exception messages. By Pei Yong Zhang. 00082 * 00083 * Revision 1.8 2001/04/19 18:16:50 tng 00084 * Schema: SchemaValidator update, and use QName in Content Model 00085 * 00086 * Revision 1.7 2001/03/21 21:56:01 tng 00087 * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar. 00088 * 00089 * Revision 1.6 2001/02/27 14:48:30 tng 00090 * Schema: Add CMAny and ContentLeafNameTypeVector, by Pei Yong Zhang 00091 * 00092 * Revision 1.5 2000/03/02 19:54:24 roddey 00093 * This checkin includes many changes done while waiting for the 00094 * 1.1.0 code to be finished. I can't list them all here, but a list is 00095 * available elsewhere. 00096 * 00097 * Revision 1.4 2000/02/24 20:00:23 abagchi 00098 * Swat for removing Log from API docs 00099 * 00100 * Revision 1.3 2000/02/15 01:21:30 roddey 00101 * Some initial documentation improvements. More to come... 00102 * 00103 * Revision 1.2 2000/02/06 07:47:48 rahulj 00104 * Year 2K copyright swat. 00105 * 00106 * Revision 1.1.1.1 1999/11/09 01:08:30 twl 00107 * Initial checkin 00108 * 00109 * Revision 1.2 1999/11/08 20:44:37 rahul 00110 * Swat for adding in Product name and CVS comment log variable. 00111 * 00112 */ 00113 00114 00115 #if !defined(CONTENTMODEL_HPP) 00116 #define CONTENTMODEL_HPP 00117 00118 #include <xercesc/util/XercesDefs.hpp> 00119 #include <xercesc/util/RefVectorOf.hpp> 00120 #include <xercesc/util/QName.hpp> 00121 00122 class ContentLeafNameTypeVector; 00123 class GrammarResolver; 00124 class XMLStringPool; 00125 class XMLValidator; 00126 class SchemaGrammar; 00127 00137 class XMLPARSER_EXPORT XMLContentModel 00138 { 00139 public: 00140 // --------------------------------------------------------------------------- 00141 // Public static data 00142 // 00143 // gInvalidTrans 00144 // This value represents an invalid transition in each line of the 00145 // transition table. 00146 // 00147 // gEOCFakeId 00148 // gEpsilonFakeId 00149 // We have to put in a couple of special CMLeaf nodes to represent 00150 // special values, using fake element ids that we know won't conflict 00151 // with real element ids. 00152 // 00153 // 00154 // --------------------------------------------------------------------------- 00155 static const unsigned int gInvalidTrans; 00156 static const unsigned int gEOCFakeId; 00157 static const unsigned int gEpsilonFakeId; 00158 00159 // ----------------------------------------------------------------------- 00160 // Constructors are hidden, only the virtual Destructor is exposed 00161 // ----------------------------------------------------------------------- 00164 virtual ~XMLContentModel() 00165 { 00166 } 00168 00169 00170 // ----------------------------------------------------------------------- 00171 // The virtual content model interface provided by derived classes 00172 // ----------------------------------------------------------------------- 00173 virtual int validateContent 00174 ( 00175 QName** const children 00176 , const unsigned int childCount 00177 , const unsigned int emptyNamespaceId 00178 ) const = 0; 00179 00180 virtual int validateContentSpecial 00181 ( 00182 QName** const children 00183 , const unsigned int childCount 00184 , const unsigned int emptyNamespaceId 00185 , GrammarResolver* const pGrammarResolver 00186 , XMLStringPool* const pStringPool 00187 ) const =0; 00188 00189 virtual void checkUniqueParticleAttribution 00190 ( 00191 SchemaGrammar* const pGrammar 00192 , GrammarResolver* const pGrammarResolver 00193 , XMLStringPool* const pStringPool 00194 , XMLValidator* const pValidator 00195 , unsigned int* const pContentSpecOrgURI 00196 ) =0; 00197 00198 virtual ContentLeafNameTypeVector* getContentLeafNameTypeVector() 00199 const = 0; 00200 00201 virtual unsigned int getNextState(const unsigned int currentState, 00202 const unsigned int elementIndex) const = 0; 00203 00204 protected : 00205 // ----------------------------------------------------------------------- 00206 // Hidden Constructors 00207 // ----------------------------------------------------------------------- 00208 XMLContentModel() 00209 { 00210 } 00211 00212 00213 private : 00214 // ----------------------------------------------------------------------- 00215 // Unimplemented constructors and operators 00216 // ----------------------------------------------------------------------- 00217 XMLContentModel(const XMLContentModel&); 00218 void operator=(const XMLContentModel&); 00219 }; 00220 00221 #endif