Join GitHub today
GitHub is home to over 31 million developers working together to host and review code, manage projects, and build software together.Sign up
The design principle of the data model used by NIX, was to create a rather minimalist, generic, yet expressive model, that is able to represent data stored in other widely used formats or models like Neuroshare or NEO without any loss of information. Due to its generic approach, the data model is furthermore able to represent also other kinds of data used in the field e.g. image data or image stacks.
Since NIX was also designed to annotate data with metadata the model includes the odML model for metadata for this purpose. odML was published by Jan Grewe et al. (2011).
Neither the model for data nor the model for metadata (odML) are domain specific to electrophysiology, but both models can be linked to predefined or custom terminologies which enables the user to give elements of the models a domain specific, semantic context.
Model for Data
The NIX model for data consists of six main elements: Block, DataArray, Tag, MultiTag, and Source and Group. A Block entity acts as a node that contains all other entities of the data model, it can be considered as something like a collection of data or a dataset. A DataArray is a multidimensional array of data that provides some additional information about the data it contains, such as data type number of dimensions unit etc. Furthermore a DataArray entity has a of dimension descriptor for each dimension, that provides information like sampling interval, unit or label. In brief: the DataArray already provides enough information to interpret its content and e.g. generate a plot. The MultiTag, Tag entities is mainly used to define regions of interests or certain points inside one or many DataArray entities. Therefore a Tags can be represent all kinds of different elements, for example an event, a spike train, an epoch or a segment. Source entities can define the provenance of a Tag or DataArray. The Group, finally acts as a simple grouping element which, in its current form, just expresses, that the memebers of the group (dataArrays, tags and multiTags) somehow belong together. A Group can link to Sources and can have metadata attached to it.
You can navigate to a more detailed model description:
Depicted in the following image is a simplified version of the data model, that demonstrates how the basic entity types can describe a dataset containing an annotated analogsignal.
Metadata are an important an integral part of the data and, in our opinion, it is essential to support linking between data and metadata.
The model for storing metadata is largely equivalent to the odML (open metadata Markup Laguage) model. In brief: the model consists of so called Properties that contain Values much like a key-value pair (plus some additional fields). These Properties can be grouped into Sections which themselves can be nested to built a tree-structure. Sections are defined by a name and a type (e.g. a stimulus-type section will contain information that is related to a stimulus). The RootSection of the tree contains some document information like author and version but cannot carry own properties. The basic feature of the odML approach is that it defines the model but not the items that are described or the terms that are used in this. On the other hand where standardization is required each Section can be based on an odML-terminology that standardizes without restricting to the terms defined within the terminology.
Integration of data and metadata
The major entities of the data model (Block, Tag, DataArray and Source) contain the metadata field which is used to link between data and metadata. The link is established by referencing the id of the corresponding metadata section. There can be only one link from a data model entity to a section in the metadata. A Information that can be found in the linked section and all its children is assumed to related to the linking data entity. There is one specificity: if the type of the section and data object match, the connection between them are considered to be of the extends type that is, the information of the data object directly extends the information provided in the metadata and vice versa. If they do not match, metadata object and data object are related in a has a kind of connection. They belong to each other but the data object is not a further specification of the metadata object. For example we can relate a section describing a stimulus (type stimulus) to a DataArray of the same type indicating that the contained data is the realization of the stimulus. On the other hand the same section can be linked to a MultiTag object of the type “analogSignal” which would indicate that the analog signal in the specified range was evoked using that stimulus but is not the stimulus time-course itself.