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]