-
Notifications
You must be signed in to change notification settings - Fork 39
Description
PR #3374 introduced the two following disjoint_from tags:
[Term]
id: UBERON:0000001
disjoint_from: GO:0005623 ! cell
disjoint_from: GO:0110165 ! cellular anatomical entity
Nothing wrong with that addition per se, except that, whenever the edit file is written back by any OWLAPI-based application (e.g. Protégé or ROBOT), those tags will become:
[Term]
id: GO:0005623
disjoint_from: UBERON:0000001
[Term]
id: GO:0110165
disjoint_from: UBERON:0000001
Semantically, from a OWL point of view, this does not change anything: both forms represent the following disjointness axioms:
DisjointClasses(GO:0005623 UBERON:0000001)
DisjointClasses(GO:0110165 UBERON:0000001)
because the order of the operands of a DisjointClasses axiom is not significant. And since it is not significant, there is no way for the OBO serializer to know that it should attach the corresponding tags to the UBERON:0000001 term frame, rather than creating new term frames for GO:0005623 and GO:0110165 – when it has to translate DisjointClasses(GO:0005623 UBERON:0000001) into OBO, the OBO serializer simply adds the tag to the frame for the operand that comes first in lexicographical order (so in this case, GO:0005623 rather than UBERON:0000001, since G < U).
But from a OBO point of view, the two forms are not equivalent, because in the second form we now have two new term frames that do not have a label. And missing labels is an error.
Possible solutions:
(A) Finally admit that the OBO format is not worth the trouble, and switch the edit file to OWL Functional Syntax. I am mentioning that for completeness, I know there is no hope of that happening in my lifetime.
(B) Move the disjointness axioms to an separate component in OWL Functional Syntax.
(C) Add labels to the disjoint GO terms.
Since (A) will never happen, the second best solution is (B) in my opinion.