obophenotype / uberon

An ontology of gross anatomy covering metazoa. Works in concert with https://github.com/obophenotype/cell-ontology
http://obophenotype.github.io/uberon/
Other
131 stars 29 forks source link

Infer all missing part-of relations using rules or the GCI-materialize approach #2699

Open cmungall opened 1 year ago

cmungall commented 1 year ago

Example of a problem:

image

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)

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:

dosumis commented 1 year ago

I prefer the GCI approach where possible as it is transparent to explanations and can be OWL reasoner driven. However, I'm finding it hard to see how to make this work here compared to the GO example, where it is easy to see how to achieve without any increase in pattern vars. @cmungall Can you sketch how this could work?

github-actions[bot] commented 9 months ago

This issue has not seen any activity in the past 6 months; it will be closed automatically one year from now if no action is taken.