Looking for obsolete terms without replacementsΒΆ
In this example, we use fastobo
to create a small validation script which will retrieve obsolete terms without replacement.
[1]:
import fastobo
import requests
fastobo.load
takes a file-handle, which can be accessed using the raw
property of the Response
object returned by requests.get
:
[2]:
res = requests.get("http://purl.obolibrary.org/obo/go.obo", stream=True)
doc = fastobo.load(res.raw)
Note that we are using isinstance
a lot compared to what you may be used to in other Python library: this is because fastobo
is based on a Rust library which is strongly-typed, so that is reflected in the Python library that wraps it. We could use the strong typing to write the same snippet using type-specific callback wrapped in a dict
:
[3]:
for frame in doc:
if isinstance(frame, fastobo.term.TermFrame):
obsolete = False
replacements = []
for clause in frame:
if clause.raw_tag == "is_obsolete":
obsolete |= clause.obsolete
elif clause.raw_tag in ("consider", "replaced_by"):
replacements.append(clause.term)
if obsolete and not replacements:
print(frame.id, "is obsolete but has no replacement.")
Note that we could use the same kind of logic to retrieve terms with more than one replacement, which can be the case when an obsolete term does not have a strictly equivalent substitute in the newer versions of an ontology