The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

GOBO::ClassExpression::Intersection

SYNOPSIS

DESCRIPTION

A GOBO::ClassExpression::BooleanExpression in which the set operator is one of intersection.

An Intersection that consists of arguments a1, ..., aN means the set {x : x instance_of(a1), .... x instance_of(aN)}

It is conventional in GO and many OBO ontologies for class intersections to follow the genus-differentia pattern. In this case, exactly one of the arguments is an GOBO::TermNode (the genus), and all the other arguments are of type GOBO::ClassExpression::RelationalExpression

For example, after parsing the following OBO stanza into variable $class:

  [Term]
  id: GO:0043005 ! neuron projection
  intersection_of: GO:0042995 ! cell projection
  intersection_of: part_of CL:0000540 ! neuron

The following boolean expressions are all true

  $class->id eq 'GO:0043005';
  $class->logical_definion->isa('GOBO::ClassExpression::Intersection');
  $class->logical_definion->operator eq 'AND';
  scalar(@{$class->logical_definion->arguments}) == 2;
  grep { $_->id eq 'GO:0042995' } @{$class->logical_definion->arguments};
  grep { $_->isa('GOBO::ClassExpression::RelationalExpression') &&
             $_->relation->id eq 'part_of' &&
             $_->target->id eq 'CL:0000540'
             } @{$class->logical_definion->arguments};

The "" operator is overloaded, so the logical defition is written out as

  GO:0042995^part_of(CL:0000540)

OWL Translation

Same as intersectionOf description expressions in OWL

See: http://www.w3.org/TR/2008/WD-owl2-syntax-20081202/#Intersection_of_Class_Expressions

Mapping to the GO Database schema

Any link in the GO database that has the 'completes' tag set to 1 is an intersection link

http://www.geneontology.org/GO.database.schema.shtml#go-graph.table.term2term

For example, the following term:

  [Term]
  id: GO:0043005 ! neuron projection
  intersection_of: GO:0042995 ! cell projection
  intersection_of: part_of CL:0000540 ! neuron

is stored as 2 links:

    term2=GO:0043005 term1=GO:0042995 relationship_type=is_a completes=1
    term2=GO:0043005 term1=CL:0000540 relationship_type=part_of completes=1

Historical note on the terminology: 'completes' comes from early versions of OWL, in which sets of conditions were marked 'complete' if they formed a set of necessary and sufficient conditions. The oboedit model also uses the tag 'completes'

Mapping to the Chado schema

The current proposed mapping is rather complex as it is based on how OWL class expressions are layered on a simple RDF graph model. This results in a lot of anonymous classes (bNodes in RDF terminology).

A better solution would be to follow the GODB model and introduce either a boolean field for intersection links. Or this could be generalized, as it is done in the OBD schema

Mapping to the OBD schema

This generalizes the GODB schema to allow for other kinds of boolean operators

The combinator flag is used and set to 'I' if the link is an intersection link