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]