Format of the Annotation Package
How should the annotation package be integrated into SBML LV3 core annotation style and the "free" annotation style with arbitrary RDF? Several tools already make use of the core's ability to have any type of RDF within the annotation tags. The core also allows for some limited "controlled" annotation to be added to the annotation. Where does the annotation package fit between these two alternatives?
We are not able to directly make changes to the SBML core. Numerous restrictions are placed on the <annotation> element in the core. There can be only one top-level element from a particular namespace, so there cannot be two rdf:RDF top-level elements, for example.
Distinction between free and controlled annotations
Inside the <annotation> element, The annotation package can create a tag in the "free" annotation style that has RDF within the tag enclosure.
<annotation> ... <annot:someElementName> <rdf:RDF> ... </rdf:RDF> </annot:someElementName> <rdf:RDF> ... </rdf:RDF> ... </annotation>
The tag <rdf:RDF> is almost unchanged to allow for "old-style", core (i.e. non-annotation-package) annotation. The only change to be made when upgrading to L3 for core annotation will be the removal of the ordering requirement for the placement of core annotation.
SARAH: Note we can only propose that the L3 core ordering of annotation be removed. It may or may not be considered by the community as a necessary 'fix'.
The other namespaces (for free annotation) will remain unchanged in the core.
New annotation from the new package will be signified by some element (whose name is yet-to-be determined) such as <annot:someElementName>. is defined in the core SBML. This will replace what is currently described in chapter 6 of the spec.
Duplicating semantic information (in both original, core annotation and the annotation package) is technically possible, but it is bad practice.
Create a new tag outside of the <annotation> element that is a sibling to the <annotation tag>
<annotation> </annotation> <annot:someElementName> <rdf:RDF> ... </rdf:RDF> </annot:someElementName>
The annotation is all included within the one rdf block, with different namespaces for the package versus the core:
<annotation> <rdf:RDF xmlns:rdf="someuri" xmlns:annot="our.annot.package"> <rdf:Description> <annot:aHolderForAllOurStuff> ... </annot:aHolderForAllOurStuff> <rdf:Description> ... [ "old" core package annotation ] <rdf:Description> </rdf:Description> </rdf> </annotation>
We could also use rdf:type as follows:
<rdf:RDF> <rdf:type rdf:resource="newannot.packagename"/> </rdf:RDF>