diff --git a/src/xercesc/validators/schema/GeneralAttributeCheck.cpp b/src/xercesc/validators/schema/GeneralAttributeCheck.cpp index cbc15858c96a71741d84ae5589227f501773f0c2..341d6ded76c8de779b15f648e734a63e1a08ba0d 100644 --- a/src/xercesc/validators/schema/GeneralAttributeCheck.cpp +++ b/src/xercesc/validators/schema/GeneralAttributeCheck.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.16 2003/11/12 20:35:31 peiyongz + * Stateless Grammar: ValidationContext + * * Revision 1.15 2003/10/20 15:57:22 knoaman * Fix multithreading problem. * @@ -225,7 +228,7 @@ DatatypeValidator* GeneralAttributeCheck::fAnyURIDV = 0; // --------------------------------------------------------------------------- GeneralAttributeCheck::GeneralAttributeCheck(MemoryManager* const manager) : fMemoryManager(manager) - , fIDRefList(0) + , fValidationContext(0) , fIDValidator(manager) { mapElements(); @@ -417,7 +420,7 @@ GeneralAttributeCheck::checkAttributes(const DOMElement* const elem, const XMLCh* attrVal = attribute->getNodeValue(); try { - dv->validate(attrVal); + dv->validate(attrVal, fValidationContext); } catch(const XMLException& excep) { schema->reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::DisplayErrorMessage, excep.getMessage()); @@ -550,17 +553,16 @@ void GeneralAttributeCheck::validate(const DOMElement* const elem, dv = fAnyURIDV; break; case DV_ID: - if (fIDRefList) { - + if (fValidationContext) + { dv = &fIDValidator; - ((IDDatatypeValidator*) dv)->setIDRefList(fIDRefList); } break; } if (dv) { try { - dv->validate(attValue); + dv->validate(attValue, fValidationContext); } catch(const XMLException& excep) { schema->reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::DisplayErrorMessage, excep.getMessage()); diff --git a/src/xercesc/validators/schema/GeneralAttributeCheck.hpp b/src/xercesc/validators/schema/GeneralAttributeCheck.hpp index 25c5ff486366e46ac0367102d5f50b80df4fe3d0..a1b320214c282d248732e4d0c3c75e368059ca8b 100644 --- a/src/xercesc/validators/schema/GeneralAttributeCheck.hpp +++ b/src/xercesc/validators/schema/GeneralAttributeCheck.hpp @@ -72,6 +72,7 @@ #include <xercesc/util/RefHashTableOf.hpp> #include <xercesc/util/ValueHashTableOf.hpp> #include <xercesc/validators/datatype/IDDatatypeValidator.hpp> +#include <xercesc/framework/ValidationContext.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -228,8 +229,12 @@ public: // ----------------------------------------------------------------------- // Setter methods // ----------------------------------------------------------------------- + + //deprecated void setIDRefList(RefHashTableOf<XMLRefInfo>* const refList); + inline void setValidationContext(ValidationContext* const); + // ----------------------------------------------------------------------- // Validation methods // ----------------------------------------------------------------------- @@ -284,7 +289,7 @@ private: static unsigned short fgElemAttTable[E_Count][A_Count]; static const XMLCh* fAttNames[A_Count]; MemoryManager* fMemoryManager; - RefHashTableOf<XMLRefInfo>* fIDRefList; + ValidationContext* fValidationContext; IDDatatypeValidator fIDValidator; }; @@ -301,10 +306,15 @@ GeneralAttributeCheck::getFacetId(const XMLCh* const facetName) { // --------------------------------------------------------------------------- // GeneralAttributeCheck: Setter methods // --------------------------------------------------------------------------- +inline void GeneralAttributeCheck::setValidationContext(ValidationContext* const newValidationContext) +{ + fValidationContext = newValidationContext; +} + inline void GeneralAttributeCheck::setIDRefList(RefHashTableOf<XMLRefInfo>* const refList) { - fIDRefList = refList; + fValidationContext->setIdRefList(refList); } XERCES_CPP_NAMESPACE_END diff --git a/src/xercesc/validators/schema/SchemaGrammar.cpp b/src/xercesc/validators/schema/SchemaGrammar.cpp index 11e080814348927fe37a2ea098dfbacf3c80c57d..5b6bb71637ef795fda87971b3475d41810074b88 100644 --- a/src/xercesc/validators/schema/SchemaGrammar.cpp +++ b/src/xercesc/validators/schema/SchemaGrammar.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.17 2003/11/12 20:35:31 peiyongz + * Stateless Grammar: ValidationContext + * * Revision 1.16 2003/11/11 22:48:13 knoaman * Serialization of XSAnnotation. * @@ -156,6 +159,7 @@ #include <xercesc/framework/psvi/XSAnnotation.hpp> #include <xercesc/internal/XTemplateSerializer.hpp> +#include <xercesc/internal/ValidationContextImpl.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -174,7 +178,7 @@ SchemaGrammar::SchemaGrammar(MemoryManager* const manager) : , fAttGroupInfoRegistry(0) , fNamespaceScope(0) , fValidSubstitutionGroups(0) - , fIDRefList(0) + , fValidationContext(0) , fMemoryManager(manager) , fValidated(false) , fDatatypeRegistry(manager) @@ -195,7 +199,7 @@ SchemaGrammar::SchemaGrammar(MemoryManager* const manager) : // fElemNonDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(29, true, 128, fMemoryManager); fGroupElemDeclPool = new (fMemoryManager) RefHash3KeysIdPool<SchemaElementDecl>(109, false, 128, fMemoryManager); fNotationDeclPool = new (fMemoryManager) NameIdPool<XMLNotationDecl>(109, 128, fMemoryManager); - fIDRefList = new (fMemoryManager) RefHashTableOf<XMLRefInfo>(29, fMemoryManager); + fValidationContext = new (fMemoryManager) ValidationContextImpl(fMemoryManager); fDatatypeRegistry.expandRegistryToFullSchemaSet(); //REVISIT: use grammarPool to create @@ -327,7 +331,7 @@ void SchemaGrammar::cleanUp() delete fAttGroupInfoRegistry; delete fNamespaceScope; delete fValidSubstitutionGroups; - delete fIDRefList; + delete fValidationContext; delete fGramDesc; delete fAnnotations; } @@ -373,7 +377,8 @@ void SchemaGrammar::serialize(XSerializeEngine& serEng) { /*** - * don't serialize NamespaceScope* fNamespaceScope; + * don't serialize NamespaceScope* fNamespaceScope; + * ValidationContext* fValidationContext; ***/ Grammar::serialize(serEng); @@ -414,8 +419,6 @@ void SchemaGrammar::serialize(XSerializeEngine& serEng) XTemplateSerializer::storeObject(fComplexTypeRegistry, serEng); XTemplateSerializer::storeObject(fGroupInfoRegistry, serEng); XTemplateSerializer::storeObject(fAttGroupInfoRegistry, serEng); - //fIDRefList todo: tobe removed - XTemplateSerializer::storeObject(fIDRefList, serEng); /*** * Serialize RefHash2KeysTableOf<ElemVector>* fValidSubstitutionGroups; @@ -467,8 +470,6 @@ void SchemaGrammar::serialize(XSerializeEngine& serEng) XTemplateSerializer::loadObject(&fComplexTypeRegistry, 29, true, serEng); XTemplateSerializer::loadObject(&fGroupInfoRegistry, 29, true, serEng); XTemplateSerializer::loadObject(&fAttGroupInfoRegistry, 29, true, serEng); - //todo: fIDRefList to be removed - XTemplateSerializer::loadObject(&fIDRefList, 29, true, serEng); /*** * Deserialize RefHash2KeysTableOf<ElemVector>* fValidSubstitutionGroups; diff --git a/src/xercesc/validators/schema/SchemaGrammar.hpp b/src/xercesc/validators/schema/SchemaGrammar.hpp index f7ccb3f9f1e8b5ff209b4c9f1028d8e5fadc06dd..ca4e56f81e72fc3d1ce5593f79db6965b34eebd4 100644 --- a/src/xercesc/validators/schema/SchemaGrammar.hpp +++ b/src/xercesc/validators/schema/SchemaGrammar.hpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.12 2003/11/12 20:35:31 peiyongz + * Stateless Grammar: ValidationContext + * * Revision 1.11 2003/11/06 19:28:11 knoaman * PSVI support for annotations. * @@ -146,6 +149,7 @@ #include <xercesc/validators/datatype/IDDatatypeValidator.hpp> #include <xercesc/validators/datatype/DatatypeValidatorFactory.hpp> #include <xercesc/framework/XMLSchemaDescription.hpp> +#include <xercesc/framework/ValidationContext.hpp> XERCES_CPP_NAMESPACE_BEGIN @@ -283,8 +287,12 @@ public: DatatypeValidatorFactory* getDatatypeRegistry(); NamespaceScope* getNamespaceScope() const; RefHash2KeysTableOf<ElemVector>* getValidSubstitutionGroups() const; + + //deprecated RefHashTableOf<XMLRefInfo>* getIDRefList() const; + ValidationContext* getValidationContext() const; + // ----------------------------------------------------------------------- // Setter methods // ----------------------------------------------------------------------- @@ -424,7 +432,7 @@ private: RefHashTableOf<XercesAttGroupInfo>* fAttGroupInfoRegistry; NamespaceScope* fNamespaceScope; RefHash2KeysTableOf<ElemVector>* fValidSubstitutionGroups; - RefHashTableOf<XMLRefInfo>* fIDRefList; + ValidationContext* fValidationContext; MemoryManager* fMemoryManager; bool fValidated; DatatypeValidatorFactory fDatatypeRegistry; @@ -483,7 +491,12 @@ SchemaGrammar::getValidSubstitutionGroups() const { inline RefHashTableOf<XMLRefInfo>* SchemaGrammar::getIDRefList() const { - return fIDRefList; + return fValidationContext->getIdRefList(); +} + +inline ValidationContext* SchemaGrammar::getValidationContext() const { + + return fValidationContext; } inline XMLGrammarDescription* SchemaGrammar::getGrammarDescription() const diff --git a/src/xercesc/validators/schema/SchemaValidator.cpp b/src/xercesc/validators/schema/SchemaValidator.cpp index 029142633e0106130be487641bf635bea726ed76..be025613c882a59e1447a1c4e1234ac7080ade54 100644 --- a/src/xercesc/validators/schema/SchemaValidator.cpp +++ b/src/xercesc/validators/schema/SchemaValidator.cpp @@ -56,6 +56,9 @@ /* * $Log$ + * Revision 1.42 2003/11/12 20:35:31 peiyongz + * Stateless Grammar: ValidationContext + * * Revision 1.41 2003/11/10 21:56:54 neilg * make internal code use the new, stateless, method of traversing attribute lists * @@ -421,68 +424,7 @@ int SchemaValidator::checkContent (XMLElementDecl* const elemDecl DatatypeValidator::ValidatorType eleDefDVType = fCurrentDatatypeValidator->getType(); - // set up the entitydeclpool in ENTITYDatatypeValidator - // and the idreflist in ID/IDREFDatatypeValidator - if (eleDefDVType == DatatypeValidator::List) { - DatatypeValidator* itemDTV = ((ListDatatypeValidator*)fCurrentDatatypeValidator)->getItemTypeDTV(); - DatatypeValidator::ValidatorType itemDTVType = itemDTV->getType(); - if (itemDTVType == DatatypeValidator::ENTITY) - ((ENTITYDatatypeValidator*)itemDTV)->setEntityDeclPool(getScanner()->getEntityDeclPool()); - else if (itemDTVType == DatatypeValidator::ID) - ((IDDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); - else if (itemDTVType == DatatypeValidator::IDREF) { - ((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); - } - else if (itemDTVType == DatatypeValidator::Union) { - RefVectorOf<DatatypeValidator>* memberDTV = ((UnionDatatypeValidator*)itemDTV)->getMemberTypeValidators(); - unsigned int memberTypeNumber = memberDTV->size(); - for ( unsigned int memberIndex = 0; memberIndex < memberTypeNumber; ++memberIndex) - { - DatatypeValidator::ValidatorType memberDTVType = memberDTV->elementAt(memberIndex)->getType(); - if (memberDTVType == DatatypeValidator::ENTITY) - ((ENTITYDatatypeValidator*)memberDTV->elementAt(memberIndex))->setEntityDeclPool(getScanner()->getEntityDeclPool()); - else if (memberDTVType == DatatypeValidator::ID) - ((IDDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); - else if (memberDTVType == DatatypeValidator::IDREF) { - ((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); - } - } - } - } - else if (eleDefDVType == DatatypeValidator::Union) { - RefVectorOf<DatatypeValidator>* memberDTV = ((UnionDatatypeValidator*)fCurrentDatatypeValidator)->getMemberTypeValidators(); - unsigned int memberTypeNumber = memberDTV->size(); - for ( unsigned int memberIndex = 0; memberIndex < memberTypeNumber; ++memberIndex) - { - DatatypeValidator::ValidatorType memberDTVType = memberDTV->elementAt(memberIndex)->getType(); - if (memberDTVType == DatatypeValidator::ENTITY) - ((ENTITYDatatypeValidator*)memberDTV->elementAt(memberIndex))->setEntityDeclPool(getScanner()->getEntityDeclPool()); - else if (memberDTVType == DatatypeValidator::ID) - ((IDDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); - else if (memberDTVType == DatatypeValidator::IDREF) { - ((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); - } - else if (memberDTVType == DatatypeValidator::List) { - DatatypeValidator* itemDTV = ((ListDatatypeValidator*)memberDTV->elementAt(memberIndex))->getItemTypeDTV(); - DatatypeValidator::ValidatorType itemDTVType = itemDTV->getType(); - if (itemDTVType == DatatypeValidator::ENTITY) - ((ENTITYDatatypeValidator*)itemDTV)->setEntityDeclPool(getScanner()->getEntityDeclPool()); - else if (itemDTVType == DatatypeValidator::ID) - ((IDDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); - else if (itemDTVType == DatatypeValidator::IDREF) { - ((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); - } - } - } - } - else if (eleDefDVType == DatatypeValidator::ENTITY) - ((ENTITYDatatypeValidator*)fCurrentDatatypeValidator)->setEntityDeclPool(getScanner()->getEntityDeclPool()); - else if (eleDefDVType == DatatypeValidator::ID) - ((IDDatatypeValidator*)fCurrentDatatypeValidator)->setIDRefList(getScanner()->getIDRefList()); - else if (eleDefDVType == DatatypeValidator::IDREF) { - ((IDREFDatatypeValidator*)fCurrentDatatypeValidator)->setIDRefList(getScanner()->getIDRefList()); - } - else if (eleDefDVType == DatatypeValidator::NOTATION) + if (eleDefDVType == DatatypeValidator::NOTATION) { // if notation, need to bind URI to notation first if (!fNotationBuf) @@ -524,7 +466,8 @@ int SchemaValidator::checkContent (XMLElementDecl* const elemDecl // complex type (if any) if ((fCurrentDatatypeValidator != ((SchemaElementDecl*)elemDecl)->getDatatypeValidator()) && (!fTypeStack->peek() || (fCurrentDatatypeValidator != fTypeStack->peek()->getDatatypeValidator()))) - fCurrentDatatypeValidator->validate(elemDefaultValue); + fCurrentDatatypeValidator->validate(elemDefaultValue + , getScanner()->getValidationContext()); } else { @@ -543,21 +486,24 @@ int SchemaValidator::checkContent (XMLElementDecl* const elemDecl valid = false; } else - fCurrentDatatypeValidator->validate(value); + fCurrentDatatypeValidator->validate(value + , getScanner()->getValidationContext()); } } else { // no default value, then check nillable if (XMLString::equals(value, XMLUni::fgZeroLenString)) { if ((((SchemaElementDecl*)elemDecl)->getMiscFlags() & SchemaSymbols::XSD_NILLABLE) == 0) - fCurrentDatatypeValidator->validate(value); + fCurrentDatatypeValidator->validate(value + , getScanner()->getValidationContext()); } else if (fNil) { emitError(XMLValid::NilAttrNotEmpty, elemDecl->getFullName()); valid = false; } else - fCurrentDatatypeValidator->validate(value); + fCurrentDatatypeValidator->validate(value + , getScanner()->getValidationContext()); } } } @@ -635,6 +581,9 @@ void SchemaValidator::validateAttrValue (const XMLAttDef* attDef , const XMLElementDecl* elemDecl) { + //turn on IdRefList checking + getScanner()->getValidationContext()->toCheckIdRefList(true); + // // Get quick refs to lot of the stuff in the passed objects in // order to simplify the code below, which will reference them very @@ -688,18 +637,14 @@ void SchemaValidator::validateAttrValue (const XMLAttDef* attDef if (attDefDVType == DatatypeValidator::List) { DatatypeValidator* itemDTV = ((ListDatatypeValidator*)attDefDV)->getItemTypeDTV(); DatatypeValidator::ValidatorType itemDTVType = itemDTV->getType(); - if (itemDTVType == DatatypeValidator::ENTITY) - ((ENTITYDatatypeValidator*)itemDTV)->setEntityDeclPool(getScanner()->getEntityDeclPool()); - else if (itemDTVType == DatatypeValidator::ID) { - ((IDDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); + if (itemDTVType == DatatypeValidator::ID) { thisIsAnId = true; } else if (itemDTVType == DatatypeValidator::IDREF) { // if in prevalidatoin, do not add attDef to IDREFList if (preValidation) - ((IDREFDatatypeValidator*)itemDTV)->setIDRefList(0); - else - ((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList()); + //todo: when to setIdRefList back to non-null + getScanner()->getValidationContext()->toCheckIdRefList(false); } } else if (attDefDVType == DatatypeValidator::Union) { @@ -708,33 +653,24 @@ void SchemaValidator::validateAttrValue (const XMLAttDef* attDef for ( unsigned int memberIndex = 0; memberIndex < memberTypeNumber; ++memberIndex) { DatatypeValidator::ValidatorType memberDTVType = memberDTV->elementAt(memberIndex)->getType(); - if (memberDTVType == DatatypeValidator::ENTITY) - ((ENTITYDatatypeValidator*)memberDTV->elementAt(memberIndex))->setEntityDeclPool(getScanner()->getEntityDeclPool()); - else if (memberDTVType == DatatypeValidator::ID) { - ((IDDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); + if (memberDTVType == DatatypeValidator::ID) { thisIsAnId = true; } else if (memberDTVType == DatatypeValidator::IDREF) { // if in prevalidatoin, do not add attDef to IDREFList if (preValidation) - ((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(0); - else - ((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList()); + getScanner()->getValidationContext()->toCheckIdRefList(false); + } } } - else if (attDefDVType == DatatypeValidator::ENTITY) - ((ENTITYDatatypeValidator*)attDefDV)->setEntityDeclPool(getScanner()->getEntityDeclPool()); else if (attDefDVType == DatatypeValidator::ID) { - ((IDDatatypeValidator*)attDefDV)->setIDRefList(getScanner()->getIDRefList()); thisIsAnId = true; } else if (attDefDVType == DatatypeValidator::IDREF) { // if in prevalidatoin, do not add attDef to IDREFList if (preValidation) - ((IDREFDatatypeValidator*)attDefDV)->setIDRefList(0); - else - ((IDREFDatatypeValidator*)attDefDV)->setIDRefList(getScanner()->getIDRefList()); + getScanner()->getValidationContext()->toCheckIdRefList(false); } // now validate the attribute value @@ -756,7 +692,8 @@ void SchemaValidator::validateAttrValue (const XMLAttDef* attDef notationBuf.append(chColon); notationBuf.append(&attrValue[colonPos + 1]); - attDefDV->validate(notationBuf.getRawBuffer()); + attDefDV->validate(notationBuf.getRawBuffer() + , getScanner()->getValidationContext()); } else { if (thisIsAnId) { @@ -771,7 +708,8 @@ void SchemaValidator::validateAttrValue (const XMLAttDef* attDef else fSeenId = true; } - attDefDV->validate(attrValue); + attDefDV->validate(attrValue + , getScanner()->getValidationContext()); } } catch (XMLException& idve) { @@ -1088,6 +1026,7 @@ void SchemaValidator::preContentValidation(bool reuseGrammar, if (curElem.hasAttDefs()) { XMLAttDefList& attDefList = curElem.getAttDefList(); bool seenId = false; + for(unsigned int i=0; i<attDefList.getAttDefCount(); i++) { const XMLAttDef& curAttDef = attDefList.getAttDef(i); diff --git a/src/xercesc/validators/schema/TraverseSchema.cpp b/src/xercesc/validators/schema/TraverseSchema.cpp index bd66a1e84cb41b5b1db38705261b97c30fe9b647..7864b1b7fdfed4af557d7da12d34ba3dbdb7a953 100644 --- a/src/xercesc/validators/schema/TraverseSchema.cpp +++ b/src/xercesc/validators/schema/TraverseSchema.cpp @@ -392,7 +392,7 @@ void TraverseSchema::preprocessSchema(DOMElement* const schemaRoot, gramDesc->setTargetNamespace(fTargetNSURIString); fGrammarResolver->putGrammar(fSchemaGrammar); - fAttributeCheck.setIDRefList(fSchemaGrammar->getIDRefList()); + fAttributeCheck.setValidationContext(fSchemaGrammar->getValidationContext()); // Save current schema info SchemaInfo* currInfo = new (fMemoryManager) SchemaInfo(0, 0, 0, fTargetNSURI, fScopeCount, @@ -1819,7 +1819,8 @@ TraverseSchema::traverseAny(const DOMElement* const elem) { } else { try { - anyURIDV->validate(tokenElem); + anyURIDV->validate(tokenElem + , fSchemaGrammar->getValidationContext()); } catch(const XMLException& excep) { reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::DisplayErrorMessage, excep.getMessage()); @@ -2232,7 +2233,8 @@ void TraverseSchema::traverseAttributeDecl(const DOMElement* const elem, if (attType == XMLAttDef::Simple && dv && valueToCheck) { try { - dv->validate(valueToCheck); + dv->validate(valueToCheck + , fSchemaGrammar->getValidationContext()); } catch (const XMLException& excep) { reportSchemaError(elem, XMLUni::fgValidityDomain, XMLValid::DisplayErrorMessage, excep.getMessage()); @@ -2707,10 +2709,12 @@ QName* TraverseSchema::traverseElementDecl(const DOMElement* const elem, try { if(validator == 0) { // in this case validate according to xs:string - fDatatypeRegistry->getDatatypeValidator(SchemaSymbols::fgDT_STRING)->validate(deflt); + fDatatypeRegistry->getDatatypeValidator(SchemaSymbols::fgDT_STRING)->validate(deflt + , fSchemaGrammar->getValidationContext()); } else { - validator->validate(deflt); - } + validator->validate(deflt + , fSchemaGrammar->getValidationContext()); + } } catch (const XMLException& excep) { reportSchemaError(elem, XMLUni::fgValidityDomain, XMLValid::DisplayErrorMessage, excep.getMessage()); @@ -4022,7 +4026,8 @@ SchemaAttDef* TraverseSchema::traverseAnyAttribute(const DOMElement* const elem) else { try { - anyURIDV->validate(token); + anyURIDV->validate(token + , fSchemaGrammar->getValidationContext()); } catch(const XMLException& excep) { reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::DisplayErrorMessage, excep.getMessage()); @@ -5793,7 +5798,8 @@ void TraverseSchema::processAttributeDeclRef(const DOMElement* const elem, } else { try { - attDV->validate(valueConstraint); + attDV->validate(valueConstraint + , fSchemaGrammar->getValidationContext()); } catch(const XMLException& excep) { reportSchemaError(elem, XMLUni::fgValidityDomain, XMLValid::DisplayErrorMessage, excep.getMessage()); @@ -6701,7 +6707,8 @@ void TraverseSchema::restoreSchemaInfo(SchemaInfo* const toRestore, fComplexTypeRegistry = fSchemaGrammar->getComplexTypeRegistry(); fValidSubstitutionGroups = fSchemaGrammar->getValidSubstitutionGroups(); fNamespaceScope = fSchemaGrammar->getNamespaceScope(); - fAttributeCheck.setIDRefList(fSchemaGrammar->getIDRefList()); + fAttributeCheck.setValidationContext(fSchemaGrammar->getValidationContext()); + } fSchemaInfo = toRestore;