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]