You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by Rafal Tenerowicz <te...@yahoo.com> on 2007/04/03 17:54:45 UTC

xerces - validation of DOM agains xsd

Hi,
   
  Im developing a project using xerces. 
  I would like to use xerces for validating the DOM object created at run time (and not read from the file) agains xsd.
   
  I have a problem with setting DOMConfiguration that I retrieve from Document. I can set the validation flag to true, myErrorHandler but for some reason ?? I cannot set the "schema-type" and "schema-location". I get an error NOT_SUPPORTED_ERR, but I don't know why the feature cannot be set.
   
  I set the "validation" & ErrorHandler before I call set for "schema-type" and "schema-location". What could be the reason for this problem?
  How can I find out what is the problem - can I look at some Error object, that would be populated when the function set setParameter is called?
   
  If sb would have a piece of code that actually is doing the validation of DOm against xsd I would be grateful.
   
  Simplified code below
   
  thanks in advance
   
  Rafal
   
  static const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(gLS);   
   
      
DOMBuilder *parser = impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, NULL);
  parser->setFeature(XMLUni::fgDOMNamespaces, true);
parser->setFeature(XMLUni::fgXercesSchema, true);
parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
   
  parser->setFeature(XMLUni::fgDOMValidateIfSchema, true);
   
  parser->setFeature(XMLUni::fgDOMDatatypeNormalization, true);
DOMCountErrorHandler errorHandler;
parser->setErrorHandler(&errorHandler);
   
  doc = parser->parseURI(X("shiporder.xml"));
   
  DOMWriter         *theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter();
   
              DOMErrorHandler *myErrorHandler = new DOMPrintErrorHandler();
            theSerializer->setErrorHandler(myErrorHandler);
              // set feature if the serializer supports the feature/mode
            if (theSerializer->canSetFeature(XMLUni::fgDOMWRTSplitCdataSections, false))
                theSerializer->setFeature(XMLUni::fgDOMWRTSplitCdataSections, false);
              if (theSerializer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, false))
                theSerializer->setFeature(XMLUni::fgDOMWRTDiscardDefaultContent, false);
              if (theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false))
                theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false);
              if (theSerializer->canSetFeature(XMLUni::fgDOMWRTBOM, false))
                theSerializer->setFeature(XMLUni::fgDOMWRTBOM, false);
              if (theSerializer->canSetFeature(XMLUni::fgDOMValidateIfSchema, true))
                theSerializer->setFeature(XMLUni::fgDOMValidateIfSchema, true);
   
          DOMString strSchemaType = "http://www.w3.org/2001/XMLSchema";
        DOMString strSchemaLocation = "shiporder.xsd";
   
          if(config->canSetParameter(X("validate"), (void*)true))
                config->setParameter(X("validate"), (void*)true);
                
        if (config->canSetParameter(X("schema-type"),NULL))
                config->setParameter(X("schema-type"),NULL);
  
        if (config->canSetParameter(X("schema-type"),(void*)&strSchemaType))
                config->setParameter(X("schema-type"),(void*)&strSchemaType);
        
        if (config->canSetParameter(X("schema-location"),(void*)&strSchemaLocation))
                config->setParameter(X("schema-location"),(void*)&strSchemaLocation);
                
              XMLFormatTarget *myFormTarget;
            if (goutputfile)
                myFormTarget = new LocalFileFormatTarget("test.xml");
            else
                myFormTarget = new StdOutFormatTarget();                
                
        doc->normalizeDocument();
   
          theSerializer->writeNode(myFormTarget, *doc);
   
  ...

 
---------------------------------
Don't pick lemons.
See all the new 2007 cars at Yahoo! Autos.

Re: xerces - validation of DOM agains xsd

Posted by Alberto Massari <am...@datadirect.com>.
Hi Rafal,
Xerces-C++ can only validate a document while loading it from its 
serialized format, it doesn't validate existing DOM trees.

Alberto

At 08.54 03/04/2007 -0700, Rafal Tenerowicz wrote:
>Hi,
>
>Im developing a project using xerces.
>I would like to use xerces for validating the DOM object created at 
>run time (and not read from the file) agains xsd.
>
>I have a problem with setting DOMConfiguration that I retrieve from 
>Document. I can set the validation flag to true, myErrorHandler but 
>for some reason ?? I cannot set the "schema-type" and 
>"schema-location". I get an error NOT_SUPPORTED_ERR, but I don't 
>know why the feature cannot be set.
>
>I set the "validation" & ErrorHandler before I call set for 
>"schema-type" and "schema-location". What could be the reason for this problem?
>How can I find out what is the problem - can I look at some Error 
>object, that would be populated when the function set setParameter is called?
>
>If sb would have a piece of code that actually is doing the 
>validation of DOm against xsd I would be grateful.
>
>Simplified code below
>
>thanks in advance
>
>Rafal
>
>static const XMLCh gLS[] = { chLatin_L, chLatin_S, chNull };
>DOMImplementation *impl = 
>DOMImplementationRegistry::getDOMImplementation(gLS);
>
>
>DOMBuilder *parser = 
>impl->createDOMBuilder(DOMImplementationLS::MODE_SYNCHRONOUS, NULL);
>parser->setFeature(XMLUni::fgDOMNamespaces, true);
>parser->setFeature(XMLUni::fgXercesSchema, true);
>parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
>
>parser->setFeature(XMLUni::fgDOMValidateIfSchema, true);
>
>parser->setFeature(XMLUni::fgDOMDatatypeNormalization, true);
>DOMCountErrorHandler errorHandler;
>parser->setErrorHandler(&errorHandler);
>
>doc = parser->parseURI(X("shiporder.xml"));
>
>DOMWriter         *theSerializer = 
>((DOMImplementationLS*)impl)->createDOMWriter();
>
>             DOMErrorHandler *myErrorHandler = new DOMPrintErrorHandler();
>             theSerializer->setErrorHandler(myErrorHandler);
>             // set feature if the serializer supports the feature/mode
>             if 
> (theSerializer->canSetFeature(XMLUni::fgDOMWRTSplitCdataSections, false))
> 
>theSerializer->setFeature(XMLUni::fgDOMWRTSplitCdataSections, false);
>             if 
> (theSerializer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, false))
> 
>theSerializer->setFeature(XMLUni::fgDOMWRTDiscardDefaultContent, false);
>             if 
> (theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false))
> 
>theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, false);
>             if (theSerializer->canSetFeature(XMLUni::fgDOMWRTBOM, false))
>                 theSerializer->setFeature(XMLUni::fgDOMWRTBOM, false);
>             if 
> (theSerializer->canSetFeature(XMLUni::fgDOMValidateIfSchema, true))
> 
>theSerializer->setFeature(XMLUni::fgDOMValidateIfSchema, true);
>
>         DOMString strSchemaType = 
> "<http://www.w3.org/2001/XMLSchema>http://www.w3.org/2001/XMLSchema";
>         DOMString strSchemaLocation = "shiporder.xsd";
>
>         if(config->canSetParameter(X("validate"), (void*)true))
>                 config->setParameter(X("validate"), (void*)true);
>
>         if (config->canSetParameter(X("schema-type"),NULL))
>                 config->setParameter(X("schema-type"),NULL);
>
>         if (config->canSetParameter(X("schema-type"),(void*)&strSchemaType))
>                 config->setParameter(X("schema-type"),(void*)&strSchemaType);
>
>         if 
> (config->canSetParameter(X("schema-location"),(void*)&strSchemaLocation))
> 
>config->setParameter(X("schema-location"),(void*)&strSchemaLocation);
>
>             XMLFormatTarget *myFormTarget;
>             if (goutputfile)
>                 myFormTarget = new LocalFileFormatTarget("test.xml");
>             else
>                 myFormTarget = new StdOutFormatTarget();
>
>         doc->normalizeDocument();
>
>         theSerializer->writeNode(myFormTarget, *doc);
>
>...
>
>
>Don't pick lemons.
>See all the 
><http://autos.yahoo.com/new_cars.html;_ylc=X3oDMTE0OGRsc3F2BF9TAzk3MTA3MDc2BHNlYwNtYWlsdGFncwRzbGsDbmV3Y2Fycw-->new 
>2007 cars at 
><http://autos.yahoo.com/new_cars.html;_ylc=X3oDMTE0OGRsc3F2BF9TAzk3MTA3MDc2BHNlYwNtYWlsdGFncwRzbGsDbmV3Y2Fycw-->Yahoo! 
>Autos.


---------------------------------------------------------------------
To unsubscribe, e-mail: c-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: c-dev-help@xerces.apache.org