http://xml.apache.org/http://www.apache.org/http://www.w3.org/

Home

Readme
Release Info

Installation
Download
Build

FAQs
Samples
API Docs

DOM C++ Binding
Programming
Migration Guide

Feedback
Bug-Reporting
PDF Document

CVS Repository
Mail Archive

API Docs for SAX and DOM
 

Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

XMLValidator.hpp

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


Copyright © 2000 The Apache Software Foundation. All Rights Reserved.