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]