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
69
70
71
72
73
74
75
76
77
|
This example shows how to save/load the C++/Hybrid object model to/from
a custom format using the raw binary representation as an example. Note
that if you would like to use this format in your applications, make sure
that all the targets use exactly the same base type sizes (e.g., int, long,
float, double, size_t, etc.) and byte order.
The example consists of the following files:
library.xsd
XML Schema which describes a library of books.
library.xml
Sample XML instance document.
xml-schema.hxx
xml-schema-pskel.hxx
xml-schema-sskel.hxx
Base object model types (the first file), parser skeletons (the second
file), and serializer skeletons (the third file) for the XML Schema
built-in types. These header files are generated by the XSD/e compiler
using the --generate-xml-schema option. The --generate-parser and
--generate-serializer options were also specified.
irawstream.hxx
irawstream.ixx
irawstream.txx
irawstream.cxx
orawstream.hxx
orawstream.ixx
orawstream.txx
orawstream.cxx
Implementation of the raw binary representation streams. The header
files include xml-schema.hxx to gain access to the base object model
types. You can use this implementation as a base for your custom
format.
library.hxx
library.cxx
library-pskel.hxx
library-pskel.cxx
library-pimpl.hxx
library-pimpl.cxx
library-pskel.hxx
library-pskel.cxx
library-pimpl.hxx
library-pimpl.cxx
Object model (the first pair of files), parser skeletons (the second
pair), parser implementations (the third pair), serializer skeletons
(the fourth pair), and serializer implementations (the fifth pair).
These files are generated by the XSD/e compiler from library.xsd. The
--generate-parser, --generate-serializer, and --generate-aggregate
options were used to request the generation of the parsing and
serialization code. The --generate-insertion and --generate-extraction
options were used to generate the insertion and extraction operations
for the orawstream and irawstream, respectively. The --hxx-prologue
option was used to include the orawstream.hxx and irawstream.hxx
header files at the beginning of library.hxx. Finally, the
--extern-xml-schema option was used to include xml-schema* files
instead of generating the same code directly.
driver.cxx
Driver for the example. It first calls the parser that constructs
the object model from the input XML file. It then saves the object
model to the raw binary representation and loads it back. Finally,
the driver calls the serializer to serialize the loaded object model
back to XML.
To run the example on the sample XML instance document simply execute:
$ ./driver library.xml
The example reads from STDIN if input file is not specified:
$ ./driver <library.xml
|