VOList: initial proposal
Deconstruct a table and you get a list of objects, one object per table row, where the objects have near-identical structure. The object-structure only varies to the extent that the table allows nulls in its columns.
The true table is an advantage if:
- your tools (including DBMS) are designed for tabular data;
- you want a trivial way of displaying the data to a human.
It's a disadvantage if:
- your tools (including XML schemata) are designed for hierarchical data;
- you need to express relationships between the columns.
In the latter case, it's more effective to simply list the objects.
The balance of advantage for the VObs is currently tipping from tables to lists of objects.
VOList is proposed as a generic data-container, a sibling or cousin of VOTable, that presents lists of objects in a controlled form.
This is the data model for VOList.
The document element is
VOList and it contains a a hierarchy of resources. This idea is taken from VOtable where it seems to be useful. In contrast to VOTable 1.0, each element in this hierarchy can have a
ContextualMetadata structure; the form of this is TBD, but one can imagine it containing curation and provenance metadata
inter alia. All these parts are controlled by a
W3C XML schema for VOlist as a whole.
The payload data are all contained in
AnnotatedList.
An
AnnotatedList may contain
ContextualMetadata.
The
AnnotatedList contains exactly one
List. These two elements are defined by the XML schema for VOList as a whole. That schema says that the children of the list may be of any type. The
List also
contains an XML schema for the particular type of object in the list. This latter schema expresses the constraint that all elements in the list are of the same type. Typically, the XML schema for the rows is built from elements in the IVOA data-model. Ideally, the children of
List are directly parts of the IVOA data-model.
The
HowToCrumple and
HowToFlatten elements are not worked out in detail. They are placeholders for some structural metadata saying how to map from VOlist to relational storage.