Part 8: Applying Changes to Ontologies
Warning
Apply changes is an experimental feature. This documentation is provided for alpha testers to try out existing functionality. Currently only a fraction of the KGCL specification is implemented.
OAK allows various kinds of changes to be applied to ontologies, including:
Changing Names of concepts
Adding or removing edges
Obsoleting concepts
…
Like most aspects of OAK, all changes in OAK conform to a Datamodel. The datamodel used by OAK is KGCL.
About KGCL
KGCL is a datamodel for describing changes to ontologies at a high level.
The KGCL datamodel can be expressed in different forms:
Natively, as YAML or JSON documents
As RDF
As Python Objects
Using a Domain Specific Language (DSL) optimised for easy reading and writing
OAK uses KGCL objects to communicate desired changes to an ontology. This is an example of the Command Pattern.
For example, rather than simply calling a method obsolete_class(term: CURIE)
, we instead:
Create a ClassObsoletion object
Pass that object to an implementation of the PatcherInterface
While this involves an additional step, this pattern offers a number of advantages
proposed changes can be created in queue and deployed at the appropriate time in the future
a single extensible interface can be used, and new operations can be created without changing the interface
Command Line
A subset of commands mutate the ontology specified via the --input
option. This includes
set-obsolete
migrate-curies
…
With a mutation command, there are a number of different options for how changes are persisted:
write in place, using the general option
--autosave
saving to a new resource using the general option
--save-to
exporting to a different kind of resource or format using a command-specific
--output
The behavior of these options may vary depending on the input, and some may be inapplicable.
For example, if the input is an external triplestore such as Ontobee or Ubergraph, or an external read-only API like BioPortal or OLS then saving in place is not allowed.
Example: Sqlite3
We assume here that we have a local sqlite3 file called go-edit.db
and we want to obsolete
a concept “nucleus”.
To do this in place:
runoak --autosave -i sqlite:go-edit.db set-obsolete nucleus
This will apply the obsoletion changes directly and update the input file
To instead save to a different sqlite file:
runoak --save-to sqlite:go-edit-out.db -i sqlite:go-edit.db set-obsolete nucleus
Note that exports are not currently implemented for sqlite
Example: OBO Files
To make edits and export to a new file:
runoak -i go-edit.obo set-obsolete nucleus -o go-edit-out.obo -O obo
This will apply the obsoletion changes in memory and then save results to a separate obo file.