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: XMLValidator.hpp,v $ 00059 * Revision 1.1 2002/05/11 20:04:27 bhavani 00060 * CR#CR062582# adding xercesc 1.7 file 00061 * 00062 * Revision 1.2 2002/02/20 18:17:01 tng 00063 * [Bug 5977] Warnings on generating apiDocs. 00064 * 00065 * Revision 1.1.1.1 2002/02/01 22:21:52 peiyongz 00066 * sane_include 00067 * 00068 * Revision 1.17 2001/11/30 22:18:18 peiyongz 00069 * cleanUp function made member function 00070 * cleanUp object moved to file scope 00071 * double mutex lock removed 00072 * 00073 * Revision 1.16 2001/11/13 13:24:46 tng 00074 * Deprecate function XMLValidator::checkRootElement. 00075 * 00076 * Revision 1.15 2001/10/24 23:46:52 peiyongz 00077 * [Bug 4342] fix the leak. 00078 * 00079 * Revision 1.14 2001/06/05 16:51:17 knoaman 00080 * Add 'const' to getGrammar - submitted by Peter A. Volchek. 00081 * 00082 * Revision 1.13 2001/05/11 13:25:33 tng 00083 * Copyright update. 00084 * 00085 * Revision 1.12 2001/05/03 20:34:22 tng 00086 * Schema: SchemaValidator update 00087 * 00088 * Revision 1.11 2001/04/19 18:16:53 tng 00089 * Schema: SchemaValidator update, and use QName in Content Model 00090 * 00091 * Revision 1.10 2001/03/21 21:56:03 tng 00092 * Schema: Add Schema Grammar, Schema Validator, and split the DTDValidator into DTDValidator, DTDScanner, and DTDGrammar. 00093 * 00094 * Revision 1.9 2001/02/26 19:21:33 tng 00095 * Schema: add parameter prefix in findElem and findAttr. 00096 * 00097 * Revision 1.8 2000/12/14 18:49:58 tng 00098 * Fix API document generation warning: "Warning: end of member group without matching begin" 00099 * 00100 * Revision 1.7 2000/08/09 22:09:09 jpolast 00101 * added const XMLCh* getURIText() 00102 * allows parsers to use const URIs instead of appending 00103 * to a XMLBuffer. 00104 * 00105 * Revision 1.6 2000/03/02 19:54:25 roddey 00106 * This checkin includes many changes done while waiting for the 00107 * 1.1.0 code to be finished. I can't list them all here, but a list is 00108 * available elsewhere. 00109 * 00110 * Revision 1.5 2000/02/24 20:00:24 abagchi 00111 * Swat for removing Log from API docs 00112 * 00113 * Revision 1.4 2000/02/15 23:59:07 roddey 00114 * More updated documentation of Framework classes. 00115 * 00116 * Revision 1.3 2000/02/15 01:21:31 roddey 00117 * Some initial documentation improvements. More to come... 00118 * 00119 * Revision 1.2 2000/02/06 07:47:49 rahulj 00120 * Year 2K copyright swat. 00121 * 00122 * Revision 1.1.1.1 1999/11/09 01:08:38 twl 00123 * Initial checkin 00124 * 00125 * Revision 1.4 1999/11/08 20:44:41 rahul 00126 * Swat for adding in Product name and CVS comment log variable. 00127 * 00128 */ 00129 00130 00131 #if !defined(XMLVALIDATOR_HPP) 00132 #define XMLVALIDATOR_HPP 00133 00134 #include <xercesc/util/XercesDefs.hpp> 00135 #include <xercesc/framework/XMLAttr.hpp> 00136 #include <xercesc/framework/XMLValidityCodes.hpp> 00137 #include <xercesc/framework/XMLRefInfo.hpp> 00138 00139 class ReaderMgr; 00140 class XMLBuffer; 00141 class XMLBufferMgr; 00142 class XMLElementDecl; 00143 class XMLEntityHandler; 00144 class XMLErrorReporter; 00145 class XMLMsgLoader; 00146 class XMLScanner; 00147 class Grammar; 00148 00149 00165 class XMLPARSER_EXPORT XMLValidator 00166 { 00167 public: 00168 // ----------------------------------------------------------------------- 00169 // Constructors are hidden, just the virtual destructor is exposed 00170 // ----------------------------------------------------------------------- 00171 00174 00179 virtual ~XMLValidator() 00180 { 00181 } 00183 00184 00185 // ----------------------------------------------------------------------- 00186 // The virtual validator interface 00187 // ----------------------------------------------------------------------- 00188 00191 00211 virtual int checkContent 00212 ( 00213 XMLElementDecl* const elemDecl 00214 , QName** const children 00215 , const unsigned int childCount 00216 ) = 0; 00217 00226 virtual void faultInAttr 00227 ( 00228 XMLAttr& toFill 00229 , const XMLAttDef& attDef 00230 ) const = 0; 00231 00235 virtual void preContentValidation(bool reuseGrammar) = 0; 00236 00244 virtual void postParseValidation() = 0; 00245 00251 virtual void reset() = 0; 00252 00259 virtual bool requiresNamespaces() const = 0; 00260 00271 virtual void validateAttrValue 00272 ( 00273 const XMLAttDef* attDef 00274 , const XMLCh* const attrValue 00275 ) = 0; 00276 00284 virtual void validateElement 00285 ( 00286 const XMLElementDecl* elemDef 00287 ) = 0; 00288 00292 virtual Grammar* getGrammar() const =0; 00293 00297 virtual void setGrammar(Grammar* aGrammar) =0; 00298 00299 00301 00302 // ----------------------------------------------------------------------- 00303 // Virtual DTD handler interface. 00304 // ----------------------------------------------------------------------- 00305 00308 00313 virtual bool handlesDTD() const = 0; 00314 00315 // ----------------------------------------------------------------------- 00316 // Virtual Schema handler interface. 00317 // ----------------------------------------------------------------------- 00318 00325 virtual bool handlesSchema() const = 0; 00326 00328 00329 // ----------------------------------------------------------------------- 00330 // Setter methods 00331 // 00332 // setScannerInfo() is called by the scanner to tell the validator 00333 // about the stuff it needs to have access to. 00334 // ----------------------------------------------------------------------- 00335 00338 00352 void setScannerInfo 00353 ( 00354 XMLScanner* const owningScanner 00355 , ReaderMgr* const readerMgr 00356 , XMLBufferMgr* const bufMgr 00357 ); 00358 00368 void setErrorReporter 00369 ( 00370 XMLErrorReporter* const errorReporter 00371 ); 00372 00374 00375 00376 // ----------------------------------------------------------------------- 00377 // Error emitter methods 00378 // ----------------------------------------------------------------------- 00379 00382 00401 void emitError(const XMLValid::Codes toEmit); 00402 void emitError 00403 ( 00404 const XMLValid::Codes toEmit 00405 , const XMLCh* const text1 00406 , const XMLCh* const text2 = 0 00407 , const XMLCh* const text3 = 0 00408 , const XMLCh* const text4 = 0 00409 ); 00410 void emitError 00411 ( 00412 const XMLValid::Codes toEmit 00413 , const char* const text1 00414 , const char* const text2 = 0 00415 , const char* const text3 = 0 00416 , const char* const text4 = 0 00417 ); 00418 00420 00421 // ----------------------------------------------------------------------- 00422 // Deprecated XMLValidator interface 00423 // ----------------------------------------------------------------------- 00431 bool checkRootElement 00432 ( 00433 const unsigned int elemId 00434 ) { return true;}; 00435 00436 // ----------------------------------------------------------------------- 00437 // Notification that lazy data has been deleted 00438 // ----------------------------------------------------------------------- 00439 static void reinitMsgMutex(); 00440 00441 static void reinitMsgLoader(); 00442 00443 protected : 00444 // ----------------------------------------------------------------------- 00445 // Hidden constructors 00446 // ----------------------------------------------------------------------- 00447 XMLValidator 00448 ( 00449 XMLErrorReporter* const errReporter = 0 00450 ); 00451 00452 00453 // ----------------------------------------------------------------------- 00454 // Protected getters 00455 // ----------------------------------------------------------------------- 00456 const XMLBufferMgr* getBufMgr() const; 00457 XMLBufferMgr* getBufMgr(); 00458 const ReaderMgr* getReaderMgr() const; 00459 ReaderMgr* getReaderMgr(); 00460 const XMLScanner* getScanner() const; 00461 XMLScanner* getScanner(); 00462 00463 00464 private : 00465 // ----------------------------------------------------------------------- 00466 // Unimplemented Constructors and Operators 00467 // ----------------------------------------------------------------------- 00468 XMLValidator(const XMLValidator&); 00469 void operator=(const XMLValidator&); 00470 00471 00472 // ----------------------------------------------------------------------- 00473 // Private data members 00474 // 00475 // fErrorReporter 00476 // The error reporter we are to use, if any. 00477 // 00478 // ----------------------------------------------------------------------- 00479 XMLBufferMgr* fBufMgr; 00480 XMLErrorReporter* fErrorReporter; 00481 ReaderMgr* fReaderMgr; 00482 XMLScanner* fScanner; 00483 00484 }; 00485 00486 00487 // ----------------------------------------------------------------------- 00488 // Setter methods 00489 // ----------------------------------------------------------------------- 00490 inline void 00491 XMLValidator::setScannerInfo(XMLScanner* const owningScanner 00492 , ReaderMgr* const readerMgr 00493 , XMLBufferMgr* const bufMgr) 00494 { 00495 // We don't own any of these, we just reference them 00496 fScanner = owningScanner; 00497 fReaderMgr = readerMgr; 00498 fBufMgr = bufMgr; 00499 } 00500 00501 inline void 00502 XMLValidator::setErrorReporter(XMLErrorReporter* const errorReporter) 00503 { 00504 fErrorReporter = errorReporter; 00505 } 00506 00507 00508 // --------------------------------------------------------------------------- 00509 // XMLValidator: Protected getter 00510 // --------------------------------------------------------------------------- 00511 inline const XMLBufferMgr* XMLValidator::getBufMgr() const 00512 { 00513 return fBufMgr; 00514 } 00515 00516 inline XMLBufferMgr* XMLValidator::getBufMgr() 00517 { 00518 return fBufMgr; 00519 } 00520 00521 inline const ReaderMgr* XMLValidator::getReaderMgr() const 00522 { 00523 return fReaderMgr; 00524 } 00525 00526 inline ReaderMgr* XMLValidator::getReaderMgr() 00527 { 00528 return fReaderMgr; 00529 } 00530 00531 inline const XMLScanner* XMLValidator::getScanner() const 00532 { 00533 return fScanner; 00534 } 00535 00536 inline XMLScanner* XMLValidator::getScanner() 00537 { 00538 return fScanner; 00539 } 00540 00541 00542 #endif