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, [email protected] 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: [email protected]
Data: 12-set-2011 14.21
A: "[email protected]"<[email protected]>, 
"[email protected]"<[email protected]>
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: [email protected] [mailto:[email protected]]
Sent: Monday, September 12, 2011 8:08 AM
To: [email protected]
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; 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;handler);
         parser->setErrorHandler(&amp;amp;handler);

         parser->parse(xmlFile);
         errorCount = parser->getErrorCount();




     }
     catch (const OutOfMemoryException&amp;amp;)
     {
         XERCES_STD_QUALIFIER cerr<<  "OutOfMemoryException"<<  
XERCES_STD_QUALIFIER endl;
         errorCode = 5;
     }
     catch (const XMLException&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>[email protected]</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>[email protected]</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: [email protected]
Data: 9-set-2011 8.20
A:<[email protected]>
Ogg: Re: Validation documents with SAX in C++

[email protected] 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







Reply via email to