knoaman     2003/01/20 11:04:48

  Modified:    c/src/xercesc/validators/schema SchemaValidator.hpp
                        SchemaValidator.cpp
  Log:
  Fix for particle derivation checking.
  
  Revision  Changes    Path
  1.13      +9 -3      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.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- SchemaValidator.hpp       13 Jan 2003 20:16:51 -0000      1.12
  +++ SchemaValidator.hpp       20 Jan 2003 19:04:48 -0000      1.13
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.13  2003/01/20 19:04:48  knoaman
  + * Fix for particle derivation checking.
  + *
    * Revision 1.12  2003/01/13 20:16:51  knoaman
    * [Bug 16024] SchemaSymbols.hpp conflicts C++ Builder 6 dir.h
    *
  @@ -253,7 +256,8 @@
                                      const int derivedScope,
                                      ContentSpecNode* const baseNode,
                                      const int baseScope,
  -                                   const ComplexTypeInfo* const baseInfo = 0);
  +                                   const ComplexTypeInfo* const baseInfo = 0,
  +                                   const bool toCheckOccurrence = true);
       ContentSpecNode* checkForPointlessOccurrences(ContentSpecNode* const specNode,
                                                     const ContentSpecNode::NodeTypes 
nodeType,
                                                     ValueVectorOf<ContentSpecNode*>* 
const nodes);
  @@ -262,7 +266,8 @@
                           ValueVectorOf<ContentSpecNode*>* const nodes);
       bool isOccurrenceRangeOK(const int min1, const int max1, const int min2, const 
int max2);
       void checkNSCompat(const ContentSpecNode* const derivedSpecNode,
  -                       const ContentSpecNode* const baseSpecNode);
  +                       const ContentSpecNode* const baseSpecNode,
  +                       const bool toCheckOccurence);
       bool wildcardEltAllowsNamespace(const ContentSpecNode* const baseSpecNode,
                                       const unsigned int derivedURI);
       void checkNameAndTypeOK(SchemaGrammar* const currentGrammar,
  @@ -307,7 +312,8 @@
                                           const ContentSpecNode* const 
derivedSpecNode,
                                           ValueVectorOf<ContentSpecNode*>* const 
derivedNodes,
                                           const int derivedScope,
  -                                        ContentSpecNode* const baseSpecNode);
  +                                        ContentSpecNode* const baseSpecNode,
  +                                        const bool toCheckOccurence);
       void checkRecurseUnordered(SchemaGrammar* const currentGrammar,
                                  const ContentSpecNode* const derivedSpecNode,
                                  ValueVectorOf<ContentSpecNode*>* const derivedNodes,
  
  
  
  1.26      +18 -10    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.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- SchemaValidator.cpp       13 Jan 2003 20:16:51 -0000      1.25
  +++ SchemaValidator.cpp       20 Jan 2003 19:04:48 -0000      1.26
  @@ -56,6 +56,9 @@
   
   /*
    * $Log$
  + * Revision 1.26  2003/01/20 19:04:48  knoaman
  + * Fix for particle derivation checking.
  + *
    * Revision 1.25  2003/01/13 20:16:51  knoaman
    * [Bug 16024] SchemaSymbols.hpp conflicts C++ Builder 6 dir.h
    *
  @@ -1261,7 +1264,8 @@
                                                   const int derivedScope,
                                                   ContentSpecNode* const baseNode,
                                                   const int baseScope,
  -                                                const ComplexTypeInfo* const 
baseInfo) {
  +                                                const ComplexTypeInfo* const 
baseInfo,
  +                                                const bool toCheckOccurence) {
   
       // Check for pointless occurrences of all, choice, sequence.  The result is
       // the contentspec which is not pointless. If the result is a non-pointless
  @@ -1307,7 +1311,7 @@
               case ContentSpecNode::Any_Other:
               case ContentSpecNode::Any_NS:
                   {
  -                    checkNSCompat(curSpecNode, baseSpecNode);
  +                    checkNSCompat(curSpecNode, baseSpecNode, toCheckOccurence);
                       return;
                   }
               case ContentSpecNode::Choice:
  @@ -1356,7 +1360,7 @@
               case ContentSpecNode::Any_Other:
               case ContentSpecNode::Any_NS:
                   {
  -                    checkNSRecurseCheckCardinality(aGrammar, curSpecNode, 
&curVector, derivedScope, baseSpecNode);
  +                    checkNSRecurseCheckCardinality(aGrammar, curSpecNode, 
&curVector, derivedScope, baseSpecNode, toCheckOccurence);
                       return;
                   }
               case ContentSpecNode::All:
  @@ -1384,7 +1388,7 @@
               case ContentSpecNode::Any_Other:
               case ContentSpecNode::Any_NS:
                   {
  -                    checkNSRecurseCheckCardinality(aGrammar, curSpecNode, 
&curVector, derivedScope, baseSpecNode);
  +                    checkNSRecurseCheckCardinality(aGrammar, curSpecNode, 
&curVector, derivedScope, baseSpecNode, toCheckOccurence);
                       return;
                   }
               case ContentSpecNode::Choice:
  @@ -1412,7 +1416,7 @@
               case ContentSpecNode::Any_Other:
               case ContentSpecNode::Any_NS:
                   {
  -                    checkNSRecurseCheckCardinality(aGrammar, curSpecNode, 
&curVector, derivedScope, baseSpecNode);
  +                    checkNSRecurseCheckCardinality(aGrammar, curSpecNode, 
&curVector, derivedScope, baseSpecNode, toCheckOccurence);
                       return;
                   }
               case ContentSpecNode::All:
  @@ -1509,10 +1513,12 @@
   
   void
   SchemaValidator::checkNSCompat(const ContentSpecNode* const derivedSpecNode,
  -                               const ContentSpecNode* const baseSpecNode) {
  +                               const ContentSpecNode* const baseSpecNode,
  +                               const bool toCheckOccurence) {
   
       // check Occurrence ranges
  -    if (!isOccurrenceRangeOK(derivedSpecNode->getMinOccurs(), 
derivedSpecNode->getMaxOccurs(),
  +    if (toCheckOccurence &&
  +        !isOccurrenceRangeOK(derivedSpecNode->getMinOccurs(), 
derivedSpecNode->getMaxOccurs(),
                                baseSpecNode->getMinOccurs(), 
baseSpecNode->getMaxOccurs())) {
           ThrowXML1(RuntimeException, XMLExcepts::PD_OccurRangeE,
                     derivedSpecNode->getElement()->getLocalPart());
  @@ -1903,14 +1909,16 @@
                                                   const ContentSpecNode* const 
derivedSpecNode,
                                                   ValueVectorOf<ContentSpecNode*>* 
const derivedNodes,
                                                   const int derivedScope,
  -                                                ContentSpecNode* const 
baseSpecNode) {
  +                                                ContentSpecNode* const baseSpecNode,
  +                                                const bool toCheckOccurence) {
   
       // Implement total range check
       int derivedMin = derivedSpecNode->getMinTotalRange();
       int derivedMax = derivedSpecNode->getMaxTotalRange();
   
       // check Occurrence ranges
  -    if (!isOccurrenceRangeOK(derivedMin, derivedMax, baseSpecNode->getMinOccurs(),
  +    if (toCheckOccurence &&
  +        !isOccurrenceRangeOK(derivedMin, derivedMax, baseSpecNode->getMinOccurs(),
                                 baseSpecNode->getMaxOccurs())) {
           ThrowXML(RuntimeException, XMLExcepts::PD_NSRecurseCheckCardinality1);
       }
  @@ -1919,7 +1927,7 @@
       unsigned int nodesCount = derivedNodes->size();
   
       for (unsigned int i = 0; i < nodesCount; i++) {
  -        checkParticleDerivationOk(currentGrammar, derivedNodes->elementAt(i), 
derivedScope, baseSpecNode, -1);
  +        checkParticleDerivationOk(currentGrammar, derivedNodes->elementAt(i), 
derivedScope, baseSpecNode, -1, 0, false);
       }
   }
   
  
  
  

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

Reply via email to