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