knoaman     2003/03/10 08:50:36

  Modified:    c/src/xercesc/validators/schema TraverseSchema.cpp
  Log:
  Fix for types referred to without explicitly specifying its namespace.
  
  Revision  Changes    Path
  1.63      +34 -23    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.62
  retrieving revision 1.63
  diff -u -r1.62 -r1.63
  --- TraverseSchema.cpp        6 Mar 2003 18:24:25 -0000       1.62
  +++ TraverseSchema.cpp        10 Mar 2003 16:50:35 -0000      1.63
  @@ -4088,7 +4088,7 @@
           else if (XMLString::equals(attName, XMLUni::fgXMLNSString)) { // == 'xmlns'
   
               const XMLCh* attValue = attribute->getNodeValue();
  -            fNamespaceScope->addPrefix( XMLUni::fgZeroLenString, 
fURIStringPool->addOrFind(attValue));
  +            fNamespaceScope->addPrefix(XMLUni::fgZeroLenString, 
fURIStringPool->addOrFind(attValue));
               seenXMLNS = true;
           }
       } // end for
  @@ -5784,35 +5784,46 @@
       SchemaInfo::ListType infoType = SchemaInfo::INCLUDE;
       int                  saveScope = fCurrentScope;
   
  -    // -------------------------------------------------------------
       // check if the base type is from another schema
  -    // -------------------------------------------------------------
  -    if (isBaseFromAnotherSchema(uriStr)) {
  +    if (!XMLString::equals(uriStr, fTargetNSURIString)) {
   
  -        // 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(uriStr);
  +        // check for datatype validator if it's schema for schema URI
  +        if (XMLString::equals(uriStr, SchemaSymbols::fgURI_SCHEMAFORSCHEMA)) {
   
  -        if (!fSchemaInfo->isImportingNS(uriId)) {
  +            baseDTValidator = getDatatypeValidator(uriStr, localPart);
   
  -            reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidNSReference, uriStr);
  -            throw TraverseSchema::InvalidComplexTypeInfo;
  +            if (!baseDTValidator) {
  +                reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidNSReference, uriStr);
  +                throw TraverseSchema::InvalidComplexTypeInfo;
  +            }
           }
  +        else {
  +                     
  +            // 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(uriStr);
   
  -        baseComplexTypeInfo = getTypeInfoFromNS(elem, uriStr, localPart);
  -
  -        if (!baseComplexTypeInfo) {
  -
  -            SchemaInfo* impInfo = 
fSchemaInfo->getImportInfo(fURIStringPool->addOrFind(uriStr));
  +            if (!fSchemaInfo->isImportingNS(uriId)) {
   
  -            if (!impInfo || impInfo->getProcessed()) {
  -                reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::BaseTypeNotFound, baseName);
  +                reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::InvalidNSReference, uriStr);
                   throw TraverseSchema::InvalidComplexTypeInfo;
               }
   
  -            infoType = SchemaInfo::IMPORT;
  -            restoreSchemaInfo(impInfo, infoType);
  +            baseComplexTypeInfo = getTypeInfoFromNS(elem, uriStr, localPart);
  +
  +            if (!baseComplexTypeInfo) {
  +
  +                SchemaInfo* impInfo = 
fSchemaInfo->getImportInfo(fURIStringPool->addOrFind(uriStr));
  +
  +                if (!impInfo || impInfo->getProcessed()) {
  +                    reportSchemaError(elem, XMLUni::fgXMLErrDomain, 
XMLErrs::BaseTypeNotFound, baseName);
  +                    throw TraverseSchema::InvalidComplexTypeInfo;
  +                }
  +
  +                infoType = SchemaInfo::IMPORT;
  +                restoreSchemaInfo(impInfo, infoType);
  +            }
           }
       }
       else {
  @@ -5846,8 +5857,8 @@
   
       // if not found, 2 possibilities:
       //           1: ComplexType in question has not been compiled yet;
  -    //           2: base is SimpleTYpe;
  -    if (!baseComplexTypeInfo) {
  +    //           2: base is SimpleType;
  +    if (!baseComplexTypeInfo && !baseDTValidator) {
   
           baseDTValidator = getDatatypeValidator(uriStr, localPart);
   
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to