Meta Metadata

An extension to Open Metadata to support the notion of meta-meta-data.

Copyright, Change Process and Language is derived via inheritance as per RFC1.

Goal

It may sometimes be necessary to assign meta-data to meta-data itself; for example, the group.list type represents a physical folder on disk with the suffix “.list”

- personal.list
  +-- firstname.string
  +-- lastname.string
  +-- age.int

Generic meta-metadata

  • readonly
  • hidden
  • permissions

Lists are naturally ordered, but how can we store this order on disk together with the datasets it may contain?

Architecture

One way would be to introduce a header into each of the files.

firstname.string = r'Marcus\norder=0'

This could potentially be appropriate in many situations, but would in this case introduce possibility of conflicting ordering.

firstname.string = r'Marcus\norder=2'
lastname.string = r'Ottosson\norder=2'

So an alternative may be to store this information in a specially formatted dataset pertaining to the information at hand.

- personal.list
  +-- __order__
  +-- firstname.string
  +-- lastname.string
  +-- age.int
__order__ = r'firstname=0\nlastname=1\nage=2'

In code, meta-meta-data could then be retrieved as such:

>>> location = om.Location('/home/marcus')
>>> firstname = location.read('/personal/firstname')
>>> type(firstname)
<type 'Dataset'>
>>> firstname.order
0

Each meta-meta-data dataset or group MAY be accessible via dot-notation syntax by languages that support it and MUST otherwise be accessible via other means.

If a dataset is not included in __order__ then a null value MUST be returned. If the host group does not contain a __order__ meta-meta-data set then an error MUST be raised.

Ordering

Meta-metadata MUST appear after the value so that value may be retrieved without regard to meta-metadata in a streaming fashion.