summaryrefslogtreecommitdiff
path: root/PACKAGE-README.md
blob: 4a1ce70a84b72ead5e6644f6e4c6ebc9f510512b (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
# XSD

XSD is an open-source, cross-platform XML Schema to C++ data binding
compiler. Provided with an XML document specification (XML Schema), it
generates C++ classes that represent the given vocabulary as well as XML
parsing and serialization code. You can then access the data stored in XML
using types and functions that semantically correspond to your application
domain rather than dealing with generic elements/attributes and raw strings.

For further information, refer to the [XSD project
page](https://codesynthesis.com/products/xsd/).

## Usage

XSD consists of several packages with the main ones being `xsd` (the XML
Schema to C++ compiler) and `libxsd` (the runtime library). There are also
several `*-tests` packages as well as `xsd-examples`.

When specifying dependencies on XSD packages in your project, the `xsd`
package should be a build-time dependency. The `libxsd` library is
header-only and because it can be used either with Xerces-C++ or
Expat as the underlying XML parser, it does not have a dependency on
either, expecting your project to make the choice by depending on
one or the other explicitly and then importing and linking the
corresponding library.

So, putting it all together, your project's `manifest` would normally
have the following fragment if using Xerces-C++:

```
depends: * xsd ^4.2.0
depends: libxsd ^4.2.0
depends  libxerces-c ^3.2.4
```

Or the following fragment if using Expat:

```
depends: * xsd ^4.2.0
depends: libxsd ^4.2.0
depends  libexpat ^2.5.0
```

Then your `buildfile` would have something along these lines if using
Xerces-C++:

```
import! [metadata] xsd = xsd%exe{xsd}

import libs  = libxsd%lib{xsd}
import libs += libxerces-c%lib{xerces-c}
```

Or along these lines if using Expat:

```
import! [metadata] xsd = xsd%exe{xsd}

import libs  = libxsd%lib{xsd}
import libs += libexpat%lib{expat}
```

Note that the `xsd` executable provides `build2` metadata.

The compilation of XML Schema to C++ can be implemented using ad hoc recipes
or rules. See the `xsd-examples` package for the complete examples.