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:
object
An 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:
object
A 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’sdef
keyword.-
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.OBOObject
A ‘Term’ object in the ontology.
-
class
orangecontrib.bio.ontology.
Typedef
(*args, **kwargs)¶ Bases:
orangecontrib.bio.ontology.OBOObject
A ‘Typedef’ object in the ontology.
-
class
orangecontrib.bio.ontology.
Instance
(*args, **kwargs)¶ Bases:
orangecontrib.bio.ontology.OBOObject
An ‘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.
-