OBO Ontology (ontology)¶
This module provides an interface for parsing, creating and manipulating of OBO ontologies.
Construct an ontology from scratch with custom terms
>>> term = OBOObject("Term", id="foo:bar", name="Foo bar")
>>> print(term)
[Term]
id: foo:bar
name: Foo bar
>>> ontology = OBOOntology()
>>> ontology.add_object(term)
>>> ontology.add_header_tag("created-by", "ales") # add a header tag
>>> from six import StringIO
>>> buffer = StringIO()
>>> ontology.write(buffer) # Save the ontology to a file like object
>>> print(buffer.getvalue()) # Print the contents of the buffer
created-by: ales
[Term]
id: foo:bar
name: Foo bar
To load an ontology from a file, pass the file or filename to the
OBOOntology constructor or call its load method
>>> _ = buffer.seek(0) # rewind
>>> ontology = OBOOntology(buffer)
>>> # Or equivalently
>>> _ = buffer.seek(0) # rewind
>>> ontology = OBOOntology()
>>> ontology.load(buffer)
See the definition of the .obo file format.
-
class
orangecontrib.bio.ontology.OBOOntology(file=None)¶ Bases:
objectAn class representing an OBO ontology.
Parameters: file (file-like) – A optional file like object describing the ontology in obo format. -
add_header_tag(tag, value)¶ Add header tag, value pair to this ontology.
-
load(file, progress_callback=None)¶ Load terms from a file.
Parameters: - file (file-like) – A file-like like object describing the ontology in obo format.
- progress_callback (function) – An optional function callback to report on the progress.
-
write(stream)¶ Write the contents of the ontology to a file in .obo format.
Parameters: file (file-like) – A file like object.
-
update(other)¶ Update this ontology with the terms from other.
-
term_by_name(name)¶ Return the term with name name.
-
root_terms()¶ Return all root terms (terms without any parents).
Return a list of (rel_type, term_id) tuples where rel_type is relationship type (e.g. ‘is_a’, ‘has_part’, ...) and term_id is the id of the term in the relationship.
-
edge_types()¶ Return a list of all edge types in the ontology.
-
parent_edges(term)¶ Return a list of (rel_type, parent_term) tuples.
-
child_edges(term)¶ Return a list of (rel_type, source_term) tuples.
-
super_terms(term)¶ Return a set of all super terms of term up to the most general one.
-
sub_terms(term)¶ Return a set of all sub terms for term.
-
child_terms(term)¶ Return a set of all child terms for this term.
-
parent_terms(term)¶ Return a set of all parent terms for this term.
-
relations()¶ Return a list of all relations in the ontology.
-
to_network(terms=None)¶ Return an Orange.network.Network instance constructed from this ontology.
-
to_networkx(terms=None)¶ Return a NetworkX graph of this ontology.
-
to_graphviz(terms=None)¶ Return an pygraphviz.AGraph representation of the ontology. If terms is not None it must be a list of terms in the ontology. The graph will in this case contain only the super graph of those terms.
-
-
class
orangecontrib.bio.ontology.OBOObject(stanza_type='Term', **kwargs)¶ Bases:
objectA generic OBO object (e.g. Term, Typedef, Instance, ...). Example:
>>> term = OBOObject(stanza_type="Term", id="FOO:001", name="bar") >>> term = OBOObject( ... stanza_type="Term", ... id="FOO:001", ... name="bar", ... def_="Example definition { modifier=frob } ! Comment" ... ) ...
An alternative way to specify tags in the constructor:
>>> term = OBOObject(stanza_type="Term", id="FOO:001", name="bar", ... def_=("Example definition", ... [("modifier", "frob")], ... "Comment")) ...
Note
Note the use of
def_to define the ‘def’ tag. This is to avoid the name clash with the python’sdefkeyword.-
is_annonymous¶ Is this object anonymous.
-
id¶ The id of this object.
-
name¶ Name of this object
-
add_tag(tag, value, modifiers=None, comment=None)¶ Add tag, value pair to the object with optional modifiers and comment.
Example:
>>> term = OBOObject("Term") >>> term.add_tag("id", "FOO:002", comment="This is an id") >>> print(term) [Term] id: FOO:002 ! This is an id
-
update(other)¶ Update the term with tag value pairs from other (
OBOObject). The tag value pairs are appended to the end except for the id tag.
-
tag_count()¶ Return the number of tags in this object.
Return an list of all (tag, value, modifiers, comment) tuples.
-
format_stanza()¶ Return a string stanza representation of this object.
-
classmethod
parse_stanza(stanza)¶ Parse and return an OBOObject instance from a stanza string.
>>> term = OBOObject.parse_stanza("""\ ... [Term] ... id: FOO:001 ... name: bar ... """) >>> print(term.id, term.name) FOO:001 bar
Return a list of tuple pairs where the first element is relationship (typedef id) and the second object id whom the relationship applies to.
-
-
class
orangecontrib.bio.ontology.Term(*args, **kwargs)¶ Bases:
orangecontrib.bio.ontology.OBOObjectA ‘Term’ object in the ontology.
-
class
orangecontrib.bio.ontology.Typedef(*args, **kwargs)¶ Bases:
orangecontrib.bio.ontology.OBOObjectA ‘Typedef’ object in the ontology.
-
class
orangecontrib.bio.ontology.Instance(*args, **kwargs)¶ Bases:
orangecontrib.bio.ontology.OBOObjectAn ‘Instance’ object in the ontology
-
class
orangecontrib.bio.ontology.OBOParser(file)¶ A simple parser for .obo files (inspired by xml.dom.pulldom)
>>> from six import StringIO >>> file = StringIO("""\ ... header_tag: header_value ... [Term] ... id: FOO:001 { modifier=bar } ! comment ... """) >>> parser = OBOParser(file) >>> for event, value in parser: ... print(event, value) ... HEADER_TAG ['header_tag', 'header_value'] START_STANZA Term TAG_VALUE ('id', 'FOO:001', 'modifier=bar', 'comment') CLOSE_STANZA None
-
parse(progress_callback=None)¶ Parse the file and yield parse events.
-