Skip to content
Seth Carbon edited this page May 10, 2017 · 2 revisions

Overview

This is a description of the “transitivity” graphs used in GOlr. This document assumes that you are familiar with the JSON used in BBOP JS for graphs in general.

Answering a Question

By convention, there are one or more transitivity graphs associated with documents types that are concerned with answering graph/ontology questions.

The specific use of a ?_transitivity_graph_json field is to:

  • given a reference/topic node
  • and a set of relations (plus is_a)
  • what are the all nodes to the root(s) reachable traversing these relations
  • what are all nodes for immediate children reachable traversing these relations
  • there are no other nodes
  • all edges in the graph represent the computed relationship between the reference/topic node and all other nodes
    • there are no edges between any nodes that do not directly involve the reference/topic node

The purpose is to give consuming widgets a way of knowing the relationships between a node and its local area without having to perform reasoning on the client side.

An Example

Given the above, let’s look at a transitivity graph for GO:004347. The one we’re going to look at is the “regulates” graph defined with the following relations:

  • BFO:0000050
  • BFO:0000066
  • RO:0002211
  • RO:0002212
  • RO:0002213
  • RO:0002215
  • RO:0002216

So the question is, traversing over only these relationships (and is_a), what is the relationship of GO:0043474 to each reachable node. Thus, the regulates_transitivity_graph_json field would be:

{
    "edges": [
        {
            "pred": "is_a",
            "obj": "GO:0044699",
            "sub": "GO:0043474"
        },
        {
            "pred": "is_a",
            "obj": "GO:0044710",
            "sub": "GO:0043474"
        },
        {
            "pred": "part_of",
            "obj": "GO:0043473",
            "sub": "GO:0043474"
        },
        {
            "pred": "is_a",
            "obj": "GO:0043473",
            "sub": "GO:0043474"
        },
        {
            "pred": "is_a",
            "obj": "GO:0008150",
            "sub": "GO:0043474"
        },
        {
            "pred": "is_a",
            "obj": "GO:0042440",
            "sub": "GO:0043474"
        },
        {
            "pred": "part_of",
            "obj": "GO:0044699",
            "sub": "GO:0043474"
        },
        {
            "pred": "part_of",
            "obj": "GO:0008150",
            "sub": "GO:0043474"
        },
        {
            "pred": "is_a",
            "obj": "GO:0008152",
            "sub": "GO:0043474"
        }
    ],
    "nodes": [
        {
            "lbl": "pigment metabolic process",
            "id": "GO:0042440"
        },
        {
            "lbl": "single-organism metabolic process",
            "id": "GO:0044710"
        },
        {
            "lbl": "single-organism process",
            "id": "GO:0044699"
        },
        {
            "lbl": "pigment metabolic process involved in pigmentation",
            "id": "GO:0043474"
        },
        {
            "lbl": "pigmentation",
            "id": "GO:0043473"
        },
        {
            "lbl": "metabolic process",
            "id": "GO:0008152"
        },
        {
            "lbl": "biological_process",
            "id": "GO:0008150"
        }
    ]
}

Troubleshooting, Caveats, and Fail Modes

There is currently one large hole in this as far as the practical implementation of getting closures in the Gene Ontology code base: irreducible relationship chains (re: expression materializing reasoner). In some cases, the produced transitivity graph may have nodes for which there are no edges. While this may seem nuts on the face of it, it’s because the (current) reasoning could not come up with something acceptably simple.

To deal with this, the bbop-js (and amigo) code is setup to regard a no-edge state in a transitivity graph as a “ghost” edge–the graph did not return it, but we know it’s there and we’re going to display something anyways.

Clone this wiki locally