This example shows how to handle schema evolution using substitution groups.
The general idea is as follows: the initial version of the schema defines
extension points using the XML Schema substitution group mechanism. The
subsequent versions of the schema add new elements to the substitution
groups. The goal here is for applications that were built using earlier
versions of the schema to be able to handle documents corresponding to the
newer versions without validation errors or any other failures. This example
shows how to ignore such new elements. The 'passthrough' example shows how
to pass the unknown content through parsing and serialization so that the
output XML contains all the unknown elements.

This example uses XML Schema polymorphism in the form of substitution groups.
If you are not familiar with how to work with polymorphic object models,
refer to the C++/Hybrid Mapping Getting Started Guide as well as the
'polymorphism' example in the cxx/hybrid/ directory.

The example consists of the following files:

transform.xsd
  The initial version of the schema that describes simple transformations,
  such as move and rotate. The schema makes it possible to add new
  transformations in subsequent versions of the schema. Our example is built
  using this schema.

transform-v2.xsd
  The second version of the schema which adds the scale transformation. This
  schema is provided as an example.

transform.xml
  Sample XML document corresponding to the second version of the schema. In
  particular, it contains the scale transformation which is unknown in
  transform.xsd.

transform.hxx
transform.cxx

transform-pskel.hxx
transform-pskel.cxx

transform-pimpl.hxx
transform-pimpl.cxx
  Object model (the first pair of files), parser skeletons (the second pair)
  and parser implementations (the third pair). These files are generated by
  the XSD/e compiler from transform.xsd. The --generate-parser and
  --generate-aggregate options were used to request the generation of the
  parsing code. The --generate-polymorphic option was used to request the
  generation of the polymorphism-aware code. Finally, the --root-element
  option was used to specify the document root element.

driver.cxx
  Driver for the example. It first sets the substitution map callback that
  is used to tell the parser which elements should be ignored. The driver
  then calls the parser that constructs the object model from the input XML
  file. Finally, it prints the content of the object model to STDERR.

To run the example on the sample XML instance document simply execute:

$ ./driver transform.xml

The example reads from STDIN if input file is not specified:

$ ./driver <transform.xml
