Author: amassari
Date: Fri Aug 21 10:36:58 2009
New Revision: 806488
URL: http://svn.apache.org/viewvc?rev=806488&view=rev
Log:
When testing for simple type blocked substitutions, allow list and unions when
base type is anySimpleType
Modified:
xerces/c/trunk/src/xercesc/validators/schema/SchemaValidator.cpp
Modified: xerces/c/trunk/src/xercesc/validators/schema/SchemaValidator.cpp
URL:
http://svn.apache.org/viewvc/xerces/c/trunk/src/xercesc/validators/schema/SchemaValidator.cpp?rev=806488&r1=806487&r2=806488&view=diff
==============================================================================
--- xerces/c/trunk/src/xercesc/validators/schema/SchemaValidator.cpp (original)
+++ xerces/c/trunk/src/xercesc/validators/schema/SchemaValidator.cpp Fri Aug 21
10:36:58 2009
@@ -15,6 +15,10 @@
* limitations under the License.
*/
+/*
+ * $Id$
+ */
+
// ---------------------------------------------------------------------------
// Includes
// ---------------------------------------------------------------------------
@@ -683,15 +687,23 @@
}
else if(fCurrentDatatypeValidator != xsiTypeDV)
{
- // the type is derived from ancestor
- if
((((SchemaElementDecl*)elemDef)->getBlockSet() &
SchemaSymbols::XSD_RESTRICTION) != 0) {
- emitError(XMLValid::ElemNoSubforBlock,
elemDef->getFullName());
- fErrorOccurred = true;
+ DatatypeValidator::ValidatorType
derivedType=xsiTypeDV->getType();
+ if((derivedType == DatatypeValidator::List ||
derivedType == DatatypeValidator::Union) && fCurrentDatatypeValidator==0)
+ {
+ // the substitution is always allowed if
the type is list or union and the base type was xs:anySimpleType
}
- if (elemDef->hasAttDefs()) {
- // if we have an attribute but xsi:type's
type is simple, we have a problem...
- emitError(XMLValid::NonDerivedXsiType,
fXsiType->getRawName(), elemDef->getFullName());
- fErrorOccurred = true;
+ else
+ {
+ // the type is derived from ancestor
+ if
((((SchemaElementDecl*)elemDef)->getBlockSet() &
SchemaSymbols::XSD_RESTRICTION) != 0) {
+ emitError(XMLValid::ElemNoSubforBlock,
elemDef->getFullName());
+ fErrorOccurred = true;
+ }
+ if (elemDef->hasAttDefs()) {
+ // if we have an attribute but
xsi:type's type is simple, we have a problem...
+ emitError(XMLValid::NonDerivedXsiType,
fXsiType->getRawName(), elemDef->getFullName());
+ fErrorOccurred = true;
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]