Skip to content
An OBO file parser.
Find file
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
lib deprecates hashify for arrayify_pairs, adds a set comparison method
tasks initial import
test yardoc documentation, examples in utilities.rb should now work
.document Initial commit to obo_parser.
.gitignore yardoc documentation, examples in utilities.rb should now work
LICENSE major refactoring of the underlying data model
Rakefile initial import
VERSION Version bump to 0.3.7
init.rb initial import
install.rb initial import
obo_parser.gemspec Regenerate gemspec for version 0.3.7
uninstall.rb initial import



A simple Ruby gem for parsing OBO 1.2 (?4) formatted ontology files. Useful for reporting, comparing, and mapping data to other databases. There is presently no functionality for logical inference across the ontology.


gem install obo_parser



require 'rubygems'
require 'obo_parser'
foo = parse_obo_file('my_ontology.obo'))  # => An OboParser instance  
first_term = foo.terms.first                        # => An OboParser#Term instance                                 # => 'HAO:1234'

d = first_term.def                                  # => An OboParser#Tag instance
d.tag                                               # => 'def'
d.value                                             # => 'Some defintition'
d.xrefs                                             # => ['xref:123', 'xref:456'] 
d.comment                                           # => 'Some comment'

t =                                 # => An OboParser#Tag instance    
t.tag                                               # => 'name'
t.value                                             # => 'Some Term name' 

o = first_term.other_tags                           # => [OboParser#Tag, ... ] An array of tags that are not specially referenced in an OboParser::Stanza
o.first                                             # => An OboParser#Tag instance    

first_typedef = foo.typdefs.first                   # => An OboParser#Typdef instance                               # => 'Some typedef id'                             # => 'Some typedef name'

foo.terms.first.tags_named('synonym')               # => [OboParser#Tag, ... ]
foo.terms.first.tags_named('synonym').first.tag     # => 'synonym'
foo.terms.first.tags_named('synonym').first.value   # => 'Some label'

foo.terms.first.relationships                       # => [['relationship', 'FOO:123'], ['other_relationship', 'FOO:456'] ...] An array of [relation, related term id], includes 'is_a', 'disjoint_from' and Typedefs

Convenience methods

foo.term_hash                                       # => { term (String) => id (String), ... for each [Term] in the file. } !! Assumes names terms are unique, they might not be, in which case you get key collisions. 
foo.id_hash                                         # => { id (String) => term (String), ... for each [Term] in the file. }

See also /test/test_obo_parser.rb


A small set of methods (e.g. comparing OBO ontologies) utilizing the gem are included in /lib/utilities.rb. For example: 1) shared labels across sets of ontologies can be found and returned, 2) ontologies can be dumped into a simple Cytoscape node/edge format; 3) given a set of correspondances between two ontologies various reports can be made.


Code documentation is slowly being formalized using Yard.


Copyright © 2010 Matt Yoder. See LICENSE for details.

Something went wrong with that request. Please try again.