Phenotype Ontology Library: Phenol

Phenol is a modern Java (version 8 and above) library for working with phenotype and other attribute ontologies (including Gene Ontology). Phenol provides full support for working with the Human Phenotype Ontology and HPO-based disease annotations.

Quick Example

The following snippet will load the hp.obo file (which can be downloaded from the HPO website) into an Ontology object. The HPO has multiple subontologies, and the following code extracts all of the terms of the Phenotypic Abnormality subontology.

String hpoOboFilePath=...; // initialize to path of hp.obo file
Ontology ontology =  OntologyLoader.loadOntology(new File(hpoOboFilePath));
final TermId PHENOTYPIC_ABNORMALITY = TermId.of("HP:0000118");
for (TermId tid : getDescendents(ontology, PHENOTYPIC_ABNORMALITY)) {
  Term hpoTerm = ontology.getTermMap().get(tid);
  // ... do something with the Term


Phenolib was forked from Ontolib in April 2018, and since has been extensively refactored and extended to provide additional functionality for working with phenotype annotations. Several classes from the Ontologizer, which we initially programmed in Java 1.5, have been refactored to support Gene Ontology overrepresentation analysis (see Bauer et al., 2008).


The best place to leave feedback, ask questions, and report bugs is the Phenol Issue Tracker.