ontology-development-kit
ontology-development-kit copied to clipboard
Revise stripping of annotation properties in imports
The ODK 1.5 forcefully introduced a new feature in which almost all annotation properties, except rdfs:label
and IAO:0000115
, are forcibly removed from the import modules.
I say “forcefully” because, unless I missed something, that feature is not deactivatable. The only thing a user can do is amend the list of annotation properties that are not removed, to preserve more properties than just rdfs:label
and IAO:0000115
.
This was intended to reduce the size of the import modules, and based on the premise that annotation properties are never “significant” (especially from a reasoner’s point of view) anyway.
However that premise is blatantly false, as annotation properties loaded with a “logical meaning“ are certainly not unheard of. (One can argue about whether this is a good idea or not, but that’d be beside the point.)
In particular, it is a relatively common practice to use annotation properties as “shortcuts” to be replaced by more complex logical axioms. That idea has been around for example with OWLTools’ macros for more than a decade (Mungall, Ruttenberg, and Osumi-Sutherland, 2010), and while the use of OWLTools is being phased out, ROBOT’s expand command merely continues on the same principle, the only difference with OWLTools being the language used to express the expanded form of the “macro” (OWL Manchester for owltools --expand-macros
, SPARQL for robot expand
).
Examples of annotation properties with a “logical meaning” include:
All that to say that removing almost all annotation properties from imports is not something that should be done lightly because it can definitely have drastic consequences for the ontologies that use the ODK to manage their imports. As an example, the entire check for violation of taxon constraints in Uberon has been completely neutralised by this “feature” (https://github.com/obophenotype/uberon/pull/3336).
So what should the ODK do now?
A. Nothing. It’s up to the users to know that they depend on some specific annotations in the ontologies that they import, and to declare said annotations in the import_group.annotation_properties
option of their ODK configuration file so that they are not removed.
Why not, but then this needs to be thoroughly documented somewhere. As far as I know, the only “documentation” for now is this line in the description of the ODK Project Configuration Schema:
annotation_properties (list)(: Define which annotation properties to pull in. Default: [
rdfs:label
,IAO:0000115
]
I believe this is woefully insufficient. At no point do we actually explain that the ODK does not “pull” all annotation properties from imports, only those that are listed here. Combined with the fact that the feature was introduced without any announcement in the release notes, users have had no chance at all to know that from now on they should declare the annotation properties they need.
B. Revert the feature entirely.
That’d probably be too much. There is no doubt the feature is useful.
C. Leave the feature as it is, but make it optional.
Simply add an option to enable it (if disabled by default) or disable it (if enabled by default).
D. Leave the feature as it is, but preserve more annotation properties by default than just rdfs:label
and IAO:0000115
.
At the very least, we should preserve:
-
expand assertion to (used by OWLTools’
--expand-macros
command); - expand expression to (likewise);
-
defined by construct (used by ROBOT’s
expand
command); - all annotation properties under RO’s logical macro assertion.
Also, I believe that preserving a given annotation property should automatically preserve all its subproperties. That is, users should not have to declare that they want to preserve both present in taxon and always present in taxon – just declaring the former should automatically preserve the latter.