20 #ifndef _SCHEMAVALIDATORFILTER_HPP
21 #define _SCHEMAVALIDATORFILTER_HPP
27 #include <xercesc/framework/XMLDocumentHandler.hpp>
28 #include <xercesc/framework/XMLErrorReporter.hpp>
29 #include <xercesc/validators/schema/SchemaValidator.hpp>
30 #include <xercesc/validators/schema/identity/IdentityConstraintHandler.hpp>
31 #include <xercesc/internal/XMLScanner.hpp>
32 #include <xercesc/util/RefHash3KeysIdPool.hpp>
37 #if _XERCES_VERSION < 30000
49 public XERCES_CPP_NAMESPACE_QUALIFIER XMLScanner,
50 private XERCES_CPP_NAMESPACE_QUALIFIER XMLDocumentHandler,
51 private XERCES_CPP_NAMESPACE_QUALIFIER XMLErrorReporter
55 XERCES_CPP_NAMESPACE_QUALIFIER MemoryManager *mm,
const LocationInfo *info);
62 virtual void startElementEvent(
const XMLCh *prefix,
const XMLCh *uri,
const XMLCh *localname);
63 virtual void endElementEvent(
const XMLCh *prefix,
const XMLCh *uri,
const XMLCh *localname,
64 const XMLCh *typeURI,
const XMLCh *typeName);
65 virtual void piEvent(
const XMLCh *target,
const XMLCh *value);
66 virtual void textEvent(
const XMLCh *value);
67 virtual void textEvent(
const XMLCh *chars,
unsigned int length);
69 virtual void attributeEvent(
const XMLCh *prefix,
const XMLCh *uri,
const XMLCh *localname,
const XMLCh *value,
70 const XMLCh *typeURI,
const XMLCh *typeName);
71 virtual void namespaceEvent(
const XMLCh *prefix,
const XMLCh *uri);
75 virtual const XMLCh *getName()
const {
return 0; }
76 virtual XERCES_CPP_NAMESPACE_QUALIFIER NameIdPool<XERCES_CPP_NAMESPACE_QUALIFIER DTDEntityDecl> *getEntityDeclPool() {
return 0; }
77 virtual const XERCES_CPP_NAMESPACE_QUALIFIER NameIdPool<XERCES_CPP_NAMESPACE_QUALIFIER DTDEntityDecl> *getEntityDeclPool()
const {
return 0; }
78 #if _XERCES_VERSION < 30100
79 virtual unsigned int resolveQName(
const XMLCh *
const qName, XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer &prefixBufToFill,
80 const short mode,
int &prefixColonPos);
82 virtual void scanDocument(
const XERCES_CPP_NAMESPACE_QUALIFIER InputSource &src) {}
83 virtual bool scanNext(XERCES_CPP_NAMESPACE_QUALIFIER XMLPScanToken &toFill) {
return false; }
84 virtual XERCES_CPP_NAMESPACE_QUALIFIER Grammar *loadGrammar(
const XERCES_CPP_NAMESPACE_QUALIFIER InputSource &src,
85 const short grammarType,
const bool toCache) {
return 0; }
87 virtual void scanCDSection() {}
88 virtual void scanCharData(XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer &toToUse) {}
89 virtual EntityExpRes scanEntityRef(
const bool inAttVal, XMLCh &firstCh, XMLCh &secondCh,
90 bool &escaped) {
return EntityExp_Returned; }
91 virtual void scanDocTypeDecl() {}
92 virtual void scanReset(
const XERCES_CPP_NAMESPACE_QUALIFIER InputSource &src) {}
93 virtual void sendCharData(XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer &toSend) {}
96 virtual void startDocument() {}
97 virtual void endDocument() {}
98 virtual void resetDocument() {}
99 #if _XERCES_VERSION >= 30000
100 virtual void startElement(
const XERCES_CPP_NAMESPACE_QUALIFIER XMLElementDecl& elemDecl,
const unsigned int urlId,
101 const XMLCh*
const elemPrefix,
102 const XERCES_CPP_NAMESPACE_QUALIFIER RefVectorOf<XERCES_CPP_NAMESPACE_QUALIFIER XMLAttr>& attrList,
103 const XMLSize_t attrCount,
const bool isEmpty,
const bool isRoot) {}
104 virtual void docCharacters(
const XMLCh*
const chars,
const XMLSize_t length,
const bool cdataSection);
105 virtual void ignorableWhitespace(
const XMLCh*
const chars,
const XMLSize_t length,
const bool cdataSection) {}
107 virtual void startElement(
const XERCES_CPP_NAMESPACE_QUALIFIER XMLElementDecl& elemDecl,
const unsigned int urlId,
108 const XMLCh*
const elemPrefix,
109 const XERCES_CPP_NAMESPACE_QUALIFIER RefVectorOf<XERCES_CPP_NAMESPACE_QUALIFIER XMLAttr>& attrList,
110 const unsigned int attrCount,
const bool isEmpty,
const bool isRoot) {}
111 virtual void docCharacters(
const XMLCh*
const chars,
const unsigned int length,
const bool cdataSection);
112 virtual void ignorableWhitespace(
const XMLCh*
const chars,
const unsigned int length,
const bool cdataSection) {}
114 virtual void endElement(
const XERCES_CPP_NAMESPACE_QUALIFIER XMLElementDecl& elemDecl,
const unsigned int urlId,
115 const bool isRoot,
const XMLCh*
const elemPrefix=0) {}
116 virtual void docComment(
const XMLCh*
const comment) {}
117 virtual void docPI(
const XMLCh*
const target,
const XMLCh*
const data) {}
118 virtual void startEntityReference(
const XERCES_CPP_NAMESPACE_QUALIFIER XMLEntityDecl& entDecl) {}
119 virtual void endEntityReference(
const XERCES_CPP_NAMESPACE_QUALIFIER XMLEntityDecl& entDecl) {}
120 virtual void XMLDecl(
const XMLCh*
const versionStr,
const XMLCh*
const encodingStr,
const XMLCh*
const standaloneStr,
121 const XMLCh*
const actualEncodingStr) {}
124 virtual void resetErrors() {}
125 virtual void error(
const unsigned int errCode,
const XMLCh*
const errDomain,
const XMLErrorReporter::ErrTypes type,
const XMLCh*
const errorText,
126 const XMLCh*
const systemId,
const XMLCh*
const publicId,
const XMLFileLoc lineNum,
const XMLFileLoc colNum);
129 void processStartElement();
130 void processAttrs(XERCES_CPP_NAMESPACE_QUALIFIER XMLElementDecl *elemDecl);
132 bool switchGrammar(
const XMLCh *uri);
133 bool laxElementValidation(XERCES_CPP_NAMESPACE_QUALIFIER QName* element,
134 XERCES_CPP_NAMESPACE_QUALIFIER ContentLeafNameTypeVector* cv,
135 const XERCES_CPP_NAMESPACE_QUALIFIER XMLContentModel *cm,
136 unsigned int parentElemDepth);
137 bool anyAttributeValidation(XERCES_CPP_NAMESPACE_QUALIFIER SchemaAttDef* attWildCard,
unsigned int uriId,
bool& skipThisOne,
bool& laxThisOne);
138 XERCES_CPP_NAMESPACE_QUALIFIER XMLElementDecl *createElementDecl(
unsigned int uriId,
unsigned int currentScope,
143 XERCES_CPP_NAMESPACE_QUALIFIER SchemaValidator *fSchemaValidator;
144 XERCES_CPP_NAMESPACE_QUALIFIER SchemaGrammar *fSchemaGrammar;
145 XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer fContent;
146 XERCES_CPP_NAMESPACE_QUALIFIER IdentityConstraintHandler *fICHandler;
147 XERCES_CPP_NAMESPACE_QUALIFIER RefHash3KeysIdPool<XERCES_CPP_NAMESPACE_QUALIFIER SchemaElementDecl> *fElemNonDeclPool;
149 bool strictValidation_;
152 XERCES_CPP_NAMESPACE_QUALIFIER ElemStack::StackElem *parentStack_;
153 unsigned int elemDepth_;
154 XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer prefix_;
155 XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer uri_;
156 XERCES_CPP_NAMESPACE_QUALIFIER XMLBuffer localname_;
157 bool elementToProcess_;
158 const XMLCh *xsiType_;
159 unsigned int attrCount_;