obophenotype / obophenotype/uberon

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

Open
#2,699 2 comments 0 reactions 1 assignee View on GitHub

@dosumis is already working on this.

Since Nov 8, 2022.

Stale
Dominant language
Emacs Lisp
Stars
163
Forks
43
Avg merge
1d 17h
Merged PRs (30d)
5

Description

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)

  • 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:

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.