00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179 #if !defined(SAXPARSER_HPP)
00180 #define SAXPARSER_HPP
00181
00182 #include <xercesc/sax/Parser.hpp>
00183 #include <xercesc/internal/VecAttrListImpl.hpp>
00184 #include <xercesc/framework/XMLDocumentHandler.hpp>
00185 #include <xercesc/framework/XMLElementDecl.hpp>
00186 #include <xercesc/framework/XMLEntityHandler.hpp>
00187 #include <xercesc/framework/XMLErrorReporter.hpp>
00188 #include <xercesc/validators/DTD/DocTypeHandler.hpp>
00189
00190 class DocumentHandler;
00191 class EntityResolver;
00192 class XMLPScanToken;
00193 class XMLScanner;
00194 class XMLValidator;
00195 class Grammar;
00196
00197
00207
00208 class SAXParser :
00209
00210 public Parser
00211 , public XMLDocumentHandler
00212 , public XMLErrorReporter
00213 , public XMLEntityHandler
00214 , public DocTypeHandler
00215 {
00216 public :
00217
00218
00219
00227
00228 enum ValSchemes
00229 {
00230 Val_Never
00231 , Val_Always
00232 , Val_Auto
00233 };
00234
00235
00236
00237
00238
00241
00242 * validation.
00243 * @param valToAdopt Pointer to the validator instance to use. The
00244 * parser is responsible for freeing the memory.
00245 */
00246 SAXParser(XMLValidator* const valToAdopt = 0);
00247
00251 ~SAXParser();
00253
00254
00255
00256
00257
00260
00266 DocumentHandler* getDocumentHandler();
00267
00274 const DocumentHandler* getDocumentHandler() const;
00275
00282 EntityResolver* getEntityResolver();
00283
00290 const EntityResolver* getEntityResolver() const;
00291
00298 ErrorHandler* getErrorHandler();
00299
00306 const ErrorHandler* getErrorHandler() const;
00307
00314 const XMLValidator& getValidator() const;
00315
00323 ValSchemes getValidationScheme() const;
00324
00335 bool getDoSchema() const;
00336
00347 bool getValidationSchemaFullChecking() const;
00348
00359 int getErrorCount() const;
00360
00370 bool getDoNamespaces() const;
00371
00381 bool getExitOnFirstFatalError() const;
00382
00393 bool getValidationConstraintFatal() const;
00394
00414 XMLCh* getExternalSchemaLocation() const;
00415
00435 XMLCh* getExternalNoNamespaceSchemaLocation() const;
00436
00448 bool getLoadExternalDTD() const;
00449
00460 bool isCachingGrammarFromParse() const;
00461
00472 bool isUsingCachedGrammarInParse() const;
00473
00480 Grammar* getGrammar(const XMLCh* const nameSpaceKey);
00481
00487 Grammar* getRootGrammar();
00488
00495 const XMLCh* getURIText(unsigned int uriId);
00496
00498
00499
00500
00501
00502
00503
00506
00519 void setDoNamespaces(const bool newState);
00520
00537 void setValidationScheme(const ValSchemes newScheme);
00538
00554 void setDoSchema(const bool newState);
00555
00572 void setValidationSchemaFullChecking(const bool schemaFullChecking);
00573
00589 void setExitOnFirstFatalError(const bool newState);
00590
00610 void setValidationConstraintFatal(const bool newState);
00611
00631
00632 void setExternalSchemaLocation(const XMLCh* const schemaLocation);
00633
00642 void setExternalSchemaLocation(const char* const schemaLocation);
00643
00658 void setExternalNoNamespaceSchemaLocation(const XMLCh* const noNamespaceSchemaLocation);
00659
00668 void setExternalNoNamespaceSchemaLocation(const char* const noNamespaceSchemaLocation);
00669
00686 void setLoadExternalDTD(const bool newState);
00687
00705 void cacheGrammarFromParse(const bool newState);
00706
00725 void useCachedGrammarInParse(const bool newState);
00726
00727
00729
00730
00731
00732
00733
00734
00737
00750 void installAdvDocHandler(XMLDocumentHandler* const toInstall);
00751
00761 bool removeAdvDocHandler(XMLDocumentHandler* const toRemove);
00763
00764
00765
00766
00767
00768
00771
00799 bool parseFirst
00800 (
00801 const XMLCh* const systemId
00802 , XMLPScanToken& toFill
00803 );
00804
00832 bool parseFirst
00833 (
00834 const char* const systemId
00835 , XMLPScanToken& toFill
00836 );
00837
00865 bool parseFirst
00866 (
00867 const InputSource& source
00868 , XMLPScanToken& toFill
00869 );
00870
00895 bool parseNext(XMLPScanToken& token);
00896
00918 void parseReset(XMLPScanToken& token);
00919
00921
00922
00923
00924
00925
00928
00955 Grammar* loadGrammar(const InputSource& source,
00956 const short grammarType,
00957 const bool toCache = false);
00958
00984 Grammar* loadGrammar(const XMLCh* const systemId,
00985 const short grammarType,
00986 const bool toCache = false);
00987
01012 Grammar* loadGrammar(const char* const systemId,
01013 const short grammarType,
01014 const bool toCache = false);
01015
01019 void resetCachedGrammarPool();
01020
01022
01023
01024
01025
01026
01027
01030
01039 virtual void parse(const InputSource& source);
01040
01050 virtual void parse(const XMLCh* const systemId);
01051
01059 virtual void parse(const char* const systemId);
01060
01071 virtual void setDocumentHandler(DocumentHandler* const handler);
01072
01082 virtual void setDTDHandler(DTDHandler* const handler);
01083
01094 virtual void setErrorHandler(ErrorHandler* const handler);
01095
01107 virtual void setEntityResolver(EntityResolver* const resolver);
01109
01110
01111
01112
01113
01114
01117
01132 virtual void docCharacters
01133 (
01134 const XMLCh* const chars
01135 , const unsigned int length
01136 , const bool cdataSection
01137 );
01138
01148 virtual void docComment
01149 (
01150 const XMLCh* const comment
01151 );
01152
01172 virtual void docPI
01173 (
01174 const XMLCh* const target
01175 , const XMLCh* const data
01176 );
01177
01189 virtual void endDocument();
01190
01210 virtual void endElement
01211 (
01212 const XMLElementDecl& elemDecl
01213 , const unsigned int urlId
01214 , const bool isRoot
01215 , const XMLCh* const elemPrefix
01216 );
01217
01228 virtual void endEntityReference
01229 (
01230 const XMLEntityDecl& entDecl
01231 );
01232
01252 virtual void ignorableWhitespace
01253 (
01254 const XMLCh* const chars
01255 , const unsigned int length
01256 , const bool cdataSection
01257 );
01258
01263 virtual void resetDocument();
01264
01275 virtual void startDocument();
01276
01303 virtual void startElement
01304 (
01305 const XMLElementDecl& elemDecl
01306 , const unsigned int urlId
01307 , const XMLCh* const elemPrefix
01308 , const RefVectorOf<XMLAttr>& attrList
01309 , const unsigned int attrCount
01310 , const bool isEmpty
01311 , const bool isRoot
01312 );
01313
01323 virtual void startEntityReference
01324 (
01325 const XMLEntityDecl& entDecl
01326 );
01327
01345 virtual void XMLDecl
01346 (
01347 const XMLCh* const versionStr
01348 , const XMLCh* const encodingStr
01349 , const XMLCh* const standaloneStr
01350 , const XMLCh* const actualEncodingStr
01351 );
01353
01354
01355
01356
01357
01358
01361
01384 virtual void error
01385 (
01386 const unsigned int errCode
01387 , const XMLCh* const msgDomain
01388 , const XMLErrorReporter::ErrTypes errType
01389 , const XMLCh* const errorText
01390 , const XMLCh* const systemId
01391 , const XMLCh* const publicId
01392 , const XMLSSize_t lineNum
01393 , const XMLSSize_t colNum
01394 );
01395
01404 virtual void resetErrors();
01406
01407
01408
01409
01410
01411
01414
01425 virtual void endInputSource(const InputSource& inputSource);
01426
01441 virtual bool expandSystemId
01442 (
01443 const XMLCh* const systemId
01444 , XMLBuffer& toFill
01445 );
01446
01454 virtual void resetEntities();
01455
01476 virtual InputSource* resolveEntity
01477 (
01478 const XMLCh* const publicId
01479 , const XMLCh* const systemId
01480 , const XMLCh* const baseURI = 0
01481 );
01482
01494 virtual void startInputSource(const InputSource& inputSource);
01496
01497
01498
01499
01500
01503
01517 virtual void attDef
01518 (
01519 const DTDElementDecl& elemDecl
01520 , const DTDAttDef& attDef
01521 , const bool ignore
01522 );
01523
01533 virtual void doctypeComment
01534 (
01535 const XMLCh* const comment
01536 );
01537
01556 virtual void doctypeDecl
01557 (
01558 const DTDElementDecl& elemDecl
01559 , const XMLCh* const publicId
01560 , const XMLCh* const systemId
01561 , const bool hasIntSubset
01562 , const bool hasExtSubset = false
01563 );
01564
01578 virtual void doctypePI
01579 (
01580 const XMLCh* const target
01581 , const XMLCh* const data
01582 );
01583
01595 virtual void doctypeWhitespace
01596 (
01597 const XMLCh* const chars
01598 , const unsigned int length
01599 );
01600
01613 virtual void elementDecl
01614 (
01615 const DTDElementDecl& decl
01616 , const bool isIgnored
01617 );
01618
01629 virtual void endAttList
01630 (
01631 const DTDElementDecl& elemDecl
01632 );
01633
01640 virtual void endIntSubset();
01641
01648 virtual void endExtSubset();
01649
01664 virtual void entityDecl
01665 (
01666 const DTDEntityDecl& entityDecl
01667 , const bool isPEDecl
01668 , const bool isIgnored
01669 );
01670
01675 virtual void resetDocType();
01676
01689 virtual void notationDecl
01690 (
01691 const XMLNotationDecl& notDecl
01692 , const bool isIgnored
01693 );
01694
01705 virtual void startAttList
01706 (
01707 const DTDElementDecl& elemDecl
01708 );
01709
01716 virtual void startIntSubset();
01717
01724 virtual void startExtSubset();
01725
01738 virtual void TextDecl
01739 (
01740 const XMLCh* const versionStr
01741 , const XMLCh* const encodingStr
01742 );
01744
01745
01746
01747
01748
01751
01761 bool getDoValidation() const;
01762
01776 void setDoValidation(const bool newState);
01778
01779
01780 protected :
01781
01782
01783
01790 const XMLScanner& getScanner() const;
01791
01792
01793 private:
01794
01795
01796
01797 SAXParser(const SAXParser&);
01798 void operator=(const SAXParser&);
01799
01800
01801
01802
01803
01804
01805
01806
01807
01808
01809
01810
01811
01812
01813
01814
01815
01816
01817
01818
01819
01820
01821
01822
01823
01824
01825
01826
01827
01828
01829
01830
01831
01832
01833
01834
01835
01836
01837
01838
01839
01840
01841
01842
01843
01844
01845
01846
01847
01848 VecAttrListImpl fAttrList;
01849 DocumentHandler* fDocHandler;
01850 DTDHandler* fDTDHandler;
01851 unsigned int fElemDepth;
01852 EntityResolver* fEntityResolver;
01853 ErrorHandler* fErrorHandler;
01854 unsigned int fAdvDHCount;
01855 XMLDocumentHandler** fAdvDHList;
01856 unsigned int fAdvDHListSize;
01857 bool fParseInProgress;
01858 XMLScanner* fScanner;
01859 };
01860
01861
01862
01863
01864
01865 inline DocumentHandler* SAXParser::getDocumentHandler()
01866 {
01867 return fDocHandler;
01868 }
01869
01870 inline const DocumentHandler* SAXParser::getDocumentHandler() const
01871 {
01872 return fDocHandler;
01873 }
01874
01875 inline EntityResolver* SAXParser::getEntityResolver()
01876 {
01877 return fEntityResolver;
01878 }
01879
01880 inline const EntityResolver* SAXParser::getEntityResolver() const
01881 {
01882 return fEntityResolver;
01883 }
01884
01885 inline ErrorHandler* SAXParser::getErrorHandler()
01886 {
01887 return fErrorHandler;
01888 }
01889
01890 inline const ErrorHandler* SAXParser::getErrorHandler() const
01891 {
01892 return fErrorHandler;
01893 }
01894
01895 inline const XMLScanner& SAXParser::getScanner() const
01896 {
01897 return *fScanner;
01898 }
01899
01900 #endif