neilg 2003/11/27 09:06:40 Modified: c/src/xercesc/internal IGXMLScanner2.cpp SGXMLScanner.cpp Log: create XSModels if a PSVIHandler has been set on the scanner. Make PSVI production more robust Revision Changes Path 1.44 +19 -23 xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp Index: IGXMLScanner2.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/IGXMLScanner2.cpp,v retrieving revision 1.43 retrieving revision 1.44 diff -u -r1.43 -r1.44 --- IGXMLScanner2.cpp 27 Nov 2003 06:10:31 -0000 1.43 +++ IGXMLScanner2.cpp 27 Nov 2003 17:06:40 -0000 1.44 @@ -141,7 +141,7 @@ return 0; // PSVI handling - if(fGrammarType == Grammar::SchemaGrammarType && getPSVIHandler()) + if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType ) fPSVIAttrList->reset(); PSVIItem::VALIDITY_STATE attrValid = PSVIItem::VALIDITY_VALID; PSVIItem::ASSESSMENT_TYPE attrAssessed = PSVIItem::VALIDATION_FULL; @@ -271,7 +271,7 @@ ); if(fGrammarType == Grammar::SchemaGrammarType) { ((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::INVALID); - if (getPSVIHandler()) + if(getPSVIHandler() ) { attrValid = PSVIItem::VALIDITY_INVALID; } @@ -292,7 +292,7 @@ ); if(fGrammarType == Grammar::SchemaGrammarType) { ((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::INVALID); - if (getPSVIHandler()) + if(getPSVIHandler() ) { attrValid = PSVIItem::VALIDITY_INVALID; } @@ -387,7 +387,7 @@ ((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::VALID); ((SchemaAttDef *)(attDef))->setValidationAttempted(PSVIDefs::FULL); } - if(getPSVIHandler()) + if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType ) { // if we've found either an attDef or an attDefForWildCard, // then we're doing full validation and it may still be valid. @@ -534,7 +534,8 @@ , elemDecl ); attrValidator = ((SchemaValidator*)fValidator)->getMostRecentAttrValidator(); - if(getPSVIHandler() && ((SchemaValidator *)fValidator)->getErrorOccurred()) + if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType + && ((SchemaValidator *)fValidator)->getErrorOccurred()) attrValid = PSVIItem::VALIDITY_INVALID; } else if(fGrammarType == Grammar::SchemaGrammarType) @@ -559,7 +560,7 @@ } // now fill in the PSVIAttributes entry for this attribute: - if(getPSVIHandler()) + if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType) { SchemaAttDef *actualAttDef = 0; if(attDef) @@ -617,7 +618,7 @@ if((uriId == fXMLNSNamespaceId) || XMLString::equals(getURIText(uriId), SchemaSymbols::fgURI_XSI)) attrValidator = DatatypeValidatorFactory::getBuiltInRegistry()->get(SchemaSymbols::fgDT_ANYURI); - if(getPSVIHandler()) + if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType) { PSVIAttribute *toFill = fPSVIAttrList->getPSVIAttributeToFill(); XSSimpleTypeDefinition *validatingType = (attrValidator) @@ -803,7 +804,7 @@ // Indicate it was not explicitly specified and bump count curAtt->setSpecified(false); retCount++; - if(getPSVIHandler()) + if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType) { PSVIAttribute *defAttrToFill = fPSVIAttrList->getPSVIAttributeToFill(); XSAttributeDeclaration *defAttrDecl = (XSAttributeDeclaration *)fModel->getXSObject((void *)curDef); @@ -964,11 +965,9 @@ fValidator->emitError(XMLValid::NoAttNormForStandalone, attName); if(fGrammarType == Grammar::SchemaGrammarType && attDef) { ((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::INVALID); - if (getPSVIHandler()) - { - // REVISIT: - // PSVIAttribute->setValidity(PSVIItem::VALIDITY_INVALID); - } + // note that schema attributes won't be + // subject to this constraint (standalone only relates + // to DTD's) } } @@ -1011,11 +1010,7 @@ fValidator->emitError(XMLValid::NoAttNormForStandalone, attName); if(fGrammarType == Grammar::SchemaGrammarType && attDef) { ((SchemaAttDef *)(attDef))->setValidity(PSVIDefs::INVALID); - if (getPSVIHandler()) - { - // REVISIT: - // PSVIAttribute->setValidity(PSVIItem::VALIDITY_INVALID); - } + // only relates to DTD attributes } } } @@ -1830,6 +1825,9 @@ fValidator->setGrammar(fGrammar); } } + // fModel may need updating: + if(getPSVIHandler() && fGrammarType == Grammar::SchemaGrammarType) + fModel = fGrammarResolver->getXSModel(); } InputSource* IGXMLScanner::resolveSystemId(const XMLCh* const sysId) @@ -1976,6 +1974,8 @@ if (toCache) { fGrammarResolver->cacheGrammars(); } + if(getPSVIHandler()) + fModel = fGrammarResolver->getXSModel(); return grammar; } @@ -2280,11 +2280,7 @@ if(fGrammarType == Grammar::SchemaGrammarType) { ((SchemaAttDef *)attDef)->setValidity(PSVIDefs::INVALID); - if (getPSVIHandler()) - { - // REVISIT: - // PSVIAttribute->setValidity(PSVIItem::VALIDITY_INVALID); - } + // only relates to DTD validation } } nextCh = chSpace; 1.53 +7 -0 xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp Index: SGXMLScanner.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/internal/SGXMLScanner.cpp,v retrieving revision 1.52 retrieving revision 1.53 diff -u -r1.52 -r1.53 --- SGXMLScanner.cpp 27 Nov 2003 06:10:31 -0000 1.52 +++ SGXMLScanner.cpp 27 Nov 2003 17:06:40 -0000 1.53 @@ -3656,6 +3656,10 @@ fValidator->setGrammar(fGrammar); } } + // update fModel; rely on the grammar resolver to do this + // efficiently + if(getPSVIHandler()) + fModel = fGrammarResolver->getXSModel(); } InputSource* SGXMLScanner::resolveSystemId(const XMLCh* const sysId) @@ -3794,6 +3798,9 @@ if (toCache) { fGrammarResolver->cacheGrammars(); } + + if(getPSVIHandler()) + fModel = fGrammarResolver->getXSModel(); return grammar; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]