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]