Package: pronto
prontoA Python frontend to ontologies.🚩 Table of ContentsOverviewSupported LanguagesInstallingExamplesAPI ReferenceLicense🗺️ OverviewPronto is a Python library to parse, browse, create, and export
ontologies, supporting several ontology languages and formats. It
implement the specifications of theOpen Biomedical Ontologies 1.4in the form of an safe high-level interface.If you're only interested in
parsing OBO or OBO Graphs document, you may wish to considerfastoboinstead.🏳️ Supported LanguagesOpen Biomedical Ontologies 1.4.Because this format is fairly new, not all OBO ontologies can be parsed at the
moment. See theOBO Foundry roadmaplisting the compliant ontologies, and don't hesitate to contact their developers
to push adoption forward.OBO GraphsinJSONformat.The format is not yet stabilized to the results may change from file
to file.Ontology Web Language 2inRDF/XML format.OWL2 ontologies are reverse translated to OBO using the mapping defined in theOBO 1.4 Semantics.🔧 InstallingInstalling withpipis the easiest:#pipinstallpronto# if you have the admin rights$pipinstallpronto--user# install it in a user-site directoryThere is also acondarecipe in thebiocondachannel:$condainstall-cbiocondaprontoFinally, a development version can be installed from GitHub
usingsetuptools, provided you have the right dependencies
installed already:$gitclonehttps://github.com/althonos/pronto$cdpronto#pythonsetup.pyinstall💡 ExamplesIf you're only reading ontologies, you'll only use theOntologyclass, which is the main entry point.>>>fromprontoimportOntologyIt can be instantiated from a path to an ontology in one of the supported
formats, even if the file is compressed:>>>go=Ontology("tests/data/go.obo.gz")Loading a file from a persistent URL is also supported, although you may also
want to use theOntology.from_obo_librarymethod if you're using persistent
URLs a lot:>>>cl=Ontology("http://purl.obolibrary.org/obo/cl.obo")>>>stato=Ontology.from_obo_library("stato.owl")🏷️ Get a term by accessionOntologyobjects can be used as mappings to access any entity
they contain from their identifier in compact form:>>>cl['CL:0002116']Term('CL:0002116',name='B220-low CD38-positive unswitched memory B cell')Note that when loading an OWL ontology, URIs will be compacted to CURIEs
whenever possible:>>>aeo=Ontology.from_obo_library("aeo.owl")>>>aeo["AEO:0000078"]Term('AEO:0000078',name='lumen of tube')🖊️ Create a new term from scratchWe can load an ontology, and edit it locally. Here, we add a new protein class
to the Protein Ontology.>>>pr=Ontology.from_obo_library("pr.obo")>>>brh=ms.create_term("PR:XXXXXXXX")>>>brh.name="Bacteriorhodopsin">>>brh.superclasses().add(pr["PR:000001094"])# is a rhodopsin-like G-protein>>>brh.disjoint_from.add(pr["PR:000036194"])# disjoint from eukaryotic proteins✏️ Convert an OWL ontology to OBO formatTheOntology.dumpmethod can be used to serialize an ontology to any of the
supported formats (currently OBO and OBO JSON):>>>edam=Ontology("http://edamontology.org/EDAM.owl")>>>withopen("edam.obo","wb")asf:...edam.dump(f,format="obo")🌿 Find ontology terms without subclassesThetermsmethod ofOntologyinstances can be used to
iterate over all the terms in the ontology (including the
ones that are imported). We can then use theis_leafmethod ofTermobjects to check is the term is a leaf in the
class inclusion graph.>>>ms=Ontology("ms.obo")>>>forterminms.terms():...ifterm.is_leaf():...print(term.id)MS:0000000MS:1000001...🤫 Silence warningsprontois explicit about the parts of the code that are doing
non-standard assumptions, or missing capabilities to handle certain
constructs. It does so by raising warnings with thewarningsmodule,
which can get quite verbose.If you are fine with the inconsistencies, you can manually disable
warning reports in your consumer code with thefilterwarningsfunction:importwarningsimportprontowarnings.filterwarnings("ignore",category=pronto.warnings.ProntoWarning)📖 API ReferenceA complete API reference can be found in theonline documentation, or
directly from the command line usingpydoc:$pydocpronto.Ontology📜 LicenseThis library is provided under the open-sourceMIT license.
Please cite this library if you are using it in a scientific
context using the following DOI:10.5281/zenodo.595572