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]

Reply via email to