-
Notifications
You must be signed in to change notification settings - Fork 79
Description
Carried on from #263
Given:
ontology: test
subsetdef: foo "foo"
[Term]
id: X:1
subset: foo
[Term]
id: X:2
relationship: part_of X:1
[Term]
id: X:3
relationship: part_of X:2
[Term]
id: X:4
relationship: part_of X:3
[Term]
id: X:5
is_a: X:4
subset: foo
[Typedef]
id: part_of
is_transitive: true
xref: BFO:0000050
Currently we have:
$ robot filter -i robot-core/src/test/resources/subset_test.obo --select annotations --prefix "subset: http://purl.obolibrary.org/obo/test#" --select "oboInOwl:inSubset=subset:foo" -o z.obo && cat z.obo
format-version: 1.2
ontology: test
[Term]
id: X:1
subset: foo
[Term]
id: X:5
subset: foo
We would like to see a part_of between X:5 and X:1.
This is pretty fundamental for all subset use cases involving GO, any anatomy ontology, CL, ENVO, any ontology that has part-of.
There are two ways this could be implemented. One is an ad-hoc graph walking procedure with rules for edge label composition (this is how the equivalent command in owltools worked).
The other is to use materialize. A special purpose case of this code could be written than will be more efficient for this use case, where for every selected class C we test for all inferred subclasses R some C for all structure preserving relations R.
To preserve backwards compatibility we should have the user specify the list of OPs they want to include. However, this is such a common use case it would be nice to have a command subset as originally specified in #263 that is a shorthand for filter --preserve-structure true --use-all-relations true --select annotations -select "oboInOwl:inSubset=subset:$SUBSET"