uberon
uberon copied to clipboard
Infer all missing part-of relations using rules or the GCI-materialize approach
Example of a problem:

There should be a part-of between cingulum-of-molar and crown-of-molar (because a cingulum is part of a crown)
The existing part-of (which comes from relaxation) is correct but not specific enough.
@balhoff @dosumis @matentzn we have discussed strategies in the past for inferring part-of, going back to inferring the many part-ofs in GO BP (e.g. development of nose part-of development of head).
The strategy we have previously arrived on (but AFAIK not codified in a central place is)
- Add GCIs to DPs
- Use materialize in the release process
Note that materialize is necessary, and Protege will not directly show the entailments in a hierarchical view
I think the only ontology to have implemented this was OBA and TO, and the pipeline for the former may have changed.
UPDATE: currently trying this for GO
IMO this is quite a complex pattern to get your head around, involves coordinating a number of different pieces. It may work for ontologies like GO and OBA where we typically have simple edge inferences.
In uberon we want to recapitulate parallel structures in their entirety; the pieces should join-up via continuous-with, deep-to, proximal-to, drains, etc.
Previously in uberon I used prolog rules to infer these linkages, we could look at a datalog over dosdps approach
A single rule should cover all intra-pattern cases:
R(c,d) :-
R(c_generic, d_generic),
P(c, c_generic, x...),
P(d, d_generic, x...),
propagates_over(R, P)
R is a TBox relationship, P is a pattern instance P(defined_class, genus, additional_args....)
the intuition here is that we are "cloning" a generic pair of classes that stand in some relationship like part-of. E.g. cingulum to crown
if the cloned pair has the same differentia then the original relation can be "copied"
propagates_over would be curated tuples - e.g. part-of would propagate over patterns that use part of or laterality as differentia
(note this also works for R=is_a, but we already have owl reasoning to do this)
we can see how this works by grounding 2nd order predicates for propagates_over(deep_to, intestinal_layer)
deep_to(c,d) :-
deep_to(c_generic, d_generic),
intestinal_layer(c, c_generic, subdivision),
intestinal_layer(d, d_generic, subdivision)
and an example grounding
deep_to(submucosa_of_stomach, submucosa_of_stomach) :-
deep_to(submucoa, mucosa),
intestinal_layer(submucosa_of_stomach, submucoa, stomach),
intestinal_layer(submucosa_of_stomach, mucoa, stomach)
in this was we can capture all superficial-deep relationships for all proximal-distal subdivisions.
we can also write custom rules for inter-pattern, but the above works as a generic rule
Parallel issues:
- https://github.com/geneontology/go-ontology/issues/12658
- https://github.com/obophenotype/bio-attribute-ontology/issues/8