Matthias Brantner has proposed merging lp:~zorba-coders/zorba/bug891209-xsiType 
into lp:zorba.

Requested reviews:
  Matthias Brantner (matthias-brantner)
  Markos Zaharioudakis (markos-za)
Related bugs:
  Bug #891209 in Zorba: "validation with xsi:type returns untyped"
  https://bugs.launchpad.net/zorba/+bug/891209

For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/bug891209-xsiType/+merge/95487

Fix for bug 891209 : validation with xsi:type returns untyped.
-- 
https://code.launchpad.net/~zorba-coders/zorba/bug891209-xsiType/+merge/95487
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'ChangeLog'
--- ChangeLog	2012-03-01 21:22:16 +0000
+++ ChangeLog	2012-03-01 23:14:19 +0000
@@ -58,6 +58,7 @@
   * Fixed bug with unversioned modules with C++ external functions
   * Fixed bug #878508 (JSON Module not escaping escape characters)
   * Fixed bug #912579 (validate-in-place on non-root elements)
+  * Fixed bug #891209 (validation with xsi:type returns untyped)
 
 version 2.1
 

=== modified file 'src/types/schema/EventSchemaValidator.cpp'
--- src/types/schema/EventSchemaValidator.cpp	2011-08-19 03:26:59 +0000
+++ src/types/schema/EventSchemaValidator.cpp	2012-03-01 23:14:19 +0000
@@ -163,7 +163,7 @@
   StrX typeName(theSchemaValidatorFilter->getTypeName());
   StrX typeUri(theSchemaValidatorFilter->getTypeUri());
 
-  //cout << "  - getTypeQName: " << typeName << "@" << typeUri <<" ";
+  //cout << "  - getTypeQName:  " << typeName << " @ " << typeUri <<" ";
 
   store::Item_t typeQName;
   GENV_ITEMFACTORY->createQName(typeQName,
@@ -172,7 +172,7 @@
                                 typeName.localFormOrDefault ("untyped"));
 
   //cout << " : " << typeQName->getLocalName() << " @ "
-  //     << typeQName->getNamespace() <<"\n";
+  //     << typeQName->getNamespace() <<"\n"; std::cout.flush();
 
   return typeQName;
 }

=== modified file 'src/types/schema/SchemaValidatorFilter.cpp'
--- src/types/schema/SchemaValidatorFilter.cpp	2011-06-14 17:26:33 +0000
+++ src/types/schema/SchemaValidatorFilter.cpp	2012-03-01 23:14:19 +0000
@@ -867,7 +867,7 @@
     }
     --theAttrCount;  // remove att from the list but still needs to be reported
 
-    //cout << "   svf attrEvent: " << StrX(localname) << "  T: " <<
+    //std::cout << "   svf attrEvent: " << StrX(localname) << "  T: " <<
     //    StrX(typeName) << "\n";
     theEventBuffer->attributeEvent(emptyToNull(prefix), emptyToNull(uri),
         localname, value, emptyToNull(typeURI), typeName);
@@ -1062,7 +1062,9 @@
     {
       const ElemStack::StackElem* topElem = fElemStack.topElement();
       DatatypeValidator *currentDV = 0;
-      if(topElem->fThisElement->isDeclared())
+      if(topElem->fThisElement->isDeclared() ||
+         theXsiType  // this is when there is no schema import but xsiType is used
+        )
       {
         ComplexTypeInfo *currentTypeInfo = ((XercSchemaValidator*)fValidator)->
             getCurrentTypeInfo();

=== modified file 'src/types/schema/XercSchemaValidator.cpp'
--- src/types/schema/XercSchemaValidator.cpp	2011-06-14 17:26:33 +0000
+++ src/types/schema/XercSchemaValidator.cpp	2012-03-01 23:14:19 +0000
@@ -23,7 +23,6 @@
 //  Includes
 // ---------------------------------------------------------------------------
 #include "stdafx.h"
-#include "XercSchemaValidator.h"
 
 #include <xercesc/util/Janitor.hpp>
 #include <xercesc/framework/XMLDocumentHandler.hpp>
@@ -54,7 +53,8 @@
 
 
 #include "diagnostics/assert.h"
-//#include "StrX.h"
+#include "StrX.h"
+#include "XercSchemaValidator.h"
 
 using namespace XERCES_CPP_NAMESPACE;
 

=== modified file 'src/types/schema/validate.cpp'
--- src/types/schema/validate.cpp	2011-09-22 21:50:20 +0000
+++ src/types/schema/validate.cpp	2012-03-01 23:14:19 +0000
@@ -54,7 +54,7 @@
 #include "diagnostics/assert.h"
 #include "zorba/store_consts.h"
 
-using namespace std;
+//using namespace std;
 
 namespace zorba
 {
@@ -145,16 +145,26 @@
     //cout << "No schema: isNode() " << sourceNode->isNode() << "  nodeKind: "<<
     // sourceNode->getNodeKind() << endl;
 
-    if ( validationMode == ParseConstants::val_strict )
-    {
-      throw XQUERY_EXCEPTION( err::XQDY0084, ERROR_LOC( loc ) );
-    }
-    else
-    {
+    // if we got here it basicaly means that there was no import but
+    // validation is used so we need to set up schema in the typeManager anyway
+    // validation has to work for xsiType and built-in types
+
+    TypeManagerImpl *typeManagerImpl = static_cast<TypeManagerImpl*>(typeManager);
+    typeManagerImpl->initializeSchema();
+    schema = typeManager->getSchema();
+
+
+
+//    if ( validationMode == ParseConstants::val_strict )
+//    {
+//      throw XQUERY_EXCEPTION( err::XQDY0084, ERROR_LOC( loc ) );
+//    }
+//    else
+//    {
       // no schema available - items remain the same
-      result = sourceNode;
-      return true;    
-    }
+//      result = sourceNode;
+//      return true;
+//    }
   }
 
 #ifndef ZORBA_NO_XMLSCHEMA
@@ -382,8 +392,8 @@
     ZORBA_ASSERT(attribute->isNode());
     ZORBA_ASSERT(attribute->getNodeKind() == store::StoreConsts::attributeNode);
 
-    //cout << " v    - attr: " << attribute->getNodeName()->getLocalName()->
-    //  c_str() << "\n"; cout.flush();
+    //cout << " v    - attr: " << attribute->getNodeName()->getLocalName() << ":" <<
+    //        attribute->getStringValue() << "\n"; cout.flush();
 
     store::Item_t attName = attribute->getNodeName();
     schemaValidator.attr(attName, attribute->getStringValue());
@@ -472,9 +482,9 @@
   {
     if ( child->isNode() )
     {
-      //cout << "  > child: " << child->getNodeKind() << " " <<
-      // (child->getType() != NULL ? child->getType()->getLocalName()
-      // : "type_NULL" ) << "\n"; cout.flush();
+      //cout << "  > child: " << (long)child->getNodeKind() << " " <<
+      //  //(child->getType() != NULL ? child->getType()->getLocalName() : "type_NULL" ) <<
+      //  "\n"; cout.flush();
 
       switch ( child->getNodeKind() )
       {
@@ -515,7 +525,7 @@
           cout << "     - text: '" << childStringValue << "' T: " <<
             typeQName->getLocalName() << "\n"; cout.flush();
           cout << "        xqT: " << xqType->toString() << "  content_kind: " <<
-            xqType->content_kind() << " tKind:" << xqType->type_kind() << " \n";
+            (long)xqType->content_kind() << " tKind:" << (long)xqType->type_kind() << " \n";
           cout.flush();
         }
         else
@@ -649,9 +659,9 @@
   xqtref_t type = typeManager->create_named_type(typeQName.getp(),
                                                  TypeConstants::QUANT_ONE);
 
-  //cout << "     - processTextValue: " << typeQName->getPrefix()->str()
-  //     << ":" << typeQName->getLocalName()->str() << "@"
-  //     << typeQName->getNamespace()->str() ; cout.flush();
+  //cout << "     - processTextValue: " << typeQName->getPrefix()
+  //     << ":" << typeQName->getLocalName() << "@"
+  //     << typeQName->getNamespace() ; cout.flush();
   //cout << " type: " << (type==NULL ? "NULL" : type->toString()) << "\n"; cout.flush();
 
   // TODO: we probably need the ns bindings from the static context

=== modified file 'src/types/typemanagerimpl.cpp'
--- src/types/typemanagerimpl.cpp	2012-01-26 19:56:14 +0000
+++ src/types/typemanagerimpl.cpp	2012-03-01 23:14:19 +0000
@@ -336,11 +336,11 @@
       {
         if (error != zerr::ZXQP0000_NO_ERROR)
         {
-					throw XQUERY_EXCEPTION_VAR(
-						error,
-						ERROR_PARAMS(qname->getStringValue(), ZED(NotAmongInScopeSchemaTypes)),
-						ERROR_LOC( loc )
-					);
+            throw XQUERY_EXCEPTION_VAR(
+                error,
+                ERROR_PARAMS(qname->getStringValue(), ZED(NotAmongInScopeSchemaTypes)),
+                ERROR_LOC( loc )
+            );
         }
         else
         {

=== added file 'test/rbkt/ExpQueryResults/zorba/schemas/val-xsiType-noSchemaImport.xml.res'
--- test/rbkt/ExpQueryResults/zorba/schemas/val-xsiType-noSchemaImport.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/schemas/val-xsiType-noSchemaImport.xml.res	2012-03-01 23:14:19 +0000
@@ -0,0 +1,1 @@
+xs:integer

=== added file 'test/rbkt/Queries/zorba/schemas/val-xsiType-noSchemaImport.xq'
--- test/rbkt/Queries/zorba/schemas/val-xsiType-noSchemaImport.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/schemas/val-xsiType-noSchemaImport.xq	2012-03-01 23:14:19 +0000
@@ -0,0 +1,11 @@
+import module namespace schema = "http://www.zorba-xquery.com/modules/schema";;
+
+schema:schema-type(
+  data(
+    validate lax { 
+      <a 
+        xmlns:xs="http://www.w3.org/2001/XMLSchema";
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+        xsi:type="xs:integer">2</a> }
+  )
+)

-- 
Mailing list: https://launchpad.net/~zorba-coders
Post to     : zorba-coders@lists.launchpad.net
Unsubscribe : https://launchpad.net/~zorba-coders
More help   : https://help.launchpad.net/ListHelp

Reply via email to