summaryrefslogtreecommitdiff
path: root/xsd-examples/cxx/tree/binary/boost/README
blob: 4f5ae9a3c076ef8dee947be68780b38948d50bd8 (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
67
68
This example shows how to save/load the object model to/from a custom
format using the Boost serialization library as an example. You will
need the Boost serialization library[1] installed in order to build
and run this example.

[1] http://www.boost.org

The example consists of the following files:

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

library.xml
  Sample XML instance document.

boost-archive-extraction.hxx
boost-archive-insertion.hxx
  Boost archive insertion and extraction operators for fundamental
  types. You will need to provide a similar set of operators for
  your own stream types.

library-prologue.hxx
  Contains a number of #include directives that are inserted into
  the generated code by the XSD compiler. The included files are:
  boost/archive/text_oarchive.hpp, boost/archive/text_oarchive.hpp,
  boost-archive-insertion.hxx, and boost-archive-insertion.hxx.

library.hxx
library.cxx
  C++ types that represent the given vocabulary as well as Boost
  archive insertion and extraction operations.

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

  xsd cxx-tree --generate-ostream \
      --hxx-prologue-file=library-prologue.hxx \
      --generate-insertion 'boost::archive::text_oarchive' \
      --generate-extraction 'boost::archive::text_iarchive' \
      library.xsd

  The --hxx-prologue-file option is used to insert the contents of
  the library-prologue.hxx file into the generated header file. The
  --generate-insertion and --generate-extraction options are used to
  generate the insertion and extraction operations for text_oarchive
  and text_iarchive types.

driver.cxx
  Driver for the example. It first calls one of the parsing functions
  that constructs the object model from the input XML file. It then
  saves the object model to text_oarchive and loads it back from
  text_iarchive. Additionally, it prints the resulting text
  representation as well as the content of the object model before
  saving it to text_oarchive and after loading it from text_iarchive.

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 driver.cxx
c++ -o driver driver.o library.o -lboost_serialization -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 instance document execute:

./driver library.xml