NAME

GOBO::ClassExpression

SYNOPSIS

my $xp = GOBO::ClassExpression->parse_idexpr('GO:0005737^part_of(CL:0000023)');

DESCRIPTION

A class expression is an GOBO::ClassNode whose members are identified by a boolean or relational expression. For example, the class 'nuclei of cardiac cells' is expressed as the intersection (an GOBO::ClassExpression::Intersection) between the set 'nucleus' (an GOBO::TermNode) and the set of all things that stand in the part_of relation to 'class node' (a GOBO::ClassExpression::RelationalExpression).

Simple ontologies do not include class expressions. They can often be ignored for many purposes.

An GOBO::TermNode can be formally and logically defined by stating equivalence to a GOBO::ClassExpression

[Term]
id: GO:new
name: oocyte cytoplasm
intersection_of: GO:0005737 ! cytoplasm
intersection_of: part_of CL:0000023 ! oocyte 

This can also be thought of as necessary and sufficient conditions for membership of a class.

On parsing the above using GOBO::Parsers::OBOParer, the following should hold

$t->label eq 'oocyte cytoplasm';
$t->logical_definition->isa('GOBO::ClassExpression');

Example files

The xp version of SO includes intersection-based class expressions. See http://sequenceontology.org

The extended version of GO will soon include these for regulation terms. See also

http://wiki.geneontology.org/index.php/Category:Cross_Products

Mapping to OWL

The notion of ClassExpression here is largely borrowed from OWL and Description Logics. See

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

Note that not everything in OWL is expressable in OBO format or the GOBO model.

Conversely, this model and OBO format can express things not in OWL, such as relation expressions involving intersection and union.

Mapping to the GO Database schema

Currently the GO database is not able to store the full range of class expressions. It can only store logical definitions to GOBO::ClassExpression::Intersection objects. See the POD docs for this class for details.

Mapping to the Chado schema

Currently the GO database is not able to store the full range of class expressions. It can only store logical definitions to GOBO::ClassExpression::Intersection objects. See the POD docs for this class for details.

ID Expressions

A class expression can be expressed as an ID expression. See:

http://www.geneontology.org/GO.format.obo-1_3.shtml#S.1.6

For example: GO:0005737^part_of(CL:0000023)

The set of all cytoplasm (GO:0005737) instances that are part_of some oocyte (CL:0000023)

parse_idexpr

Generates a GOBO::ClassExpression based on an ID expression string

Usage - $xp = GOBO::ClassExpression->parse_idexpr('GO:0005737^part_of(CL:0000023)');

The grammar for ID expressions is:

GOBO::ClassExpression = GOBO::BooleanExpression | GOBO::RelationalExpression | GOBO::TermNode
GOBO::BooleanExpression = GOBO::Intersection | GOBO::Union
GOBO::Intersection = GOBO::ClassExpression '^' GOBO::ClassExpression
GOBO::Union = GOBO::ClassExpression '|' GOBO::ClassExpression
GOBO::RelationalExpression = GOBO::RelationNode '(' GOBO::ClassExpression ')'

normalize

A or (B or C) ==> A or B or C A and (B and C) ==> A and B and C