
GOBO::Doc::FAQ - Frequently Asked Questions

A perl library for dealing with ontologies and annotations, geared towards the Gene Ontology (GO) and OBO ontologies.
It is a rewrite of go-perl using the perl MOOSE framework
It is currently in the early stages of development

go-perl (::GO::Parser) and go-db-perl (GO::AppHandle) are the predecessors of GOBO. They are nearly 10 years old and due for an overhaul.
GOBO will gradually replace these projects
There is currently an experimental overhaul of bioperl called Bio::Moose. GOBO is intended to slot in to this project, as a replacement for Bio::Ontology


The plan is to use DBIx::Class to connect to a variety of databases.
This will use the Chado DBIx layer when it becomes standardized

The inference engine will take as input a graph (typically consisting of asserted statements) and compute inferred statements.
A statement that has been explicitly asserted by an ontology editor
A statement that follows logically from other statement (based on logical axioms in the ontology), and that has been computed by a reasoner/inference engine
* L<GOBO::Node> ** L<GOBO::ClassNode> *** L<GOBO::TermNode> *** L<GOBO::ClassExpression> **** L<GOBO::ClassExpression::Intersection> **** L<GOBO::ClassExpression::Union> **** L<GOBO::ClassExpression::RelationalExpression> ** L<GOBO::RelationNode> ** L<GOBO::InstanceNode>
If we have an ontology that contains the logical definition:
blue_car = car AND <has_color blue>
the LHS is a GOBO::Term, the RHS is a GOBO::ClassExpression (specifically, a GOBO::ClassExpression::Intersection)
This would be represented in OBO as
id: blue_car intersection_of: car intersection_of: has_color blue
The logical definition can be extracted as follows:
$class_expr = $my_class->logical_definition;
(See GOBO::Definable)
This is equivalent to 2 intersection statements
blue_car is_a car
blue_car has_color blue
Sometimes you want to treat your ontology as a graph rather than as a collection of logical axioms relation named entities and expressions. It's much simpler, and makes sense, e.g. for visualization of so-xp.
GOBO allows both.
* Each intersection_of tag is treated as a GOBO::LinkStatement, with the specified relationship (is_a for genus), with the is_intersection boolean set
* There are methods in the graph object to collapse these links into ClassExpressions (and to go back) using the semantics:
$term->logical_definition($ce)
iff
$ce = Intersection([@args])
where
@args = grep { $_->is_intersection } @{$graph->get_outgoing_links($term)}
(that's an approximation, we need to use the class itself for is_a and a RelationalExpression for the differentia)
See
GOBO:::Graph#convert_intersection_links_to_logical_definitions

Current applications in production:
Planned future applications

* L<GOBO> * L<GOBO::Graph>