xerces-c-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "alessandra.brindisi@virgilio.it" <alessandra.brind...@virgilio.it>
Subject R: Re: R: RE: Re: Validation documents with SAX in C++
Date Tue, 13 Sep 2011 11:29:57 GMT
The following code is the only final version of the algorithm, which returns as a mandate running
errorCount = 6, I have deliberately altered the pattern. Xsd so that it is different from
the xml file. How do I get my printing errors that occurred during the parsing? Thank you.

int main(int argC, char* argV[])
{

        char* filename;
        bool dtdValidate = false;
        bool xsdValidate = false;
        static char* schemaSorgente=0;
        char* dtdSorgente;
        int i;

         try
            {
              XMLPlatformUtils::Initialize();
            }
        catch (const XMLException&amp; toCatch)
         {
         XERCES_STD_QUALIFIER cerr << "Si è verificato un errore in fase di inizializzazione!
:\n"
              << StrX(toCatch.getMessage()) << XERCES_STD_QUALIFIER endl;
         return 1;
    }

        for (i = 1; i < argC; i++) {
            //Argomenti in posizione 0 non ci interessa in quanto è relativo al progetto.
I paramentri
            //passati in input sono 4 ma è necessario analizzare solo quelli in posizione
1-2-3
            if (!strcmp(argV[i], "-dtd")) {
                dtdValidate = true;
                dtdSorgente = argV[++i];
            } else if (!strcmp(argV[i], "-xsd")) {
                xsdValidate = true;
                 schemaSorgente = argV[++i];

            }}


    xmlFile = argV[3];
     int errorCount = 0;

    SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);
parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
parser->setFeature(XMLUni::fgXercesDynamic, false);
parser->setFeature(XMLUni::fgXercesSchema, true);
parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
    int errorCode = 0;
    try
    {
          parser->setContentHandler(&amp;handler);
        parser->setErrorHandler(&amp;handler);
        parser->setEntityResolver(&amp;handler);

        parser->parse(xmlFile);

        errorCount = parser->getErrorCount();
        cout << "Numero errori: "<<errorCount;

    }

     catch (const OutOfMemoryException&amp;)
        {
            XERCES_STD_QUALIFIER cerr << "OutOfMemoryException" << XERCES_STD_QUALIFIER
endl;
            errorCode = 5;
        }
        catch (const XMLException&amp; toCatch)
        {
            XERCES_STD_QUALIFIER cerr << "\nAn error occurred\n  Error: "
                 << StrX(toCatch.getMessage())
                 << "\n" << XERCES_STD_QUALIFIER endl;
            errorCode = 4;
        }
        if(errorCode) {
            XMLPlatformUtils::Terminate();
            return errorCode;
        }


        //
        //  Delete the parser itself.  Must be done prior to calling Terminate, below.
        //
        delete parser;

        // And call the termination method
        XMLPlatformUtils::Terminate();


        if (errorCount > 0)
            return 4;
        else
            return 0;
    };




----Messaggio originale----
Da: Alberto.Massari@progress.com
Data: 13-set-2011 8.19
A: <c-users@xerces.apache.org>
Ogg: Re: R: RE: Re: Validation documents with SAX in C++

Hi Alessandra,
the location of the file should be a valid URI, so you should replace 
spaces with %20

Alberto

Il 12/09/2011 21:52, alessandra.brindisi@virgilio.it ha scritto:
> I replaced
>
> parser->setProperty(XMLUni::fgXercesSchemaExternalSchemaLocation,schemaSorgente);
>
> con
>
> parser->setProperty(XMLUni::fgXercesSchemaExternalNoNameSpaceSchemaLocation,schemaSorgente);
>
> I no longer have the error on schemalocator but I get the following error enable entities
to open prumary C: / Documents ..... /?????d???1???. And then I printed a series of errors
such as:
>   -no declaration found for element personnel.
>   I think I can not open or find the file. xsd. What could be the problem, run the code
as a console project in VisualStudio 2008.
> Any idea on the problem?
>
>
>
>
>
> ----Messaggio originale----
> Da: jsp@PKC.com
> Data: 12-set-2011 14.21
> A: "c-users@xerces.apache.org"<c-users@xerces.apache.org>, "alessandra.brindisi@virgilio.it"<alessandra.brindisi@virgilio.it>
> Ogg: RE: Re: Validation documents with SAX in C++
>
> The error is in your XML.  If you use the schemaLocation attribute, its value must consist
of namespace and schema location pairs separated by spaces.  To specify just a location use
the noNamespaceSchemaLocation attribute instead of the schemaLocation attribute.
>
> -----Original Message-----
> From: alessandra.brindisi@virgilio.it [mailto:alessandra.brindisi@virgilio.it]
> Sent: Monday, September 12, 2011 8:08 AM
> To: c-users@xerces.apache.org
> Subject: R: Re: Validation documents with SAX in C++
>
> I implemented the following algorithm:
>
> int main(int argC, char* argV[])
> {
>
>          char* filename;
>          bool dtdValidate = false;
>          bool xsdValidate = false;
>          char* schemaSorgente;
>          char* dtdSorgente;
>          int i;
>
>           try
>              {
>                XMLPlatformUtils::Initialize();
>              }
>          catch (const XMLException&amp;amp;amp; toCatch)
>           {
>           XERCES_STD_QUALIFIER cerr<<  "Si è verificato un errore in fase di inizializzazione!
:\n"
>                <<  StrX(toCatch.getMessage())<<  XERCES_STD_QUALIFIER endl;
>           return 1;
>      }
>
>          for (i = 1; i<  argC; i++) {
>            if (!strcmp(argV[i], "-dtd")) {
>                  dtdValidate = true;
>                  dtdSorgente = argV[++i];
>              } else if (!strcmp(argV[i], "-xsd")) {
>                  xsdValidate = true;
>                   schemaSorgente = argV[++i];
>
>              }}
>
>
>      xmlFile = argV[3];
>       int errorCount = 0;
>
>
>
>      SAX2XMLReader* parser = XMLReaderFactory::createXMLReader();
> parser->setFeature(XMLUni::fgSAX2CoreNameSpaces, true);
> parser->setFeature(XMLUni::fgSAX2CoreValidation, true);
> parser->setFeature(XMLUni::fgXercesSchemaFullChecking, true);
> parser->setProperty(XMLUni::fgXercesSchemaExternalSchemaLocation,schemaSorgente);
>
>
>
>
>      int errorCode = 0;
>      try
>      {
>         XmlToTestoSAX handler(encodingName, unRepFlags);
>        //  parser->setDocumentHandler(&amp;amp;amp;handler);
>          parser->setErrorHandler(&amp;amp;amp;handler);
>
>          parser->parse(xmlFile);
>          errorCount = parser->getErrorCount();
>
>
>
>
>      }
>      catch (const OutOfMemoryException&amp;amp;amp;)
>      {
>          XERCES_STD_QUALIFIER cerr<<  "OutOfMemoryException"<<  XERCES_STD_QUALIFIER
endl;
>          errorCode = 5;
>      }
>      catch (const XMLException&amp;amp;amp; toCatch)
>      {
>          XERCES_STD_QUALIFIER cerr<<  "\nAn error occurred\n  Error:"
>               <<  StrX(toCatch.getMessage())
>               <<  "\n"<<  XERCES_STD_QUALIFIER endl;
>          errorCode = 4;
>      }
>      if(errorCode) {
>          XMLPlatformUtils::Terminate();
>          return errorCode;
>      }
>
>      //
>      //  Delete the parser itself.  Must be done prior to calling Terminate, below.
>      //
>      delete parser;
>
>      // And call the termination method
>      XMLPlatformUtils::Terminate();
>
>
>      if (errorCount>  0)
>          return 4;
>      else
>          return 0;
> };
>
> but I believe there are errors. Pass the following parameters from the command line:
>
> -xsd xml\personal.xsd xml\personal-schema.xml
>
> The xml file input is given in the following:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <?proc-inst-1 'foo' ?>
> <personnel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
> xsi:schemaLocation="C:/Documents and Settings/Alessandra/Documenti/Visual Studio 2008/Projects/XmlToTestoSAXMain/xml/personal.xsd"
>         >
>
>    <person id="Big.Boss">
>      <name xml:base="foo/bar"><family  xml:base="bar/bar">Boss</family>
 <given xml:base="car/bar">Big</given><?proc-inst-2 'foobar' ?></name>
>      <email>chief@foo.com</email>
>      <link subordinates="one.worker two.worker three.worker four.worker five.worker"/>
>    </person>
>
>    <person id="one.worker" xml:base="/auto/bar">
>      <name xml:base="/car/foo/"><family xml:base="bar/bar">Worker</family>
 <given>One</given></name>
>      <email>one@foo.com</email>
>      <link manager="Big.Boss"/>
>    </person>
> </personnel>
>
> XSD schema is:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
>
>   <xs:import namespace="http://www.w3.org/XML/1998/namespace">
>     <xs:annotation>
>       <xs:documentation>
>          The schemaLocation of the relevant file is
>          "http://www.w3.org/2001/xml.xsd"; however,
>          we don't want to assume people are always
>          connected to the 'net when playing with this file.
>       </xs:documentation>
>     </xs:annotation>
>   </xs:import>
>
>   <xs:element name="personnel">
>    <xs:complexType>
>     <xs:sequence>
>       <xs:element ref="person" minOccurs='1' maxOccurs='unbounded'/>
>     </xs:sequence>
>    </xs:complexType>
>
>    <xs:unique name="unique1">
>     <xs:selector xpath="person"/>
>     <xs:field xpath="name/given"/>
>     <xs:field xpath="name/family"/>
>    </xs:unique>
>    <xs:key name='empid'>
>     <xs:selector xpath="person"/>
>     <xs:field xpath="@id"/>
>    </xs:key>
>    <xs:keyref name="keyref1" refer='empid'>
>     <xs:selector xpath="person"/>
>     <xs:field xpath="link/@manager"/>
>    </xs:keyref>
>
>   </xs:element>
>
>   <xs:element name="person">
>    <xs:complexType>
>     <xs:sequence>
>       <xs:element ref="name"/>
>       <xs:element ref="email" minOccurs='0' maxOccurs='unbounded'/>
>       <xs:element ref="url"   minOccurs='0' maxOccurs='unbounded'/>
>       <xs:element ref="link"  minOccurs='0' maxOccurs='1'/>
>     </xs:sequence>
>     <xs:attribute name="id"  type="xs:ID" use='required'/>
>     <xs:attribute name="note" type="xs:string"/>
>     <xs:attribute name="contr" default="false">
>      <xs:simpleType>
>       <xs:restriction base = "xs:string">
>         <xs:enumeration value="true"/>
>         <xs:enumeration value="false"/>
>       </xs:restriction>
>      </xs:simpleType>
>     </xs:attribute>
>     <xs:attribute name="salary" type="xs:integer"/>
>     <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"/>
>    </xs:complexType>
>   </xs:element>
>
>   <xs:element name="name">
>    <xs:complexType>
>     <xs:all>
>      <xs:element ref="family"/>
>      <xs:element ref="given"/>
>     </xs:all>
>     <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"/>
>    </xs:complexType>
>   </xs:element>
>
>   <xs:element name="family">
>     <xs:complexType>
>       <xs:simpleContent>
>         <xs:extension base='xs:string'>
>            <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"/>
>          </xs:extension>
>       </xs:simpleContent>
>     </xs:complexType>
>   </xs:element>
>
>   <xs:element name="given">
>     <xs:complexType>
>       <xs:simpleContent>
>         <xs:extension base='xs:string'>
>            <xs:anyAttribute namespace="http://www.w3.org/XML/1998/namespace" processContents="skip"/>
>          </xs:extension>
>       </xs:simpleContent>
>     </xs:complexType>
>   </xs:element>
>
>   <xs:element name="email" type='xs:string'/>
>
>   <xs:element name="url">
>    <xs:complexType>
>     <xs:attribute name="href" type="xs:string" default="http://"/>
>    </xs:complexType>
>   </xs:element>
>
>   <xs:element name="link">
>    <xs:complexType>
>     <xs:attribute name="manager" type="xs:IDREF"/>
>     <xs:attribute name="subordinates" type="xs:IDREFS"/>
>    </xs:complexType>
>   </xs:element>
>
>   <xs:notation name='gif' public='-//APP/Photoshop/4.0' system='photoshop.exe'/>
>
> </xs:schema>
>
>
>   When you launch the program running I get the following screen:
>
> Fatal error at file C:\Documents and Settings\Alessandra\Documenti\Visual Studio 2008\Projects\XmlToTestoSAXMain\xml\personal-schema.xml,
line 6, char 6
> Message: schemaLocation does not contain name-space location pairs
>
> There are errors in the file. Xml or. Xsd? Furthermore, my algorithm allows to validate
an XML document based on a DTD or XSD supplied from the outside? Thank you. greetings
>
>
> ----Messaggio originale----
> Da: marl@mebius.net
> Data: 9-set-2011 8.20
> A:<c-users@xerces.apache.org>
> Ogg: Re: Validation documents with SAX in C++
>
> alessandra.brindisi@virgilio.it wrote:
>>    Hello, you can have some indication of the methods used to check whether an XML
document conforms to a DTD or XSD with SAX in C++.
>> Thank you. Alessandra greetings.
> Hi,
>
> Please look at the SAX2Count sample source code from the Xerces-C++
> source distribution.
>
> Good luck!
>      Vitaly
>
>
>
>
>
>





Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message