XML-Data and database mapping
Andy Dent
dent at oofile.com.au
Thu May 6 11:01:38 BST 1999
I've been wrestling with issues for encoding databases (and report
definitions) into a single XML file and restoring them, for some time. I
would appreciate some feedback on the following. I would be ecstatic to be
told I'm blind, stupid, lazy and have missed some very obvious postings
covering all these issues :-)
-----
EMBEDDED SCHEMA
My current compromise is to have
<report>
<Schema>
</Schema>
other tags
</report>
where the schema describes all following tags but obviously not the root
<report> tag.
Note: I'm using the MS convention of <Schema> rather than strict XML-Data
name <schema>.
-----
MAPPING FIELD TYPES AND TABLES
The most serious problem I see with mapping database schemae using XML-Data
or the other published suggestions is the lack of scoping.
As I understand the (suggested) specifications and the current MS versions,
fields within database tables will be handled by <ElementType> definitions
and referred to from within a table's <ElementType> by <element> tags.
This means that fields within tables are globally scoped in their
definition, unlike the usual DB practice that a field is defined within the
context of a database table (relation).
At a trivial level, "Name" might be a compatible data type such as
fixed-length string, but a different length, within <Person> and
<Organisation>.
I would vastly prefer to use an agreed standard for our schema
export/import but this restriction makes it impossible.
Once you accept that field definitions can be scoped within tables, it's a
much nicer syntax to define field data types within the <element> tag as
shown below. This approach can co-exist with defining <ElementTypes>
separately as separate definitions would be seen as
<element id="#Address">
instead of
<element name="Addresss" dt:dt="string">
-----
EXAMPLE OUTPUT
FWIW the following is the current output of our report writer, which I am
in the process of enhancing so it can read such a report document back in
again.
Note:
1) we encode layout separately from style
2) the style strings are mainly CSS compliant except if we have things like
graphs where we use CSS-like syntax to describe graph attributes
3) our layout has a CSS object model where possible and includes an
assumption of nested styles - an element within the layout inherits styles
from its containing elements.
<?xml version="1.0" standalone="yes"?>
<report>
<!--
OOFILE extension to XML-Data allows <element> definition without
<ElementType> for primitives
so our dbFields are <elements> with the datatype declared as
attribute, rather than the
official method of declaring an <ElementType> then using an IDRef in
the type attribute
-->
<Schema
xmlns="urn:schema-microsoft-com:xml-data"
xmlns:dt="urn:schema-microsoft-com:datatypes"
xmlns:oof="urn:schema-oofile-com-au:datatypes">
<ElementType name="perfTable">
<element name="ID" dt:dt="string" oof:maxlen="15"/>
<element name="Name" dt:dt="string" oof:maxlen="41"/>
<element name="Awarded" dt:dt="ui4"/>
<element name="Teacher" dt:dt="string" oof:maxlen="8"/>
</ElementType>
</Schema>
<layout ID="1-1">
<header>
<box ID="1-1-1">
<inline>Page 1</inline>
</box>
<box ID="1-1-1-2">
<inline>Set your school name in 'Preferences'</inline>
</box>
<box ID="1-1-1-3">
<inline>Outcomes achieved by this student</inline>
<inline></inline>
<BR/>
<inline>Josef ABRAMSON</inline>
</box>
<space height="4"/>
<HR height="2"/>
<space height="12"/>
</header>
<footer>
<HR height="2"/>
<space height="4"/>
<box ID="1-1-1-3">
<inline>KIDMAP 99 for Macintosh</inline>
<inline>Printed by KIDMAP Manager on 5/5/1999</inline>
</box>
</footer>
<table ID="1-1-1" source="perfTable">
<footer>
<space height="12"/>
<box ID="1-1-1-1-2">
<inline>Number of outcomes listed: </inline>
<inline>24</inline>
</box>
</footer>
</table>
</layout>
<style>
#1-1-1{font-family: Helvetica; line-height: 1.000 ; font-size: 10
; color: rgb(0, 0, 0); text-align: left}
#1-1-1-2{font-family: Helvetica; line-height: 1.000 ; font-size:
16 ; font-weight: bold; font-stretch: expanded; color: rgb(0, 0, 0);
text-align: left}
#1-1-1-3{font-family: Helvetica; line-height: 1.000 ; font-size:
14 ; font-weight: bold; color: rgb(0, 0, 0); text-align: left}
#1-1-1-3{font-family: Helvetica; line-height: 1.000 ; font-size:
10 ; font-weight: bold; color: rgb(0, 0, 0); text-align: left}
#1-1-1{font-family: Helvetica; line-height: 1.000 ; font-size: 10
; color: rgb(0, 0, 0); text-align: left}
#1-1-1-1-2{font-family: Helvetica; line-height: 1.000 ; font-size:
12 ; font-weight: bold; color: rgb(0, 0, 0); text-align: left}
</style>
<perfTable>
<ID>ARDA11</ID>
<Name>Draws upon play</Name>
<Awarded>16th Mar 1999</Awarded>
<Teacher>MANAGER</Teacher>
<ID>ARDA21</ID>
<Name>Use experience</Name>
<Awarded>16th Mar 1999</Awarded>
<Teacher>MANAGER</Teacher>
<ID>ARDA31</ID>
<Name>Explore ideas</Name>
<Awarded>16th Mar 1999</Awarded>
<Teacher>MANAGER</Teacher>
<ID>ARDA41</ID>
<Name>Experiment - ideas</Name>
<Awarded>16th Mar 1999</Awarded>
<Teacher>MANAGER</Teacher>
</perfTable>
</report>
Andy Dent BSc MACS AACM, Software Designer, A.D. Software, Western Australia
OOFILE - Database, Reports, Graphs, GUI for c++ on Mac, Unix & Windows
PP2MFC - PowerPlant->MFC portability
http://www.oofile.com.au/
xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ and on CD-ROM/ISBN 981-02-3594-1
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)
More information about the Xml-dev
mailing list