[xsd-users] Need help with creating Object Model from scratch
Boris Kolpackov
boris at codesynthesis.com
Tue Sep 23 17:02:51 EDT 2008
Hi Laura,
Laura E Fowler <Laura_E_Fowler at raytheon.com> writes:
> I have been trying to figure out how to create an object model from
> scratch with our specific schema. I can't find an example that is similar
> to what we need to do.
The easiest way is to start with the top level element. In your
case I believe it is Marker. This element is of anonymous type
so the name of its class will also be Marker. We start by
creating an instance of Marker:
Marker m (...);
Marker's constructor will have an argument for each required
element or attribute. In our case type Marker has four required
elements: id, deviceType, changed, and DeviceDescription. The
first three arguments are easy:
Marker m ("marker-1", DeviceType::TYPEA, true, ...);
The last argument is of type DeviceDescription which itself
contains elements. So we first need to create an object of
this type:
DeviceDescription dd;
Marker m ("marker-1", DeviceType::TYPEA, true, dd);
But here our dd instance does not have any elements inside. So
we need to set one:
DeviceDescriptionTypeB ddtb ("device-type-b");
DeviceDescription dd;
dd.DeviceDescriptionTypeB (ddtb);
Marker m ("marker-1", DeviceType::TYPEA, true, dd);
The idea here is to start with the outer type and create and set
inner objects as required. Here is the complete example (assumes
the schema is saved as test.xsd):
#include <iostream>
#include "test.hxx"
using namespace std;
using namespace library;
int main ()
{
DeviceDescriptionTypeB ddtb ("device-type-b");
DeviceDescription dd;
dd.DeviceDescriptionTypeB (ddtb);
Marker m ("marker-1", DeviceType::TYPEA, true, dd);
// Print.
//
cerr << m << endl;
// Write to XML.
//
xml_schema::NamespaceInfomap map;
map["lib"].name = "http://www.codesynthesis.com/library";
map["lib"].schema = "test.xsd";
Marker_ (std::cout, m, map);
}
Boris
More information about the xsd-users
mailing list