An annotation can be seen as a key-value pair that can be
attached to an item.
A single annotation may have multiple values, how many is
controlled by the annotation type (see below).
Many, but not all, items may be annotated.
An item may have primary and secondary annotations.
A primary annotation is an annotation that was attached
directly to that item. A secondary annotation is an annotation
that was attached to another item, which is somehow related
to the current item.
Secondary annotations may be picked, one by one, from
related items, or as a set of all annotations. If the
whole set is picked, new annotations will propagate
to the related items.
[CLIENT] Picking annotations from related items
may also be done by copying the related values, and attach them as
primary annotations to the current item.
Annotation types contain information about possible values;
either primitive types (int, float, string, etc.) with
optional limits, or complex types like ontonlogy terms.
An annotation type applies to one or more item types (e.g. sample
or hybridization).
Each item may only have one annotation of each annotation type,
but, as mentioned above, an annotation may have more than one
value.
Users can define annotation types.
[QUESTION] Can annotation types be made
mandatory, and if so for what subset of items? Per project, maybe?
It should be possible to flag annotations as
required for MIAME compliance.
BASE should be able to import values from standard ontologies
like GO and MAGE.
Those values are used to create annotation types.
While annotating items, the actual value is be copied, but a reference
to the original value should also be maintained. This will
make searching less complicated, but also make it possible
for a client application to generate warnings or make automatic
modifications after an update.
The core will never automatically update the annotation values
if the ontologies are updated.