[xsd-users] Validation during serialization?

Lenz, Timothy K timothy.k.lenz at lmco.com
Mon Mar 31 15:01:30 EDT 2008


Good day to all!

 

I am currently parsing and serializing XML files with the greatest of
ease using XSD.  My problem is, however, that I can't figure out how to
validate what I serialize against the XML schema without reparsing what
I just serialized.

 

The parsing methods take a Properties class which provides the location
of the XML schema, but the closest thing I can find for the
serialization methods is the namespace_infomap which puts that info in
the output, but does not seem to actually validate any of the data
against the provided schema.

 

Basically, I can do this:

 

   /* First, let's make a new XML file */

 

   string outfile("out.xml");

   ofstream f(outfile.c_str());

   MyData md;

 

   /* populate md here with values that violate the schema */

 

   xml_schema::NamespaceInfomap map;

   map[""].name = "MyNS";

   map[""].schema = "MyNS.xsd";

   

   try

   {

      serializeMyData(f, md, map);

   }

   catch(const xml_schema::Exception &e)

   {

      /* serialization works great, no exceptions thrown */

      cerr << e << endl;

      return 1;

   }

 

   f.close();

 

   /* Now let's read what we just wrote */

   

   try

   {

      xml_schema::Properties props;

      props.schema_location("MyNS", MyNS.xsd");

      /* Alternatively, could not populate props.schema_location 

         and just use what's in the output xml file.

         The results are the same either way. */

 

      auto_ptr<MyData> inmd (

            parseMyData(outfile.c_str(), 0, props));

   

   }

   catch(const xml_schema::Exception &e)

   {

      /* Always catching exceptions in here for the data

         that violates the schema.  This is data generated

         by the above serialization call. */

      cerr << e << endl;

      return 1;

   }

 

I've been looking through the command line options and the online
manuals for serialization of the cxx-tree stuff, but have yet to find
anything that helps me do this.

 

Thanks in advance!

Tim Lenz 



 




More information about the xsd-users mailing list