tng         2002/09/04 11:17:41

  Modified:    c/src/xercesc/validators/schema SchemaValidator.cpp
                        SchemaValidator.hpp
  Log:
  Do not set IDREF to used during prevalidation.
  
  Revision  Changes    Path
  1.14      +33 -8     xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp
  
  Index: SchemaValidator.cpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.cpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- SchemaValidator.cpp       11 Jul 2002 18:55:44 -0000      1.13
  +++ SchemaValidator.cpp       4 Sep 2002 18:17:41 -0000       1.14
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.14  2002/09/04 18:17:41  tng
  + * Do not set IDREF to used during prevalidation.
  + *
    * Revision 1.13  2002/07/11 18:55:44  knoaman
    * Add a flag to the preContentValidation method to indicate whether to validate
    * default/fixed attributes or not.
  @@ -407,7 +410,8 @@
   }
   
   void SchemaValidator::validateAttrValue (const   XMLAttDef* attDef
  -                                       , const XMLCh* const attrValue)
  +                                       , const XMLCh* const attrValue
  +                                       , bool               preValidation)
   {
       //
       //  Get quick refs to lot of the stuff in the passed objects in
  @@ -422,7 +426,11 @@
       //  If the default type is fixed, then make sure the passed value maps
       //  to the fixed value.
       //
  -    if (defType == XMLAttDef::Fixed || defType == XMLAttDef::Required_And_Fixed)
  +    //  If during preContentValidation, the value we are validating is the fixed 
value itself
  +    //  so no need to compare.
  +    //  Only need to do this for regular attribute value validation
  +    //
  +    if ((defType == XMLAttDef::Fixed || defType == XMLAttDef::Required_And_Fixed) 
&& !preValidation)
       {
           const XMLCh* const valueText = attDef->getValue();
           if (XMLString::compareString(attrValue, valueText))
  @@ -454,8 +462,13 @@
                       
((ENTITYDatatypeValidator*)itemDTV)->setEntityDeclPool(getScanner()->getEntityDeclPool());
                   else if (itemDTVType == DatatypeValidator::ID)
                       
((IDDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList());
  -                else if (itemDTVType == DatatypeValidator::IDREF)
  -                    
((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList());
  +                else if (itemDTVType == DatatypeValidator::IDREF) {
  +                    // if in prevalidatoin, do not add attDef to IDREFList
  +                    if (preValidation)
  +                        ((IDREFDatatypeValidator*)itemDTV)->setIDRefList(0);
  +                    else
  +                        
((IDREFDatatypeValidator*)itemDTV)->setIDRefList(getScanner()->getIDRefList());
  +                }
               }
               else if (attDefDVType == DatatypeValidator::Union) {
                   RefVectorOf<DatatypeValidator>* memberDTV = 
((UnionDatatypeValidator*)attDefDV)->getMemberTypeValidators();
  @@ -467,16 +480,26 @@
                           
((ENTITYDatatypeValidator*)memberDTV->elementAt(memberIndex))->setEntityDeclPool(getScanner()->getEntityDeclPool());
                       else if (memberDTVType == DatatypeValidator::ID)
                           
((IDDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList());
  -                    else if (memberDTVType == DatatypeValidator::IDREF)
  -                        
((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList());
  +                    else if (memberDTVType == DatatypeValidator::IDREF) {
  +                        // if in prevalidatoin, do not add attDef to IDREFList
  +                        if (preValidation)
  +                            
((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(0);
  +                        else
  +                            
((IDREFDatatypeValidator*)memberDTV->elementAt(memberIndex))->setIDRefList(getScanner()->getIDRefList());
  +                    }
                   }
               }
               else if (attDefDVType == DatatypeValidator::ENTITY)
                   
((ENTITYDatatypeValidator*)attDefDV)->setEntityDeclPool(getScanner()->getEntityDeclPool());
               else if (attDefDVType == DatatypeValidator::ID)
                   
((IDDatatypeValidator*)attDefDV)->setIDRefList(getScanner()->getIDRefList());
  -            else if (attDefDVType == DatatypeValidator::IDREF)
  -                
((IDREFDatatypeValidator*)attDefDV)->setIDRefList(getScanner()->getIDRefList());
  +            else if (attDefDVType == DatatypeValidator::IDREF) {
  +                // if in prevalidatoin, do not add attDef to IDREFList
  +                if (preValidation)
  +                    ((IDREFDatatypeValidator*)attDefDV)->setIDRefList(0);
  +                else
  +                    
((IDREFDatatypeValidator*)attDefDV)->setIDRefList(getScanner()->getIDRefList());
  +            }
   
               // now validate the attribute value
               // if notation, need to bind URI to notation first
  @@ -844,6 +867,7 @@
                           (
                               &curAttDef
                               , curAttDef.getValue()
  +                            , true
                           );
                       }
                   }
  
  
  
  1.8       +5 -0      xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.hpp
  
  Index: SchemaValidator.hpp
  ===================================================================
  RCS file: /home/cvs/xml-xerces/c/src/xercesc/validators/schema/SchemaValidator.hpp,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SchemaValidator.hpp       11 Jul 2002 18:55:45 -0000      1.7
  +++ SchemaValidator.hpp       4 Sep 2002 18:17:41 -0000       1.8
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.8  2002/09/04 18:17:41  tng
  + * Do not set IDREF to used during prevalidation.
  + *
    * Revision 1.7  2002/07/11 18:55:45  knoaman
    * Add a flag to the preContentValidation method to indicate whether to validate
    * default/fixed attributes or not.
  @@ -182,6 +185,7 @@
       (
           const   XMLAttDef*                  attDef
           , const XMLCh* const                attrValue
  +        , bool                              preValidation = false
       );
   
       virtual void validateElement
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to