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]

Reply via email to