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]

Reply via email to