This is a major release of the Ontology Development Kit.
Update instructions
- Read the release notes below to know what to expect.
- Pull the latest version of the Docker image:
docker pull obolibrary/odkfull- For each of your ODK-managed repository, go to the
src/ontologydirectory and run:
sh run.sh update_repo
sh run.sh update_repoThe command needs to be run twice in a row to ensure the run.sh script itself is properly updated. Alternatively, you could also pre-emptively copy the script under a new name, and run the renamed script, e.g.:
cp run.sh run-tmp.sh
sh run-tmp.sh update_repoupdate_repo, not make update_repo)!
Release notes
Highlights (Read this!)
- Updating an existing repository (to migrate it to a newer ODK version or to apply changes made in the ODK configuration) is now made with
sh run.sh update_repo(instead ofsh run.sh make update_repo). When migrating to ODK 1.6 for the first time, that command will need to be run twice. - The SPARQL-based checks now cover the entire ontology, including the components (they previously only covered the contents of the
-editfile). This may cause your workflows to break due to invalid contents in the components that previously went undetected. - The test suite now includes a check that the ID policy file (
src/ontology/$(ONT)-idranges.owl) is valid. This may cause your workflows to break if the policy file is syntactically incorrect or contains invalid ranges.
Other less drastic changes that users should still probably pay close attention to are highlighted, in the following sections, with a
New and updated tooling
- Base system updated to Ubuntu 24.04.
- Updated tools:
- Notable updated Python packages:
curies0.10.19kgcl-schema0.6.9kgx2.5.1linkml1.9.2llm0.25oaklib0.6.22pronto2.7.0sssom0.4.16
- New tools:
⚠️ J2cli, a command-line tool to process Jinja2 templates, has been replaced by Jinjanator. If your custom workflows invoke thej2tool, you will need to update them to usejinjanateinstead.- Scala-CLI version 1.8.0. This is intended to replace Ammonite as the Scala interpreter; Ammonite is still included in ODK 1.6, but only in the
odkfullimage – it will be removed completely in a future ODK release. - Dicer-CLI, a new tool to manage the ID policy file (
src/ontology/$(ont)-idranges.owl). - New ODK plugin, providing some extra commands for ROBOT, notably:
odk:subsetto create subsets (replacement forowltools --reasoner-query --make-ontology-from-resultsandowltools --extract-ontology-subset);odk:check-alignto check alignment against an upper-level ontology.
- New yq-mf tool, a YAML, JSON, and XML processor.
- Other changes:
⚠️ OWLTools is now only provided in theodkfullimage.- The sparqlprog tools are still provided, but considered deprecated and will be removed in a future release.
Makefile workflows
- The
$(ont)-idranges.owlfile is now checked for validity as part of the normal test suite #211. - The test suite can now check whether the ontology is “aligned” with another, upper-level ontology (PR #1174).
- In this context, an ontology is said to be “aligned” if all its terms are classified under terms from the upper-level ontology.
- To enable this feature, specify the IRI of the upper ontology to align against with the
upper_ontologyoption in the configuration file. - Note that if enabled, this feature will cause the test suite to fail if the ontology is not aligned.
- The stripping of annotation properties from import modules (forcefully introduced in ODK 1.5) can now be disabled if needed, by setting the
import_group.strip_annotation_propertiesODK option tofalse(PR #1206). ⚠️ OBO artefacts are now “clean” by default, meaning that (1) they cannot contain terms with more than one label, one definition, or one comment, and (2) non-OBO axioms (which would normally be stored in aowl-axiomsheader tag) are stripped.- This relies on the new
--clean-obooption provided by ROBOT 1.9.8, see its documentation for details. - This is controlled by the
obo_format_optionsODK option, which by default is set to--clean-obo "strict drop-untranslatable-axioms".
- This relies on the new
- When invoking
robot relax, SubClassOf axioms are now relaxed by default, in addition to EquivalentClasses axioms.- This is controlled by the new
robot_relax_optionsODK option, which is set to--include-subclass-of trueby default.
- This is controlled by the new
⚠️ When invokingrobot reduce, SubPropertyOf axioms and property chains are now taken into account to evaluate whether an axiom is logically redundant.- This is controlled by the new
robot_reduce_optionsODK option, which is set to--include-subproperties trueby default.
- This is controlled by the new
- If a context file has been set in the ODK configuration (option
use_context: true), the context file will be passed to all invocations ofrobot(PR #1211).- Related: the location of the context file is now
src/ontology/config/context.json, instead ofsrc/config/context.json(PR #1150).
- Related: the location of the context file is now
- The standard Makefile now includes a new
REASONERvariable (set to the reasoner configured with thereasoneroption in the ODK configuration file) (PR #1140).- This allows custom workflows in
$(ont).Makefileto be sure they are always using the same reasoner as the standard Makefile.
- This allows custom workflows in
- The release workflow can now produce release artefacts in the SQLite/SemSQL format (used notably by the Ontology Access Kit) (PR #1148).
- To enable SQLite/SemSQL output, add the value
dbto theexport_formatoption in the ODK configuration.
- To enable SQLite/SemSQL output, add the value
- New targets allow to automatically generate some documentations from DOSDP patterns (PR #1121).
- It is now possible to publish only some of the SSSOM mapping sets, instead of all of them (PR #1120).
- A SSSOM mapping set can be automatically constructed by merging other sets (PR #1208).
- Overall, several sections of the standard Makefile have been refactored to make them cleaner and more readable (PRs #1194, #1168, #1214, #1216).
Runner and Infrastructure
- The
run.shscript now allows to easily share a local OAK cache with the container, by setting aODK_SHARE_OAK_CACHEenvironment variable (PR #1109):- set
ODK_SHARE_OAK_CACHE=userto automatically share the local user’s own cache (~/.data/oaklib, assuming a default Pystow configuration); - set
ODK_SHARE_OAC_CACHE=<path/to/cache>to share a cache located at an arbitrary location.
- set
- By default, the
run.shscript will automatically configure ROBOT (and other Java programs) to use up to 90% of the total amount of memory allocated to Docker (PR #1111).- This allows configuring max memory settings in one place only (in the configuration of the Docker daemon).
- This can always be overriden once and for all by setting the
robot_java_argsoption in the ODK configuration file, or occasionally by setting theODK_JAVA_OPTSenvironment variable when calling therun.shscript.
- The
run.shscript now detects environment variables indicating the use of a network proxy (http_proxy,https_proxy) and ensures that Java programs within the container are aware of them (PR #1119).
Seeding/updating a repository
- When seeding a new repository, by default release artefacts are not committed to the repository (PRs #1183, #1246).
- Pass the
--commit-artefactsoption (or-r) to the seeding command to force the release artefacts to be committed. - If the
--commit-artefactsoption has not been used at seeding time, the release artefacts can still be manually committed to the repository at a later time, but this will require the--forceoption togit add.
- Pass the
- If the use of a custom ROBOT validation profile has been enabled in the configuration (option
custom_profile: true), the custom profile file will be initialised with the standard profile from the current version of ROBOT (PR #1187). - The newly seeded repository no longer includes a default Code of Conduct (PR #1253). Project owners who want a Code of Conduct will have to add one manually.
- The directories containing the import modules, SSSOM mappings, components, subsets, patterns, and translations are no longer configurable (PR #1250).
- While the options to configure those directories existed, changing the default directories has in fact never been supported.
- The
odk.pyscript now tries to handle error conditions more gracefully, and to report more helpful error messages (PRs #1097, #1190). - The process to update an existing repository (be it to migrate it to a newer ODK version, or to apply configuration changes) has been overhauled (PR #1180). The new process is no longer considered experimental (updating a repo is now a fully supported feature).
⚠️ The update command is nowsh run.sh update_repo.⚠️ The old commandsh run.sh make update_repowill not work when migrating to ODK 1.6. Once the migration is done, that command will work again, but it should be considered deprecated and is better avoided.⚠️ When migrating to ODK 1.6, and only when migrating to ODK 1.6, thesh run.sh update_repowill need to be run twice. Once the migration is done, any future update will only require one invocation of the command.⚠️ As part of the update process, the-editfile will be automatically updated if needed to ensure that its import declarations match the import modules and components declared in the ODK configuration. Likewise, the XML catalog will be automatically updated to ensure it contains all the appropriate redirections. If for any reason this is not desired, and you prefer/need to keep manual control of the-editfile and the XML catalog, add themanage_import_declarations: falseoption to your ODK configuration file.
Other notable changes
- The
.gitignorefile is now managed by the ODK, which will automatically add/remove ignore patterns as needed (PR #1218).- Nonetheless, user-added ignore patterns, if any, will always be preserved.
- The ODK now provides a copy of the OBO Extended Prefix Map (#PR 1235).
- To use the map in a custom workflow, make your target depend on
$(EXTENDED_PREFIX_MAP)and refer to the map using that variable.
- To use the map in a custom workflow, make your target depend on
Bugfixes
- Added back
class-count-by-prefix.sparql(#1030). - Disabled
table-readermkdocs plugin (#1028). - SPARQL-based tests on the
-editfile now also cover any component included in the ontology, as well as any pattern-derived contents (#1154). - Fixed missing dependency for
oak similarity(#1032). - Fixed incorrect handling of
ODK_BINDSoption in therun.shscript (PR #1050). - Added a check in
run.shthat the path to the current directory does not contain spaces (#1078). - Fixed ownership of the SSH socket in the Docker container (PR #1096).
- Fixed seeding issue on macOS (#1105.
- Fixed a possible failure of the OBO checks induced by quirks of the OBO serialisation format (#1107).
- Fixed publishing of SSSOM mapping sets (option
sssom_mappingset_group.release_mappings) (#1036). - Fixed bogus default repository name when seeding (PR #1122).
- Fixed bogus installation of the
sparqlprogtools, which made then unusable when not running under a privileged user account (#1134). - Fixed installation of some of Obographviz’s NPM dependencies with absurdly large UID/GID (#1157).
- Configured Ammonite not to store cached files in
/tools/.coursier-cache, which prevented it from being used unless running under a privileged user account (PR #1160). - Fixed the check intended to warn that the Makefile is out-of-date compared to the ODK configuration file, which did not work properly on Windows (#1170).
- Fixed “noisy” diffs (due to impredictably changing blank node IDs) in subset TSV files (#798).
- Fixed handling of the
module_type_slmeoption, which was ignored when using at the level of an individual import module if the option was also used at the level of the entire import group (#1204). - Fixed building of SSSOM-derived components (#1213).