Updating from earlier versions¶
From v1.*
¶
Update from v1.*
to v2.*
should be straightforward; the only reason the
major version was updated was because the cache
argument was removed from
the Ontology
constructor.
From v0.*
¶
Render to OBO¶
Exporting an ontology to the OBO (or other supported formats) is now done with
the dump
and dumps
methods:
# before
print(ontology.obo)
open("out.obo", "w").write(ontology.obo)
# after
print(ontology.dumps(format="obo"))
ontoloy.dump(open("out.obo", "w"), format="obo")
Subclasses and superclasses¶
pronto
is not opinionated about the direction of a relationship. Subclassing
relationships are now handled as a special case, following the semantics of the
rdfs:subClassOf
property in the RDF schema.
Therefore, the code to access subclasses and superclasses of a Term
has been updated:
# before
children: pronto.TermList = term.rchildren()
parents: pronto.TermList = term.rparents()
# after
children_iter: Iterable[Term] = term.subclasses()
parents_iter: Iterable[Term] = term.superclasses()
Because we follow the RDF semantics, any class is also its own subclass and
superclass; therefore, both of these iterators will yield the term itself as the
first member of the iteration. This behaviour can be annoying, so you can disable it
by giving with_self=False
as an argument to only get true subclasses or
superclasses:
children_iter: Iterable[Term] = term.subclasses(with_self=False)
parents_iter: Iterable[Term] = term.superclasses(with_self=False)
To only get the direct subclasses or superclasses (i.e., what Term.children
and Term.parents
used to do), pass distance=1
as an argument as well:
children: Iterable[Term] = term.subclasses(with_self=False, distance=1)
parents: Iterable[Term] = term.superclasses(with_self=False, distance=1)
Since querying of subclasses and superclasses now gives you an iterator, but your
previous code was expecting a TermList
, you can use the to_set
method to obtain a TermSet
which hopefully will prevent the rest of
your code to require more update.
# you can use `to_set` to get a `TermSet` from the iterator
children: pronto.TermSet = term.subclasses().to_set()
parents: pronto.TermSet = term.superclasses().to_set()