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]