[odb-users] Re: Can one use ODB with Classes generated by XSD?
B Hart
bhartsb at gmail.com
Tue Jul 26 11:57:56 EDT 2011
Thanks for your explanation. Where you say "(those can be placed into a
separate file and included into
the ODB compilation with the --odb-epilogue option)." do you mean the
xsd-generated classes with pragmas?
So hypothetically, if I decided to create a whole new DB (based on the XML
Schema and using ODB), how would I best use the XSD-generated classes with
ODB to do this? Will ODB create a complete DB from the XSD-generated
output? I understand that ODB doesnt' support MS SQL currently so I am
assuming the use MySQL in this case.
-Brian
On Tue, Jul 26, 2011 at 6:37 AM, Boris Kolpackov <boris at codesynthesis.com>wrote:
> Hi Brian,
>
> B Hart <bhartsb at gmail.com> writes:
>
> > I have a large Schema that I compiled with XSD (tree). This allows me to
> > nicely read in corresponding XML data. Now I'm faced with the task of
> > populating an existing DB with the data. However, their are
> difficulties:
> > 1) There are new elements that are not currently stored in the DB, so
> tables
> > and columns will have to be manually added, 2) there is not a nice
> mapping
> > between all of the Schema elements and the corresponding DB
> > table/column...i.e.. some of the element data may have to be modified or
> > combined to go into a DB field, and the document that specifies the
> mappings
> > is incomplete (this means I have to look through hundreds of tables to
> > "figure out" where data goes, for hundreds of elements). 3) Once I
> figure
> > out the mapping I have to then add the code manually to populate the DB
> with
> > the data.
>
> Yes, I think this is a fairly common problem when trying to import data
> from an XML vocabulary to a relational database, unless the XML vocabulary
> was specifically designed with that conversion in mind.
>
>
> > The DB is a MS SQL DB and right now ODB doesn't support MS SQL. However,
> it
> > might be worth switching to MySQL if it were possible and reasonable to
> run
> > ODB against the classes that XSD creates in order to create a correspond
> > MySQL DB Schema and the code to populate it. Then I could read in the
> XML
> > dataset with the XSD generated code and populate and work with the DB
> with
> > ODB generated code.
>
> The problem with automatically storing XSD-generated object model in
> a relational database using ODB is that the conversion is not well
> define and in fact is not always possible. It is not clear whether,
> say, a nested element should be mapped to a column (value type) or
> a reference to another table (object) with the contents of this
> element stored in that table. Some elements can be stored as either
> composite value types or as objects. Those that have more than two
> levels of sequence containment can only be stored as objects.
>
>
> > What are your thoughts.
>
> I see two possible approaches here, depending on how closely the
> XML vocabulary models the database representation.
>
> 1. If XML and database models are very different (as in the case you
> described above), then the best approach would probably be to have two
> object models (sets of C++ classes): the first is for XML (generated
> by the XSD compiler) and the second is for the database (hand-written
> or auto-generated by ODB SQL-to-C++ compiler from the existing schema,
> something that is on our TODO list). Once you have the two models, you
> manually write the code that convert between the two, such as
> performing merging and splitting of members, etc.
>
> 2. If XML models the database pretty closely, then you can take the
> XSD-generated model and map it (using ODB pragmas) to the database
> tables (those can be placed into a separate file and included into
> the ODB compilation with the --odb-epilogue option). Once that is
> done, you can just load the classes from XML and store them into
> the RDBMS.
>
> Boris
>
More information about the odb-users
mailing list