summaryrefslogtreecommitdiff
path: root/xsd-examples/cxx/tree/compression/README
blob: e2b7dd54566190980a53003584cff396a417134a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
This example shows how to compress an XML document during serialization
and decompress it during parsing. The example uses the compression
functionality provided by the zlib library[1] which needs to be installed
in order to build and run this example. It should also be fairly straight-
forward to modify the code in this example to use other compression
libraries.

[1] http://www.zlib.net

The example consists of the following files:

library.xsd
  XML Schema which describes a library of books.

library.xml.gz
  Sample XML instance document compressed using the gzip format.

compressed-format-target.hxx
compressed-format-target.cxx
  Implementation of the Xerces-C++ XMLFormatTarget interface with the on-
  the-fly compression support. You can use it in your application to add
  XML compression.

compressed-input-source.hxx
compressed-input-source.cxx
  Implementation of the Xerces-C++ InputSource interface with the on-the-
  fly decompression support. You can use it in your application to add
  XML decompression.

library.hxx
library.cxx
  C++ types that represent the given vocabulary and a set of parsing
  functions that convert XML instance documents to a tree-like in-memory
  object model.

  These files are generated by the XSD compiler from library.xsd using
  the following command line:

  xsd cxx-tree --generate-serialization --generate-ostream library.xsd

driver.cxx
  Driver for the example. It first creates the compressed_input_source
  object and passes it to one of the parsing functions that constructs
  the object model from the compressed input file. It then prints the
  content of the object model to STDERR. Finally, the driver creates the
  compressed_format_target object and passes it to one of the serialization
  functions which converts the object model back to the compressed XML.

To compile and link the example manually from the command line we can use
the following commands (replace 'c++' with your C++ compiler name):

c++ -DXSD_CXX11 -c library.cxx
c++ -DXSD_CXX11 -c compressed-format-target.cxx
c++ -DXSD_CXX11 -c compressed-input-source.cxx
c++ -DXSD_CXX11 -c driver.cxx
c++ -o driver driver.o library.o compressed-format-target.o \
    compressed-input-source.o -lz -lxerces-c

Note that we need to define the XSD_CXX11 preprocessor macro since the
source code includes libxsd headers directly.

To run the example on the sample XML document execute:

./driver library.xml.gz

The serialization output is written to the out.xml.gz file.