amassari 2004/01/15 10:15:24 Modified: c/src/xercesc/validators/schema TraverseSchema.cpp Log: Fix for bug#18341; when a type was derived from a type declared in another schema, the right grammar was not restored, and the type was not found Revision Changes Path 1.108 +29 -2 xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp Index: TraverseSchema.cpp =================================================================== RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/TraverseSchema.cpp,v retrieving revision 1.107 retrieving revision 1.108 diff -u -r1.107 -r1.108 --- TraverseSchema.cpp 12 Jan 2004 16:15:57 -0000 1.107 +++ TraverseSchema.cpp 15 Jan 2004 18:15:24 -0000 1.108 @@ -4688,7 +4688,32 @@ if (baseValidator == 0) { + SchemaInfo::ListType infoType = SchemaInfo::INCLUDE; SchemaInfo* saveInfo = fSchemaInfo; + int saveScope = fCurrentScope; + + if (!XMLString::equals(uri, fTargetNSURIString) && (uri && *uri)) { + + // Make sure that we have an explicit import statement. + // Clause 4 of Schema Representation Constraint: + // http://www.w3.org/TR/xmlschema-1/#src-resolve + unsigned int uriId = fURIStringPool->addOrFind(uri); + + if (!fSchemaInfo->isImportingNS(uriId)) { + + reportSchemaError(elem, XMLUni::fgXMLErrDomain, XMLErrs::InvalidNSReference, uri); + return 0; + } + + SchemaInfo* impInfo = fSchemaInfo->getImportInfo(uriId); + + if (!impInfo || impInfo->getProcessed()) + return 0; + + infoType = SchemaInfo::IMPORT; + restoreSchemaInfo(impInfo, infoType); + } + DOMElement* baseTypeNode = fSchemaInfo->getTopLevelComponent(SchemaInfo::C_SimpleType, SchemaSymbols::fgELT_SIMPLETYPE, localPart, &fSchemaInfo); @@ -4697,7 +4722,9 @@ baseValidator = traverseSimpleTypeDecl(baseTypeNode); // restore schema information, if necessary - fSchemaInfo = saveInfo; + if (saveInfo != fSchemaInfo) { + restoreSchemaInfo(saveInfo, infoType, saveScope); + } } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]