Well, I didn't learn more ... Here is the code I use: XercesDOMParser* parser = new XercesDOMParser();
parser->setDoValidation(true); parser->setDoSchema(true); parser->setDoNamespaces(true); parser->setValidationScheme(XercesDOMParser::Val_Always); parser->setExternalSchemaLocation ( "http://www.elodig.fr/logs file:///path/schema.xsd" ); try { parser->parse ( xmlFile ); } catch (const OutOfMemoryException& toCatch ) { ... And I don't catch any error (see the xml and xsd file at the bottom : there are errors in the xml file). I tried also to load the grammar: parser->useCachedGrammarInParse(true); parser->useCachedGrammarInParse(true); parser->loadGrammar("/path/shcema.xsd", Grammar::SchemaGrammarType, true); Without any success either. Here are the xsd file and then the xml one : <?xml version="1.0" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.elodig.fr/logs" xmlns="http://www.elodig.fr/logs" elementFormDefault="qualified"> <!-- Defines log data elements --> <xs:element name="data_element"> <xs:complexType> <xs:sequence> <xs:element name="element_name"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="30"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="element_value"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="100"/> </xs:restriction> </xs:simpleType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <!-- Defines a log --> <xs:element name="log"> <xs:complexType> <xs:sequence> <xs:element name="id" type="xs:nonNegativeInteger" /> <xs:element name="extension"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:minLength value="0"/> <xs:maxLength value="50"/> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="event_type"> <xs:simpleType> <xs:restriction base="xs:string"> <xs:enumeration value="action" /> <xs:enumeration value="command" /> <xs:enumeration value="result" /> </xs:restriction> </xs:simpleType> </xs:element> <xs:element name="data"> <xs:complexType> <xs:sequence> <xs:element ref="data_element" /> <xs:any minOccurs="0"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="record_time" type="xs:dateTime" /> </xs:sequence> </xs:complexType> </xs:element> <!-- Defines a set of logs --> <xs:element name="logs"> <xs:complexType> <xs:sequence> <xs:element ref="log" /> <xs:any minOccurs="1"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> <?xml version="1.0" encoding="UTF-8"?> <log xmlns="http://www.elodig.fr/logs" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.elodig.fr/logs file:///path/schema.xsd"> <id>1</id> <bubu></bubu> <extension>base</extension> <event_type>action</event_type> <data type="bubu"> <data_element> <element_name>bibi</element_name> <element_value>is happy</element_value> </data_element> <data_element> <element_name>baba</element_name> <element_value>is not happy</element_value> </data_element> </data> </log> According to the xsd file, everywhere where "bubu" appears should trigger an exception. It does not. Any clue? Thanks, - Emmanuel Jesse Pelton wrote: > You may also want to take a look at DOMPrint. It's roughly equivalent > to SAX2Print but uses DOM APIs instead of SAX 2. > > -----Original Message----- > From: David Bertoni [mailto:[EMAIL PROTECTED] > Sent: Monday, April 30, 2007 2:38 PM > To: [email protected] > Subject: Re: Hints on registering an XMLEntityResolver handler > > Emmanuel Guiton wrote: >> Hello, >> >> I want to force an XML document validation using an XML Schema. >> I am trying to register an XMLEntityResolver handler to do that (Iam >> suing a DOMParser). Quite difficult for a beginner like me since the >> documentation on http://xml.apache.org/xerces-c/apiDocs is wrong. > > The C++ documentation is generated from the source code using Doxygen, > so I > don't know what you mean by saying it's "wrong." Is it out-of-date? > Does > it not answer your questions? It's always helpful to know what's wrong, > so > we can fix it. > >> Does someone have good hints (a webpage with an example?) on how to >> register an XMLEntityResolver handler? > > You cannot force validation using an XMLEntityResolver, although you can > > force the parser to use a particular schema document or documents. Can > you > describe exactly what you're doing? For example, users often forget to > set > all of the options necessary for schema validation. > >> Or does someone have a simpler way to validate an XML file against an >> XML schema (which is stored on my local filesystem)? I've tried using >> setExternalSchemaLocation without any success. > > As long as the document element contains a reference to the schema > location > hint you provided, and the proper options are set, it should work. Have > > you taken a look at the sample applications to see how to enable > validation? SAX2Print is a good place to start. > > Another option for forcing validation against a particular schema is to > use > the proprietary loadGrammar() API. You can then set the feature to use > the > cached grammar during parsing: > > http://xml.apache.org/xerces-c/program-sax2.html#use-cached > > Dave > > -- Directeur Elodig SARL 30-32, avenue de la République 94800 Villejuif Tel: 01 46 77 47 68 E-mail: [EMAIL PROTECTED] http://www.elodig.fr
