knoaman 2003/01/15 12:50:33 Modified: c/src/xercesc/validators/schema TraverseSchema.cpp Log: Fix for substitution group type checking. Revision Changes Path 1.58 +13 -3 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.57 retrieving revision 1.58 diff -u -r1.57 -r1.58 --- TraverseSchema.cpp 15 Jan 2003 19:24:16 -0000 1.57 +++ TraverseSchema.cpp 15 Jan 2003 20:50:32 -0000 1.58 @@ -5035,7 +5035,10 @@ DatatypeValidator* elemDV = typeInfo->getDatatypeValidator(); DatatypeValidator* subsValidator = subsElemDecl->getDatatypeValidator(); - if (subsValidator && subsValidator->isSubstitutableBy(elemDV)) { + if (elemDV == subsValidator) { + return true; + } + else if (subsValidator && subsValidator->isSubstitutableBy(elemDV)) { if ((subsElemDecl->getFinalSet() & derivationMethod) == 0) { return true; } @@ -5047,6 +5050,10 @@ else { // complex content ComplexTypeInfo* subsTypeInfo = subsElemDecl->getComplexTypeInfo(); + + if (subsTypeInfo == typeInfo) + return true; + const ComplexTypeInfo* elemTypeInfo = typeInfo; for (; elemTypeInfo && elemTypeInfo != subsTypeInfo; @@ -5068,7 +5075,10 @@ // first, check for type relation. DatatypeValidator* subsValidator = subsElemDecl->getDatatypeValidator(); - if (subsValidator && subsValidator->isSubstitutableBy(validator) + if (subsValidator == validator) { + return true; + } + else if (subsValidator && subsValidator->isSubstitutableBy(validator) && ((subsElemDecl->getFinalSet() & SchemaSymbols::XSD_RESTRICTION) == 0)) { return true; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]