diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml
new file mode 100644
index 0000000..b197a88
--- /dev/null
+++ b/.github/workflows/docs.yml
@@ -0,0 +1,27 @@
+# Basic ODK workflow
+name: Docs
+
+# Controls when the action will run.
+on:
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+ push:
+ branches:
+ - master
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ build:
+ name: Deploy docs
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout main
+ uses: actions/checkout@v4
+
+ - name: Deploy docs
+ uses: mhausenblas/mkdocs-deploy-gh-pages@master
+ # Or use mhausenblas/mkdocs-deploy-gh-pages@nomaterial to build without the mkdocs-material theme
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CONFIG_FILE: mkdocs.yaml
+
diff --git a/.github/workflows/qc.yml b/.github/workflows/qc.yml
new file mode 100644
index 0000000..f3aae72
--- /dev/null
+++ b/.github/workflows/qc.yml
@@ -0,0 +1,33 @@
+# Basic ODK workflow
+
+name: CI
+
+# Controls when the action will run.
+on:
+ # Triggers the workflow on push or pull request events but only for the master branch
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+ # Allows you to run this workflow manually from the Actions tab
+ workflow_dispatch:
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ # This workflow contains a single job called "ontology_qc"
+ ontology_qc:
+ # The type of runner that the job will run on
+ runs-on: ubuntu-latest
+ container: obolibrary/odkfull:v1.6
+
+ # Steps represent a sequence of tasks that will be executed as part of the job
+ steps:
+ # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
+ - uses: actions/checkout@v4
+
+ - name: Run ontology QC checks
+ env:
+ DEFAULT_BRANCH: master
+ run: cd src/ontology && make ROBOT_ENV='ROBOT_JAVA_ARGS=-Xmx6G' test IMP=false PAT=false MIR=false
+
diff --git a/.gitignore b/.gitignore
index 9e7bb87..9016a7d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,45 +1,69 @@
-# Compiled class file
-*.class
-
-# Log file
-*.log
-
-# BlueJ files
-*.ctxt
-
-# Mobile Tools for Java (J2ME)
-.mtj.tmp/
+# ODK-managed rules, do not modify
+# If you need to add your own ignore rules, you may do so below
+# the "End ODK-managed rules" marker at the end of this file.
+.DS_Store
+semantic.cache
+bin/
-# Package Files #
-*.jar
-*.war
-*.ear
-*.zip
-*.tar.gz
-*.rar
+*.tmp
+*.tmp.obo
+*.tmp.owl
+*.tmp.json
+*-relation-graph.tsv.gz
+.template.db
-# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
-hs_err_pid*
+.github/token.txt
-.gradle
-/build/
+/msio.owl
+/msio.obo
+/msio.json
+/msio.db
+/msio-base.*
+/msio-basic.*
+/msio-full.*
+/msio-simple.*
+/msio-simple-non-classified.*
+/mappings/
+/patterns/
+/reports/
+/subsets/
-# Ignore Gradle GUI config
-gradle-app.setting
+src/ontology/mirror
+src/ontology/mirror/*
+src/ontology/reports/*
+!src/ontology/reports/release-diff.md
+src/ontology/msio.owl
+src/ontology/msio.obo
+src/ontology/msio.json
+src/ontology/msio.db
+src/ontology/msio-base.*
+src/ontology/msio-basic.*
+src/ontology/msio-full.*
+src/ontology/msio-simple.*
+src/ontology/msio-simple-non-classified.*
-# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
-!gradle-wrapper.jar
+src/ontology/seed.txt
+src/ontology/dosdp-tools.log
+src/ontology/ed_definitions_merged.owl
+src/ontology/ontologyterms.txt
+src/ontology/simple_seed.txt
+src/ontology/patterns
+src/ontology/merged-msio-edit.owl
+src/ontology/msio-edit.properties
-# Cache of project
-.gradletasknamecache
+src/ontology/target/
+src/ontology/tmp/*
+!src/ontology/tmp/.gitkeep
+!src/ontology/tmp/README.md
-# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
-# gradle/wrapper/gradle-wrapper.properties
+src/ontology/run.sh.conf
+src/ontology/run.sh.env
-#miscellaneous
-.DS_Store
-catalog-v001.xml
+src/ontology/imports/*_terms_combined.txt
+src/patterns/data/**/*.ofn
+src/patterns/data/**/*.txt
+src/patterns/pattern_owl_seed.txt
+src/patterns/all_pattern_terms.txt
-# IntelliJ and Gradle
-.idea/*
+# End of ODK-managed rules
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..fc51143
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,86 @@
+# Contributing to Metabolomics Standards Initiative Ontology
+
+:+1: First of all: Thank you for taking the time to contribute!
+
+The following is a set of guidelines for contributing to MSIO.
+These guidelines are not strict rules. Use your best judgment, and feel free to propose
+changes to this document in a pull request.
+
+## Table Of Contents
+
+- [Guidelines for Contributions and Requests](#contributions)
+ * [Reporting problems with the ontology](#reporting-bugs)
+ * [Requesting new terms](#requesting-terms)
+ * [Adding new terms by yourself](#adding-terms)
+- [Best practices](#best-practices)
+ * [How to write a great issue?](#great-issues)
+ * [How to create a great pull/merge request?](#great-pulls)
+
+
+
+## Guidelines for Contributions and Requests
+
+
+
+### Reporting problems with the ontology
+
+Please use our [Issue Tracker](https://github.com/ISA-tools/MSIO - base - full/issues/) for reporting problems with the ontology.
+To learn how to write a good issue [see here](#great-issues).
+
+
+
+### Requesting new terms
+
+Before you write a new request, please consider the following:
+
+- **Does the term already exist?** Before submitting suggestions for new ontology terms, check whether the term exist,
+either as a primary term or a synonym term. You can search for your term using [OLS](http://www.ebi.ac.uk/ols/ontologies/msio).
+- **Can you provide a definition for the term?** It should be very clear what the term means, and you should be
+able to provide a concise definition, ideally with a scientific reference.
+- **Is the ontology in scope for the term?** Sometimes, it is hard to tell whether a term "belongs" in
+and ontology. A rule of thumb is "if a similar term already exists, the new term is probably in scope."
+It can be very helpful to mention a very similar concept as part of the term request!
+
+#### Who can request a term?
+
+Anyone can request new terms. However, there is not guarantee that your term will be added automatically. Since this is a
+community resource, it is often necessary to do at least some of the work of adding the term yourself, see below.
+
+#### How to write a new term request
+
+Request a new term _via_ the GitHub [Issue Tracker](https://github.com/ISA-tools/MSIO - base - full/issues/).
+
+It is important to remember that it takes a lot of time for curators to process issues submitted to the tracker.
+To make this work easier, please always use issue templates if they are available (https://github.com/ISA-tools/MSIO - base - full/issues/new/choose).
+
+For how to write a good term request, please read the [best practices carefully](#great-issues).
+
+
+
+### How to add a new term
+
+If you have never editted this ontology before, first follow a [general tutorial](https://oboacademy.github.io/obook/lesson/contributing-to-obo-ontologies)
+
+**Process**:
+
+1. Clone the repository (In case you are not an offical team member, create a fork first)
+1. Create new branch in git, for example `git checkout -b issue123`
+1. Open src/ontology/msio-edit.owl in your favourite editor, i.e. [Protege](https://protege.stanford.edu/). **Careful:** double check you are editing the correct file. There are many ontology files in this repository, but only one _editors file_!
+1. Perform your edit and save your changes
+1. Commit changes to branch
+1. Push changes upstream
+1. Create pull request
+
+## Best Practices
+
+
+
+### How to write great issues?
+
+Please refer to the [OBO Academy term request guide](https://oboacademy.github.io/obook/howto/term-request/).
+
+
+
+### How to create a great pull/merge request?
+
+Please refer to the [OBO Academy best practices](https://oboacademy.github.io/obook/howto/github-create-pull-request/)
\ No newline at end of file
diff --git a/Legacy/.gitignore b/Legacy/.gitignore
new file mode 100644
index 0000000..9e7bb87
--- /dev/null
+++ b/Legacy/.gitignore
@@ -0,0 +1,45 @@
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# BlueJ files
+*.ctxt
+
+# Mobile Tools for Java (J2ME)
+.mtj.tmp/
+
+# Package Files #
+*.jar
+*.war
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+.gradle
+/build/
+
+# Ignore Gradle GUI config
+gradle-app.setting
+
+# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored)
+!gradle-wrapper.jar
+
+# Cache of project
+.gradletasknamecache
+
+# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
+# gradle/wrapper/gradle-wrapper.properties
+
+#miscellaneous
+.DS_Store
+catalog-v001.xml
+
+
+# IntelliJ and Gradle
+.idea/*
diff --git a/CITATION.cff b/Legacy/CITATION.cff
similarity index 100%
rename from CITATION.cff
rename to Legacy/CITATION.cff
diff --git a/MSIO-edit.owl b/Legacy/MSIO-edit.owl
similarity index 99%
rename from MSIO-edit.owl
rename to Legacy/MSIO-edit.owl
index b501d7c..14e51aa 100644
--- a/MSIO-edit.owl
+++ b/Legacy/MSIO-edit.owl
@@ -17,13 +17,7 @@
xmlns:protege="http://protege.stanford.edu/plugins/owl/protege#"
xmlns:oboInOwl="http://www.geneontology.org/formats/oboInOwl#">
-
-
-
-
-
-
-
+
Alejandra Gonzalez-Beltran
Andrew Lane
Hunter Moseley
@@ -34,7 +28,6 @@
Vitaly Selivanov
Philippe Rocca-Serra
an application ontology for supporting description and annotation of mass-spectrometry and nmr-spectroscopy based metabolomics experiments and fluxomics studies.
- OWL
http://creativecommons.org/licenses/by/3.0/
Metabolomics Standards Initiative Ontology (MSIO)
https://github.com/MSI-Metabolomics-Standards-Initiative/MSIO/issues
@@ -1566,7 +1559,7 @@ last accessed: 2018-01-11
-
+
diff --git a/Legacy/README.md b/Legacy/README.md
new file mode 100644
index 0000000..27f439e
--- /dev/null
+++ b/Legacy/README.md
@@ -0,0 +1,40 @@
+# Metabolomics Standards Initiative Ontology (MSIO)
+
+MSIO aims to provide a single point of entry to support semantic markup of experiments making use of NMR and MS techniques to identify, measure and quantify small molecules known as metabolites. MSIO covers metabolite profiling, targeted or undertargeted, tracer based applications. MSIO reuses a number of resources such as [CHEBI](https://www.ebi.ac.uk/ols/ontologies/chebi), [DUO](https://www.ebi.ac.uk/ols/ontologies/duo), [NMRCV](https://www.ebi.ac.uk/ols/ontologies/nmrcv), [OBI](https://www.ebi.ac.uk/ols/ontologies/obi), and [STATO](https://www.ebi.ac.uk/ols/ontologies/stato).
+
+It is compatible with OBI and can be imported in it but also can be used as is for users working solely on Metabolomics.
+
+MSIO is now available from EMBL EBI Ontology Lookup System, [here.](https://www.ebi.ac.uk/ols/ontologies/msio)
+
+Log term requests [here.](https://github.com/MSI-Metabolomics-Standards-Initiative/MSIO/issues)
+
+The following screenshots allow for a sneak peak at the resource to gauge its coverage.
+_________
+Material Processing:
+
+
+
+_________
+Data Transformation:
+
+
+
+_________
+Material Entities:
+
+
+
+_________
+Material Entities:
+
+
+
+_________
+Information Entities:
+
+
+
+## Versions
+
+The development version of the ontology is at: [MSIO-edit.owl](https://raw.githubusercontent.com/ISA-tools/MSIO/master/MSIO-edit.owl)
+
diff --git a/build.gradle b/Legacy/build.gradle
similarity index 100%
rename from build.gradle
rename to Legacy/build.gradle
diff --git a/docs/img/2d_artistic2.gif b/Legacy/docs/img/2d_artistic2.gif
similarity index 100%
rename from docs/img/2d_artistic2.gif
rename to Legacy/docs/img/2d_artistic2.gif
diff --git a/docs/img/logo-2121034682.png b/Legacy/docs/img/logo-2121034682.png
similarity index 100%
rename from docs/img/logo-2121034682.png
rename to Legacy/docs/img/logo-2121034682.png
diff --git a/docs/img/metsoc-logo.jpeg b/Legacy/docs/img/metsoc-logo.jpeg
similarity index 100%
rename from docs/img/metsoc-logo.jpeg
rename to Legacy/docs/img/metsoc-logo.jpeg
diff --git a/docs/img/metsoc2.png b/Legacy/docs/img/metsoc2.png
similarity index 100%
rename from docs/img/metsoc2.png
rename to Legacy/docs/img/metsoc2.png
diff --git a/docs/img/msio-data-transformation.png b/Legacy/docs/img/msio-data-transformation.png
similarity index 100%
rename from docs/img/msio-data-transformation.png
rename to Legacy/docs/img/msio-data-transformation.png
diff --git a/docs/img/msio-information-entities.png b/Legacy/docs/img/msio-information-entities.png
similarity index 100%
rename from docs/img/msio-information-entities.png
rename to Legacy/docs/img/msio-information-entities.png
diff --git a/docs/img/msio-material-entities-chebi-imports.png b/Legacy/docs/img/msio-material-entities-chebi-imports.png
similarity index 100%
rename from docs/img/msio-material-entities-chebi-imports.png
rename to Legacy/docs/img/msio-material-entities-chebi-imports.png
diff --git a/docs/img/msio-material-entities.png b/Legacy/docs/img/msio-material-entities.png
similarity index 100%
rename from docs/img/msio-material-entities.png
rename to Legacy/docs/img/msio-material-entities.png
diff --git a/docs/img/msio-material-processing.png b/Legacy/docs/img/msio-material-processing.png
similarity index 100%
rename from docs/img/msio-material-processing.png
rename to Legacy/docs/img/msio-material-processing.png
diff --git a/duo/MSI_AO_DUO_imports.owl b/Legacy/duo/MSI_AO_DUO_imports.owl
similarity index 100%
rename from duo/MSI_AO_DUO_imports.owl
rename to Legacy/duo/MSI_AO_DUO_imports.owl
diff --git a/gradlew b/Legacy/gradlew
similarity index 100%
rename from gradlew
rename to Legacy/gradlew
diff --git a/gradlew.bat b/Legacy/gradlew.bat
similarity index 100%
rename from gradlew.bat
rename to Legacy/gradlew.bat
diff --git a/nmr/nmrCV.owl b/Legacy/nmr/nmrCV.owl
similarity index 100%
rename from nmr/nmrCV.owl
rename to Legacy/nmr/nmrCV.owl
diff --git a/ontofoxInputs/README.md b/Legacy/ontofoxInputs/README.md
similarity index 100%
rename from ontofoxInputs/README.md
rename to Legacy/ontofoxInputs/README.md
diff --git a/ontofoxInputs/chebi-lower-terms.txt b/Legacy/ontofoxInputs/chebi-lower-terms.txt
similarity index 100%
rename from ontofoxInputs/chebi-lower-terms.txt
rename to Legacy/ontofoxInputs/chebi-lower-terms.txt
diff --git a/ontofoxInputs/chebi-upper-terms.txt b/Legacy/ontofoxInputs/chebi-upper-terms.txt
similarity index 100%
rename from ontofoxInputs/chebi-upper-terms.txt
rename to Legacy/ontofoxInputs/chebi-upper-terms.txt
diff --git a/ontofoxInputs/obi-lower-terms.txt b/Legacy/ontofoxInputs/obi-lower-terms.txt
similarity index 100%
rename from ontofoxInputs/obi-lower-terms.txt
rename to Legacy/ontofoxInputs/obi-lower-terms.txt
diff --git a/ontofoxInputs/obi-upper-terms.txt b/Legacy/ontofoxInputs/obi-upper-terms.txt
similarity index 100%
rename from ontofoxInputs/obi-upper-terms.txt
rename to Legacy/ontofoxInputs/obi-upper-terms.txt
diff --git a/ontofoxInputs/ontofoxInput-OBI-processes.txt b/Legacy/ontofoxInputs/ontofoxInput-OBI-processes.txt
similarity index 100%
rename from ontofoxInputs/ontofoxInput-OBI-processes.txt
rename to Legacy/ontofoxInputs/ontofoxInput-OBI-processes.txt
diff --git a/ontofoxInputs/ontofoxInputCHMO.txt b/Legacy/ontofoxInputs/ontofoxInputCHMO.txt
similarity index 100%
rename from ontofoxInputs/ontofoxInputCHMO.txt
rename to Legacy/ontofoxInputs/ontofoxInputCHMO.txt
diff --git a/ontofoxInputs/ontofoxInputChEBI-noIntermediates.txt b/Legacy/ontofoxInputs/ontofoxInputChEBI-noIntermediates.txt
similarity index 100%
rename from ontofoxInputs/ontofoxInputChEBI-noIntermediates.txt
rename to Legacy/ontofoxInputs/ontofoxInputChEBI-noIntermediates.txt
diff --git a/ontofoxInputs/ontofoxInputChEBI.txt b/Legacy/ontofoxInputs/ontofoxInputChEBI.txt
similarity index 100%
rename from ontofoxInputs/ontofoxInputChEBI.txt
rename to Legacy/ontofoxInputs/ontofoxInputChEBI.txt
diff --git a/ontofoxInputs/ontofoxInputIAO.txt b/Legacy/ontofoxInputs/ontofoxInputIAO.txt
similarity index 100%
rename from ontofoxInputs/ontofoxInputIAO.txt
rename to Legacy/ontofoxInputs/ontofoxInputIAO.txt
diff --git a/ontofoxInputs/ontofoxInputPSI-MS.txt b/Legacy/ontofoxInputs/ontofoxInputPSI-MS.txt
similarity index 100%
rename from ontofoxInputs/ontofoxInputPSI-MS.txt
rename to Legacy/ontofoxInputs/ontofoxInputPSI-MS.txt
diff --git a/ontofoxInputs/ontofoxInputUO.txt b/Legacy/ontofoxInputs/ontofoxInputUO.txt
similarity index 100%
rename from ontofoxInputs/ontofoxInputUO.txt
rename to Legacy/ontofoxInputs/ontofoxInputUO.txt
diff --git a/ontofoxOutputs/MSIO-CHMO_import.owl b/Legacy/ontofoxOutputs/MSIO-CHMO_import.owl
similarity index 100%
rename from ontofoxOutputs/MSIO-CHMO_import.owl
rename to Legacy/ontofoxOutputs/MSIO-CHMO_import.owl
diff --git a/ontofoxOutputs/MSIO_ChEBI_import.owl b/Legacy/ontofoxOutputs/MSIO_ChEBI_import.owl
similarity index 100%
rename from ontofoxOutputs/MSIO_ChEBI_import.owl
rename to Legacy/ontofoxOutputs/MSIO_ChEBI_import.owl
diff --git a/ontofoxOutputs/MSIO_OBI_import.owl b/Legacy/ontofoxOutputs/MSIO_OBI_import.owl
similarity index 100%
rename from ontofoxOutputs/MSIO_OBI_import.owl
rename to Legacy/ontofoxOutputs/MSIO_OBI_import.owl
diff --git a/ontofoxOutputs/MSIO_PSIMS_import.owl b/Legacy/ontofoxOutputs/MSIO_PSIMS_import.owl
similarity index 100%
rename from ontofoxOutputs/MSIO_PSIMS_import.owl
rename to Legacy/ontofoxOutputs/MSIO_PSIMS_import.owl
diff --git a/ontofoxOutputs/MSIO_UO_import.owl b/Legacy/ontofoxOutputs/MSIO_UO_import.owl
similarity index 100%
rename from ontofoxOutputs/MSIO_UO_import.owl
rename to Legacy/ontofoxOutputs/MSIO_UO_import.owl
diff --git a/releases/1.0.1/MSIO-merged-reasoned.obo b/Legacy/releases/1.0.1/MSIO-merged-reasoned.obo
similarity index 100%
rename from releases/1.0.1/MSIO-merged-reasoned.obo
rename to Legacy/releases/1.0.1/MSIO-merged-reasoned.obo
diff --git a/releases/1.0.1/MSIO-merged-reasoned.owl b/Legacy/releases/1.0.1/MSIO-merged-reasoned.owl
similarity index 100%
rename from releases/1.0.1/MSIO-merged-reasoned.owl
rename to Legacy/releases/1.0.1/MSIO-merged-reasoned.owl
diff --git a/releases/1.0/MSIO-merged-reasoned.obo b/Legacy/releases/1.0/MSIO-merged-reasoned.obo
similarity index 100%
rename from releases/1.0/MSIO-merged-reasoned.obo
rename to Legacy/releases/1.0/MSIO-merged-reasoned.obo
diff --git a/releases/1.0/MSIO-merged-reasoned.owl b/Legacy/releases/1.0/MSIO-merged-reasoned.owl
similarity index 100%
rename from releases/1.0/MSIO-merged-reasoned.owl
rename to Legacy/releases/1.0/MSIO-merged-reasoned.owl
diff --git a/releases/latest_release/MSIO-merged-reasoned.obo b/Legacy/releases/latest_release/MSIO-merged-reasoned.obo
similarity index 100%
rename from releases/latest_release/MSIO-merged-reasoned.obo
rename to Legacy/releases/latest_release/MSIO-merged-reasoned.obo
diff --git a/releases/latest_release/MSIO-merged-reasoned.owl b/Legacy/releases/latest_release/MSIO-merged-reasoned.owl
similarity index 100%
rename from releases/latest_release/MSIO-merged-reasoned.owl
rename to Legacy/releases/latest_release/MSIO-merged-reasoned.owl
diff --git a/settings.gradle b/Legacy/settings.gradle
similarity index 100%
rename from settings.gradle
rename to Legacy/settings.gradle
diff --git a/src/main/java/OntoFoxInput.java b/Legacy/src/main/java/OntoFoxInput.java
similarity index 100%
rename from src/main/java/OntoFoxInput.java
rename to Legacy/src/main/java/OntoFoxInput.java
diff --git a/src/main/java/OntoFoxInputParser.java b/Legacy/src/main/java/OntoFoxInputParser.java
similarity index 100%
rename from src/main/java/OntoFoxInputParser.java
rename to Legacy/src/main/java/OntoFoxInputParser.java
diff --git a/Legacy/src/ontology/Makefile b/Legacy/src/ontology/Makefile
new file mode 100644
index 0000000..fb0a35c
--- /dev/null
+++ b/Legacy/src/ontology/Makefile
@@ -0,0 +1,30 @@
+OBO=http://purl.obolibrary.org/obo
+ONT=MSIO
+BASE=$(OBO)/$(ONT)
+SRC=../../$(ONT)-edit.owl
+RELEASEDIR=./releases
+IMPORTSDIR=./imports
+ROBOT-PLUS=../../bin/robot-plus
+GRADLE=gradle
+
+all: $(ONT).owl
+
+test:all
+
+$(ONT).owl: $(SRC)
+ $(ROBOT-PLUS) reason -i $< -r ELK relax reduce -r ELK annotate -V $(BASE)/releases/`date +%Y-%m-%d`/$(ONT).owl -o $@
+
+prepare_release:
+ $(GRADLE) clean
+ $(GRADLE) jar
+ cp ./build/libs/robot-plus.jar ./bin/
+ export PATH=$(PATH):$(PWD)/bin
+
+ $(ROBOT-PLUS) merge -I "http://purl.obolibrary.org/obo/duo.owl" extract --method MIREOT \
+ --upper-term "owl:Thing" --lower-term "obo:DUO_0000001" --lower-term "obo:DUO_0000017" \
+ --branch-from-term "obo:DUO_0000001" --branch-from-term "obo:DUO_0000017" \
+ --output $(IMPORTSDIR)/duo_import.owl
+
+
+duo_import:
+ cd ./imports/duo/; pwd; ../../$(ROBOT-PLUS) query -I "http://purl.obolibrary.org/obo/duo.owl" -query descendants.sparql duo-terms-file.txt; ../../$(ROBOT-PLUS) extract --method BOT -I "http://purl.obolibrary.org/obo/duo.owl" --term-file duo-terms-file.txt --output ../MSIO_DUO_import.owl
diff --git a/src/ontology/imports/MSIO_DUO_import.owl b/Legacy/src/ontology/imports/MSIO_DUO_import.owl
similarity index 100%
rename from src/ontology/imports/MSIO_DUO_import.owl
rename to Legacy/src/ontology/imports/MSIO_DUO_import.owl
diff --git a/src/ontology/imports/duo/.gitignore b/Legacy/src/ontology/imports/duo/.gitignore
similarity index 100%
rename from src/ontology/imports/duo/.gitignore
rename to Legacy/src/ontology/imports/duo/.gitignore
diff --git a/src/ontology/imports/duo/README.md b/Legacy/src/ontology/imports/duo/README.md
similarity index 100%
rename from src/ontology/imports/duo/README.md
rename to Legacy/src/ontology/imports/duo/README.md
diff --git a/src/ontology/imports/duo/descendants.sparql b/Legacy/src/ontology/imports/duo/descendants.sparql
similarity index 100%
rename from src/ontology/imports/duo/descendants.sparql
rename to Legacy/src/ontology/imports/duo/descendants.sparql
diff --git a/src/test/java/OntoFoxInputParserTest.java b/Legacy/src/test/java/OntoFoxInputParserTest.java
similarity index 100%
rename from src/test/java/OntoFoxInputParserTest.java
rename to Legacy/src/test/java/OntoFoxInputParserTest.java
diff --git a/src/test/resources/input1.txt b/Legacy/src/test/resources/input1.txt
similarity index 100%
rename from src/test/resources/input1.txt
rename to Legacy/src/test/resources/input1.txt
diff --git a/src/test/resources/ontofoxInput-OBI-processes.txt b/Legacy/src/test/resources/ontofoxInput-OBI-processes.txt
similarity index 100%
rename from src/test/resources/ontofoxInput-OBI-processes.txt
rename to Legacy/src/test/resources/ontofoxInput-OBI-processes.txt
diff --git a/src/test/resources/ontofoxInputUO.txt b/Legacy/src/test/resources/ontofoxInputUO.txt
similarity index 100%
rename from src/test/resources/ontofoxInputUO.txt
rename to Legacy/src/test/resources/ontofoxInputUO.txt
diff --git a/stato/stato14pre.owl b/Legacy/stato/stato14pre.owl
similarity index 100%
rename from stato/stato14pre.owl
rename to Legacy/stato/stato14pre.owl
diff --git a/gradle/wrapper/gradle-wrapper.jar b/Legacy/wrapper/gradle-wrapper.jar
similarity index 100%
rename from gradle/wrapper/gradle-wrapper.jar
rename to Legacy/wrapper/gradle-wrapper.jar
diff --git a/gradle/wrapper/gradle-wrapper.properties b/Legacy/wrapper/gradle-wrapper.properties
similarity index 100%
rename from gradle/wrapper/gradle-wrapper.properties
rename to Legacy/wrapper/gradle-wrapper.properties
diff --git a/README.md b/README.md
index 27f439e..8a746b8 100644
--- a/README.md
+++ b/README.md
@@ -1,40 +1,29 @@
-# Metabolomics Standards Initiative Ontology (MSIO)
-MSIO aims to provide a single point of entry to support semantic markup of experiments making use of NMR and MS techniques to identify, measure and quantify small molecules known as metabolites. MSIO covers metabolite profiling, targeted or undertargeted, tracer based applications. MSIO reuses a number of resources such as [CHEBI](https://www.ebi.ac.uk/ols/ontologies/chebi), [DUO](https://www.ebi.ac.uk/ols/ontologies/duo), [NMRCV](https://www.ebi.ac.uk/ols/ontologies/nmrcv), [OBI](https://www.ebi.ac.uk/ols/ontologies/obi), and [STATO](https://www.ebi.ac.uk/ols/ontologies/stato).
+
+# Metabolomics Standards Initiative Ontology
-It is compatible with OBI and can be imported in it but also can be used as is for users working solely on Metabolomics.
+Description: None
-MSIO is now available from EMBL EBI Ontology Lookup System, [here.](https://www.ebi.ac.uk/ols/ontologies/msio)
+More information can be found at http://obofoundry.org/ontology/msio
-Log term requests [here.](https://github.com/MSI-Metabolomics-Standards-Initiative/MSIO/issues)
-
-The following screenshots allow for a sneak peak at the resource to gauge its coverage.
-_________
-Material Processing:
-
-
+## Versions
-_________
-Data Transformation:
+### Stable release versions
-
+The latest version of the ontology can always be found at:
-_________
-Material Entities:
+http://purl.obolibrary.org/obo/msio.owl
-
+(note this will not show up until the request has been approved by obofoundry.org)
-_________
-Material Entities:
+### Editors' version
-
+Editors of this ontology should use the edit version, [src/ontology/msio-edit.owl](src/ontology/msio-edit.owl)
-_________
-Information Entities:
+## Contact
-
+Please use this GitHub repository's [Issue tracker](https://github.com/ISA-tools/MSIO - base - full/issues) to request new terms/classes or report errors or specific concerns related to the ontology.
-## Versions
+## Acknowledgements
-The development version of the ontology is at: [MSIO-edit.owl](https://raw.githubusercontent.com/ISA-tools/MSIO/master/MSIO-edit.owl)
-
+This ontology repository was created using the [Ontology Development Kit (ODK)](https://github.com/INCATools/ontology-development-kit).
\ No newline at end of file
diff --git a/bin/robot-plus b/bin/robot-plus
deleted file mode 100755
index ff58cb9..0000000
--- a/bin/robot-plus
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env bash
-
-## Check for Cygwin, use grep for a case-insensitive search
-IS_CYGWIN="FALSE"
-if uname | grep -iq cygwin; then
- IS_CYGWIN="TRUE"
-fi
-
-DIR="$( cd "$( dirname "$0" )" && pwd )"
-
-if [ $IS_CYGWIN = "TRUE" ]
-then
- exec java $ROBOT_JAVA_ARGS -jar "$(cygpath -w $DIR/../build/libs/robot-plus.jar)" "$@"
-else
- exec java $ROBOT_JAVA_ARGS -jar "$DIR/../build/libs/robot-plus.jar" "$@"
-fi
diff --git a/bin/robot-plus.bat b/bin/robot-plus.bat
deleted file mode 100755
index 70035dd..0000000
--- a/bin/robot-plus.bat
+++ /dev/null
@@ -1 +0,0 @@
-java -jar %~dp0robot.jar %*
\ No newline at end of file
diff --git a/issue_template.md b/issue_template.md
new file mode 100644
index 0000000..061074e
--- /dev/null
+++ b/issue_template.md
@@ -0,0 +1,21 @@
+For new term requests, please provide the following information:
+
+## Preferred term label
+
+(e.g., Asplenia)
+
+## Synonyms
+
+(e.g., Absent spleen)
+
+## Textual definition
+
+the definition should be understandable even for non-specialists. Include a PubMed ID to refer to any relevant article that provides additional information about the suggested term.
+
+## Suggested parent term
+
+Please look in the hierarchy in a browser such as [OLS](http://www.ebi.ac.uk/ols/ontologies/msio)
+
+## Attribution
+
+If you would like a nanoattribution, please indicate your ORCID id
\ No newline at end of file
diff --git a/libs/robot.jar b/libs/robot.jar
deleted file mode 100644
index 3c43d21..0000000
Binary files a/libs/robot.jar and /dev/null differ
diff --git a/msio-odk.yaml b/msio-odk.yaml
new file mode 100755
index 0000000..b30efb2
--- /dev/null
+++ b/msio-odk.yaml
@@ -0,0 +1,65 @@
+id: msio
+title: "Metabolomics Standards Initiative Ontology"
+github_org: ISA-tools
+git_main_branch: master
+repo: MSIO
+ - base
+ - full
+primary_release: full
+export_formats:
+ - owl
+ - obo
+ - json
+import_group:
+ use_base_merging: TRUE
+ products:
+ - id: iao
+ - id: cl
+ use_base: TRUE
+ - id: obi
+ use_base: TRUE
+ - id: chebi
+ mirror_from: https://raw.githubusercontent.com/obophenotype/chebi_obo_slim/refs/heads/main/chebi_slim.owl
+ is_large: TRUE
+ - id: duo
+ make_base: TRUE
+ - id: ro
+ use_base: TRUE
+ - id: nmrCV
+ mirror_from: http://nmrml.org/cv/v1.1.0/nmrCV.owl
+ make_base: TRUE
+ base_iris:
+ - http://nmrML.org/nmrCV#
+ - id: chmo
+ use_base: TRUE
+ - id: gaz
+ make_base: TRUE
+ base_iris:
+ - http://purl.obolibrary.org/obo/gaz_
+ - id: go
+ use_base: TRUE
+ - id: ms
+ make_base: TRUE
+ base_iris:
+ - http://purl.obolibrary.org/obo/MS_
+ - id: ncbitaxon
+ mirror_from: http://purl.obolibrary.org/obo/ncbitaxon/subsets/taxslim.owl
+ - id: pato
+ use_base: TRUE
+ - id: uo
+ make_base: TRUE
+ - id: ogms
+ make_base: TRUE
+ - id: pr
+ make_base: TRUE
+ mirror_from: https://raw.githubusercontent.com/obophenotype/pro_obo_slim/master/pr_slim.owl
+ is_large: TRUE
+ - id: so
+ make_base: TRUE
+robot_java_args: "-Xmx16G"
+robot_report:
+ use_labels: TRUE
+ fail_on: ERROR
+ custom_profile: TRUE
+ report_on:
+ - edit
\ No newline at end of file
diff --git a/seed-via-docker.sh b/seed-via-docker.sh
new file mode 100644
index 0000000..15d163c
--- /dev/null
+++ b/seed-via-docker.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+set -e
+
+echo "This script only works with ODK 1.3.2 and later. For ODK 1.3.1 or earlier, use https://raw.githubusercontent.com/INCATools/ontology-development-kit/v1.3.1/seed-via-docker.sh"
+
+ODK_IMAGE=${ODK_IMAGE:-odkfull}
+ODK_TAG=${ODK_TAG:-latest}
+ODK_GITNAME=${ODK_GITNAME:-$(git config --get user.name)}
+ODK_GITEMAIL=${ODK_GITEMAIL:-$(git config --get user.email)}
+
+docker run -e ODK_USER_ID=$(id -u) -e ODK_GROUP_ID=$(id -g) -v $PWD:/work -w /work --rm obolibrary/$ODK_IMAGE:$ODK_TAG /tools/odk.py seed --gitname "$ODK_GITNAME" --gitemail "$ODK_GITEMAIL" "$@"
\ No newline at end of file
diff --git a/src/metadata/README.md b/src/metadata/README.md
new file mode 100644
index 0000000..9b3ba61
--- /dev/null
+++ b/src/metadata/README.md
@@ -0,0 +1,24 @@
+Metadata files for the OBO Library
+
+ * [msio.yml](msio.yml)
+ * Determines how your purl.obolibrary.org/obo/msio/ redirects will be handled
+ * Go here: https://github.com/OBOFoundry/purl.obolibrary.org/tree/master/config
+ * Click [New File](https://github.com/OBOFoundry/purl.obolibrary.org/new/master/config)
+ * Paste in the contents of [msio.yml](msio.yml)
+ * Click "Commit new file"
+ * IMPORTANT: remember to make a pull request
+ * An OBO admin will merge your Pull Request *providing it meets the requirements of the OBO library*
+ * [msio.md](msio.md)
+ * Determines how your metadata is shown on OBO Library, OLS and AberOWL
+ * Go here: https://github.com/OBOFoundry/OBOFoundry.github.io/tree/master/ontology
+ * Click [New File](https://github.com/OBOFoundry/OBOFoundry.github.io/new/master/ontology)
+ * Paste in the contents of [msio.md](msio.md)
+ * Click "Commit new file"
+ * IMPORTANT: remember to make a pull request
+ * An OBO admin will merge your Pull Request *providing it meets the requirements of the OBO library*
+
+For more background see:
+
+ * http://obofoundry.org/
+ * http://obofoundry.org/faq/how-do-i-edit-metadata.html
+
diff --git a/src/metadata/msio.md b/src/metadata/msio.md
new file mode 100644
index 0000000..845fe7c
--- /dev/null
+++ b/src/metadata/msio.md
@@ -0,0 +1,59 @@
+---
+layout: ontology_detail
+id: msio
+title: Metabolomics Standards Initiative Ontology
+jobs:
+ - id: https://travis-ci.org/ISA-tools/MSIO - base - full
+ type: travis-ci
+build:
+ checkout: git clone https://github.com/ISA-tools/MSIO - base - full.git
+ system: git
+ path: "."
+contact:
+ email:
+ label:
+ github:
+description: Metabolomics Standards Initiative Ontology is an ontology...
+domain: stuff
+homepage: https://github.com/ISA-tools/MSIO - base - full
+products:
+ - id: msio.owl
+ name: "Metabolomics Standards Initiative Ontology main release in OWL format"
+ - id: msio.obo
+ name: "Metabolomics Standards Initiative Ontology additional release in OBO format"
+ - id: msio.json
+ name: "Metabolomics Standards Initiative Ontology additional release in OBOJSon format"
+ - id: msio/msio-base.owl
+ name: "Metabolomics Standards Initiative Ontology main release in OWL format"
+ - id: msio/msio-base.obo
+ name: "Metabolomics Standards Initiative Ontology additional release in OBO format"
+ - id: msio/msio-base.json
+ name: "Metabolomics Standards Initiative Ontology additional release in OBOJSon format"
+dependencies:
+- id: iao
+- id: cl
+- id: obi
+- id: chebi
+- id: duo
+- id: ro
+- id: nmrCV
+- id: chmo
+- id: gaz
+- id: go
+- id: ms
+- id: ncbitaxon
+- id: pato
+- id: uo
+- id: ogms
+- id: pr
+- id: so
+tracker: https://github.com/ISA-tools/MSIO - base - full/issues
+license:
+ url: http://creativecommons.org/licenses/by/3.0/
+ label: CC-BY
+activity_status: active
+---
+
+Enter a detailed description of your ontology here. You can use arbitrary markdown and HTML.
+You can also embed images too.
+
diff --git a/src/metadata/msio.yml b/src/metadata/msio.yml
new file mode 100644
index 0000000..e665db6
--- /dev/null
+++ b/src/metadata/msio.yml
@@ -0,0 +1,28 @@
+# PURL configuration for http://purl.obolibrary.org/obo/msio
+
+idspace: MSIO
+base_url: /obo/msio
+
+products:
+- msio.owl: https://raw.githubusercontent.com/ISA-tools/MSIO - base - full/master/msio.owl
+- msio.obo: https://raw.githubusercontent.com/ISA-tools/MSIO - base - full/master/msio.obo
+
+term_browser: ontobee
+example_terms:
+- MSIO_0000000
+
+entries:
+
+- prefix: /releases/
+ replacement: https://raw.githubusercontent.com/ISA-tools/MSIO - base - full/v
+
+- prefix: /tracker/
+ replacement: https://github.com/ISA-tools/MSIO - base - full/issues
+
+- prefix: /about/
+ replacement: http://www.ontobee.org/ontology/MSIO?iri=http://purl.obolibrary.org/obo/
+
+## generic fall-through, serve direct from github by default
+- prefix: /
+ replacement: https://raw.githubusercontent.com/ISA-tools/MSIO - base - full/master/
+
diff --git a/src/ontology/Makefile b/src/ontology/Makefile
index fb0a35c..1b8f070 100644
--- a/src/ontology/Makefile
+++ b/src/ontology/Makefile
@@ -1,30 +1,836 @@
-OBO=http://purl.obolibrary.org/obo
-ONT=MSIO
-BASE=$(OBO)/$(ONT)
-SRC=../../$(ONT)-edit.owl
-RELEASEDIR=./releases
-IMPORTSDIR=./imports
-ROBOT-PLUS=../../bin/robot-plus
-GRADLE=gradle
+# ----------------------------------------
+# Makefile for msio
+# Generated using ontology-development-kit
+# ODK Version: v1.6
+# ----------------------------------------
+# IMPORTANT: DO NOT EDIT THIS FILE. To override default make goals, use msio.Makefile instead
-all: $(ONT).owl
-test:all
+# ----------------------------------------
+# More information: https://github.com/INCATools/ontology-development-kit/
-$(ONT).owl: $(SRC)
- $(ROBOT-PLUS) reason -i $< -r ELK relax reduce -r ELK annotate -V $(BASE)/releases/`date +%Y-%m-%d`/$(ONT).owl -o $@
+# Fingerprint of the configuration file when this Makefile was last generated
+CONFIG_HASH= fc938b7a2a799bf84363224dad3f17b5a8a2d2866c92dd4613b6169e1c323aa0
-prepare_release:
- $(GRADLE) clean
- $(GRADLE) jar
- cp ./build/libs/robot-plus.jar ./bin/
- export PATH=$(PATH):$(PWD)/bin
- $(ROBOT-PLUS) merge -I "http://purl.obolibrary.org/obo/duo.owl" extract --method MIREOT \
- --upper-term "owl:Thing" --lower-term "obo:DUO_0000001" --lower-term "obo:DUO_0000017" \
- --branch-from-term "obo:DUO_0000001" --branch-from-term "obo:DUO_0000017" \
- --output $(IMPORTSDIR)/duo_import.owl
+# ----------------------------------------
+# Standard Constants
+# ----------------------------------------
+# these can be overwritten on the command line
+OBOBASE= http://purl.obolibrary.org/obo
+URIBASE= http://purl.obolibrary.org/obo
+ONT= msio
+ONTBASE= http://purl.obolibrary.org/obo/msio
+EDIT_FORMAT= owl
+SRC = $(ONT)-edit.$(EDIT_FORMAT)
+MAKE_FAST= $(MAKE) IMP=false PAT=false COMP=false MIR=false
+CATALOG= catalog-v001.xml
+ROBOT= robot --catalog $(CATALOG)
+REASONER= ELK
+OWLTOOLS = owltools --use-catalog
+RELEASEDIR= ../..
+DOCSDIR= ../../docs
+REPORTDIR= reports
+TEMPLATEDIR= ../templates
+TMPDIR= tmp
+MIRRORDIR= mirror
+IMPORTDIR= imports
+SUBSETDIR= subsets
+SCRIPTSDIR= ../scripts
+UPDATEREPODIR= target
+SPARQLDIR = ../sparql
+EXTENDED_PREFIX_MAP= $(TMPDIR)/obo.epm.json
+COMPONENTSDIR = components
+ROBOT_PROFILE = profile.txt
+REPORT_FAIL_ON = ERROR
+REPORT_LABEL = -l true
+REPORT_PROFILE_OPTS = --profile $(ROBOT_PROFILE)
+OBO_FORMAT_OPTIONS = --clean-obo "strict drop-untranslatable-axioms"
+SPARQL_VALIDATION_CHECKS = owldef-self-reference iri-range label-with-iri multiple-replaced_by
+SPARQL_EXPORTS = basic-report class-count-by-prefix edges xrefs obsoletes synonyms
+ODK_VERSION_MAKEFILE = v1.6
+RELAX_OPTIONS = --include-subclass-of true
+REDUCE_OPTIONS = --include-subproperties true
-duo_import:
- cd ./imports/duo/; pwd; ../../$(ROBOT-PLUS) query -I "http://purl.obolibrary.org/obo/duo.owl" -query descendants.sparql duo-terms-file.txt; ../../$(ROBOT-PLUS) extract --method BOT -I "http://purl.obolibrary.org/obo/duo.owl" --term-file duo-terms-file.txt --output ../MSIO_DUO_import.owl
+TODAY ?= $(shell date +%Y-%m-%d)
+OBODATE ?= $(shell date +'%d:%m:%Y %H:%M')
+VERSION= $(TODAY)
+ANNOTATE_ONTOLOGY_VERSION = annotate -V $(ONTBASE)/releases/$(VERSION)/$@ --annotation owl:versionInfo $(VERSION)
+ANNOTATE_CONVERT_FILE = annotate --ontology-iri $(ONTBASE)/$@ $(ANNOTATE_ONTOLOGY_VERSION) convert -f ofn --output $@.tmp.owl && mv $@.tmp.owl $@
+OTHER_SRC =
+ONTOLOGYTERMS = $(TMPDIR)/ontologyterms.txt
+EDIT_PREPROCESSED = $(TMPDIR)/$(ONT)-preprocess.owl
+
+
+FORMATS = $(sort owl obo json owl)
+FORMATS_INCL_TSV = $(sort $(FORMATS) tsv)
+RELEASE_ARTEFACTS = $(sort $(ONT)-full $(ONT)-base )
+
+ifeq ($(ODK_DEBUG),yes)
+ODK_DEBUG_FILE = debug.log
+SHELL = $(SCRIPTSDIR)/run-command.sh
+endif
+
+# ----------------------------------------
+# Workflow control
+# ----------------------------------------
+# Set any of the following variables to false to completely disable the
+# corresponding workflows.
+
+# Refresh of mirrors (and all remote resources more generally)
+MIR = true
+
+# Re-generation of import modules
+IMP = true
+
+# Re-generation of "large" import modules
+# Note that IMP=false takes precedence over IMP_LARGE=true, that is,
+# IMP=false disables the generation of all import modules, large or not.
+IMP_LARGE = true
+
+# Re-generation of component modules
+COMP = true
+
+# Re-generation of pattern-derived files
+PAT = true
+
+# ----------------------------------------
+# Top-level targets
+# ----------------------------------------
+
+.PHONY: .FORCE
+
+.PHONY: all
+all: all_odk
+
+.PHONY: all_odk
+all_odk: odkversion config_check test custom_reports all_assets
+
+.PHONY: test
+test: odkversion validate_idranges reason_test sparql_test robot_reports $(REPORTDIR)/validate_profile_owl2dl_$(ONT).owl.txt
+ echo "Finished running all tests successfully."
+
+.PHONY: test
+test_fast:
+ $(MAKE_FAST) test
+
+.PHONY: release_diff
+release_diff: $(REPORTDIR)/release-diff.md
+
+.PHONY: reason_test
+reason_test: $(EDIT_PREPROCESSED)
+ $(ROBOT) reason --input $< --reasoner $(REASONER) --equivalent-classes-allowed asserted-only \
+ --exclude-tautologies structural --output test.owl && rm test.owl
+
+.PHONY: odkversion
+odkversion:
+ @echo "ODK Makefile $(ODK_VERSION_MAKEFILE)"
+ @odk-info --tools
+.PHONY: config_check
+config_check:
+ @if [ "$$(tr -d '\r' < $(ONT)-odk.yaml | sha256sum | cut -c1-64)" = "$(CONFIG_HASH)" ]; then \
+ echo "Repository is up-to-date." ; else \
+ echo "Your ODK configuration has changed since this Makefile was generated. You may need to run 'make update_repo'." ; fi
+
+
+$(TMPDIR) $(REPORTDIR) $(MIRRORDIR) $(IMPORTDIR) $(COMPONENTSDIR) $(SUBSETDIR):
+ mkdir -p $@
+
+# ----------------------------------------
+# ODK-managed ROBOT plugins
+# ----------------------------------------
+
+# Make sure ROBOT knows where to find plugins
+export ROBOT_PLUGINS_DIRECTORY=$(TMPDIR)/plugins
+
+# Override this rule in msio.Makefile to install custom plugins
+.PHONY: custom_robot_plugins
+custom_robot_plugins:
+
+
+.PHONY: extra_robot_plugins
+extra_robot_plugins:
+
+
+# Install all ROBOT plugins to the runtime plugins directory
+.PHONY: all_robot_plugins
+all_robot_plugins: $(foreach plugin,$(notdir $(wildcard /tools/robot-plugins/*.jar)),$(ROBOT_PLUGINS_DIRECTORY)/$(plugin)) \
+ $(foreach plugin,$(notdir $(wildcard ../../plugins/*.jar)),$(ROBOT_PLUGINS_DIRECTORY)/$(plugin)) \
+ custom_robot_plugins extra_robot_plugins \
+
+# Default rule to install plugins
+$(ROBOT_PLUGINS_DIRECTORY)/%.jar:
+ @mkdir -p $(ROBOT_PLUGINS_DIRECTORY)
+ @if [ -f ../../plugins/$*.jar ]; then \
+ ln ../../plugins/$*.jar $@ ; \
+ elif [ -f /tools/robot-plugins/$*.jar ]; then \
+ cp /tools/robot-plugins/$*.jar $@ ; \
+ fi
+
+# Specific rules for supplementary plugins defined in configuration
+
+
+# ----------------------------------------
+# Release assets
+# ----------------------------------------
+
+MAIN_PRODUCTS = $(sort $(foreach r,$(RELEASE_ARTEFACTS), $(r)) $(ONT))
+MAIN_GZIPPED =
+MAIN_FILES = $(foreach n,$(MAIN_PRODUCTS), $(foreach f,$(FORMATS), $(n).$(f))) $(MAIN_GZIPPED)
+SRCMERGED = $(TMPDIR)/merged-$(ONT)-edit.ofn
+
+.PHONY: all_main
+all_main: $(MAIN_FILES)
+
+# ----------------------------------------
+# Import assets
+# ----------------------------------------
+
+
+IMPORTS = iao cl obi chebi duo ro nmrCV chmo go ms ncbitaxon pato uo ogms pr so
+
+IMPORT_ROOTS = $(IMPORTDIR)/merged_import
+IMPORT_OWL_FILES = $(foreach n,$(IMPORT_ROOTS), $(n).owl)
+IMPORT_FILES = $(IMPORT_OWL_FILES)
+
+
+.PHONY: all_imports
+all_imports: $(IMPORT_FILES)
+
+# ----------------------------------------
+# Subset assets
+# ----------------------------------------
+
+
+SUBSETS =
+
+SUBSET_ROOTS = $(patsubst %, $(SUBSETDIR)/%, $(SUBSETS))
+SUBSET_FILES = $(foreach n,$(SUBSET_ROOTS), $(foreach f,$(FORMATS_INCL_TSV), $(n).$(f)))
+
+.PHONY: all_subsets
+all_subsets: $(SUBSET_FILES)
+
+# ----------------------------------------
+# Mapping assets
+# ----------------------------------------
+
+
+MAPPINGS =
+
+
+MAPPING_FILES = $(foreach p, $(MAPPINGS), $(MAPPINGDIR)/$(p).sssom.tsv)
+RELEASED_MAPPING_FILES = $(foreach p, $(RELEASED_MAPPINGS), $(MAPPINGDIR)/$(p).sssom.tsv)
+
+.PHONY: all_mappings
+all_mappings: $(MAPPING_FILES)
+
+
+# ----------------------------------------
+# QC Reports & Utilities
+# ----------------------------------------
+
+OBO_REPORT = $(SRC)-obo-report
+ALIGNMENT_REPORT = $(SRC)-align-report
+REPORTS = $(OBO_REPORT)
+REPORT_FILES = $(patsubst %, $(REPORTDIR)/%.tsv, $(REPORTS))
+
+.PHONY: robot_reports
+robot_reports: $(REPORT_FILES)
+
+.PHONY: all_reports
+all_reports: custom_reports robot_reports
+
+# ----------------------------------------
+# ROBOT OWL Profile checking
+# ----------------------------------------
+
+# The merge step is necessary to avoid undeclared entity violations.
+$(REPORTDIR)/validate_profile_owl2dl_%.txt: % | $(REPORTDIR) $(TMPDIR)
+ $(ROBOT) merge -i $< convert -f ofn -o $(TMPDIR)/validate.ofn
+ $(ROBOT) validate-profile --profile DL -i $(TMPDIR)/validate.ofn -o $@ || { cat $@ && exit 1; }
+.PRECIOUS: $(REPORTDIR)/validate_profile_owl2dl_%.txt
+
+validate_profile_%: $(REPORTDIR)/validate_profile_owl2dl_%.txt
+ echo "$* profile validation completed."
+
+# ----------------------------------------
+# Sparql queries: Q/C
+# ----------------------------------------
+
+# these live in the ../sparql directory, and have suffix -violation.sparql
+# adding the name here will make the violation check live.
+
+SPARQL_VALIDATION_QUERIES = $(foreach V,$(SPARQL_VALIDATION_CHECKS),$(SPARQLDIR)/$(V)-violation.sparql)
+
+sparql_test: $(SRCMERGED) | $(REPORTDIR)
+ifneq ($(SPARQL_VALIDATION_QUERIES),)
+
+ $(ROBOT) verify -i $(SRCMERGED) --queries $(SPARQL_VALIDATION_QUERIES) -O $(REPORTDIR)
+endif
+
+# ----------------------------------------
+# ROBOT report
+# ----------------------------------------
+
+$(REPORTDIR)/$(SRC)-obo-report.tsv: $(SRCMERGED) | $(REPORTDIR)
+ $(ROBOT) report -i $< $(REPORT_LABEL) $(REPORT_PROFILE_OPTS) --fail-on $(REPORT_FAIL_ON) --print 5 -o $@
+
+$(REPORTDIR)/%-obo-report.tsv: % | $(REPORTDIR)
+ $(ROBOT) report -i $< $(REPORT_LABEL) $(REPORT_PROFILE_OPTS) --fail-on $(REPORT_FAIL_ON) --print 5 -o $@
+
+check_for_robot_updates:
+ @cut -f2 "/tools/templates/src/ontology/profile.txt" | sort > $(TMPDIR)/sorted_tsv2.txt
+ @cut -f2 "$(ROBOT_PROFILE)" | sort > $(TMPDIR)/sorted_tsv1.txt
+ @comm -23 $(TMPDIR)/sorted_tsv2.txt $(TMPDIR)/sorted_tsv1.txt > $(TMPDIR)/missing.txt
+ @echo "Missing tests:"
+ @cat $(TMPDIR)/missing.txt
+ @rm $(TMPDIR)/sorted_tsv1.txt $(TMPDIR)/sorted_tsv2.txt $(TMPDIR)/missing.txt $(TMPDIR)/report_profile_robot.txt
+
+# ----------------------------------------
+# Release assets
+# ----------------------------------------
+
+ASSETS = \
+ $(IMPORT_FILES) \
+ $(MAIN_FILES) \
+ $(REPORT_FILES) \
+ $(SUBSET_FILES) \
+ $(MAPPING_FILES)
+
+RELEASE_ASSETS = \
+ $(MAIN_FILES) \
+ $(SUBSET_FILES)
+
+.PHONY: all_assets
+all_assets: $(ASSETS) check_rdfxml_assets
+
+.PHONY: show_assets
+show_assets:
+ echo $(ASSETS)
+ du -sh $(ASSETS)
+
+check_rdfxml_%: %
+ @check-rdfxml $<
+
+.PHONY: check_rdfxml_assets
+check_rdfxml_assets: $(foreach product,$(MAIN_PRODUCTS),check_rdfxml_$(product).owl)
+
+# ----------------------------------------
+# Release Management
+# ----------------------------------------
+
+CLEANFILES=$(MAIN_FILES) $(SRCMERGED) $(EDIT_PREPROCESSED)
+
+# This should be executed by the release manager whenever time comes to make a release.
+# It will ensure that all assets/files are fresh, and will copy to release folder
+.PHONY: prepare_release
+prepare_release: all_odk
+ $(MAKE) copy_release_files
+ rm -f $(CLEANFILES)
+ @echo "Release files are now in $(RELEASEDIR) - now you should commit, push and make a release \
+ on your git hosting site such as GitHub or GitLab"
+
+.PHONY: prepare_release_fast
+prepare_release_fast:
+ $(MAKE) prepare_release IMP=false PAT=false MIR=false COMP=false
+
+# This rule does the bulk of the work for prepare_release, copying all
+# files to the release directory. It is mostly intended for internal
+# use, by the prepare_release rule itself or by other ODK scripts.
+.PHONY: copy_release_files
+copy_release_files:
+ rsync -R $(RELEASE_ASSETS) $(RELEASEDIR)
+
+# All released assets, in their final location within the release
+RELEASE_ASSETS_AFTER_RELEASE=$(foreach n,$(RELEASE_ASSETS), $(RELEASEDIR)/$(n))
+
+.PHONY: show_release_assets
+show_release_assets:
+ @echo $(RELEASE_ASSETS_AFTER_RELEASE)
+
+CURRENT_RELEASE=$(ONTBASE).owl
+
+$(TMPDIR)/current-release.owl:
+ wget $(CURRENT_RELEASE) -O $@
+
+$(REPORTDIR)/release-diff.md: $(ONT).owl $(TMPDIR)/current-release.owl
+ $(ROBOT) diff --labels true --left $(TMPDIR)/current-release.owl --right $(ONT).owl -f markdown -o $@
+
+# ------------------------
+# Imports: Seeding system
+# ------------------------
+
+# pre_seed.txt contains all entities referenced from the -edit file
+# and its components
+PRESEED=$(TMPDIR)/pre_seed.txt
+$(PRESEED): $(SRCMERGED)
+ $(ROBOT) query --input $< --format --csv \
+ --query $(SPARQLDIR)/terms.sparql $@
+
+$(SRCMERGED): $(EDIT_PREPROCESSED) $(OTHER_SRC)
+ $(ROBOT) remove --input $< --select imports --trim false \
+ merge $(foreach src, $(OTHER_SRC), --input $(src)) \
+ --output $@
+
+$(EDIT_PREPROCESSED): $(SRC)
+ $(ROBOT) convert --input $< --format ofn --output $@
+
+# seed.txt contains all entities to import in addition to those defined
+# in the individual _terms.txt files.
+IMPORTSEED = $(TMPDIR)/seed.txt
+$(IMPORTSEED): $(PRESEED) | $(TMPDIR)
+ cat $^ | sort | uniq > $@
+
+T_IMPORTSEED = --term-file $(IMPORTSEED)
+
+ANNOTATION_PROPERTIES=rdfs:label IAO:0000115 OMO:0002000
+
+# ----------------------------------------
+# Import modules
+# ----------------------------------------
+# Most ontologies are modularly constructed using portions of other ontologies
+# These live in the imports/ folder
+# This pattern uses ROBOT to generate an import module
+
+ifeq ($(IMP),true)
+
+ALL_TERMS = $(foreach imp, $(IMPORTS), $(IMPORTDIR)/$(imp)_terms.txt)
+
+$(IMPORTDIR)/merged_import.owl: $(MIRRORDIR)/merged.owl $(ALL_TERMS) \
+ $(IMPORTSEED) | all_robot_plugins
+ $(ROBOT) merge --input $< \
+ extract $(foreach f, $(ALL_TERMS), --term-file $(f)) $(T_IMPORTSEED) \
+ --force true --copy-ontology-annotations false \
+ --individuals include \
+ --method BOT \
+ remove $(foreach p, $(ANNOTATION_PROPERTIES), --term $(p)) \
+ $(foreach f, $(ALL_TERMS), --term-file $(f)) $(T_IMPORTSEED) \
+ --select complement --select annotation-properties \
+ odk:normalize --base-iri http://purl.obolibrary.org/obo \
+ --subset-decls true --synonym-decls true \
+ repair --merge-axiom-annotations true \
+ $(ANNOTATE_CONVERT_FILE)
+
+endif # IMP=true
+
+.PHONY: refresh-imports
+refresh-imports:
+ $(MAKE) IMP=true MIR=true PAT=false IMP_LARGE=true clean all_imports
+
+.PHONY: no-mirror-refresh-imports
+no-mirror-refresh-imports:
+ $(MAKE) --assume-new=$(SRC) \
+ $(foreach imp,$(IMPORTS),--assume-new=$(IMPORTDIR)/$(imp)_terms.txt) \
+ IMP=true MIR=false PAT=false IMP_LARGE=true all_imports
+
+.PHONY: refresh-imports-excluding-large
+refresh-imports-excluding-large:
+ $(MAKE) IMP=true MIR=true PAT=false IMP_LARGE=false clean all_imports
+
+.PHONY: refresh-%
+refresh-%:
+ $(MAKE) --assume-new=$(SRC) --assume-new=$(IMPORTDIR)/$*_terms.txt \
+ IMP=true IMP_LARGE=true MIR=true PAT=false $(IMPORTDIR)/$*_import.owl
+
+.PHONY: no-mirror-refresh-%
+no-mirror-refresh-%:
+ $(MAKE) --assume-new=$(SRC) --assume-new=$(IMPORTDIR)/$*_terms.txt \
+ IMP=true IMP_LARGE=true MIR=false PAT=false $(IMPORTDIR)/$*_import.owl
+
+# ----------------------------------------
+# Mirroring upstream ontologies
+# ----------------------------------------
+
+ifeq ($(MIR),true)
+
+
+## ONTOLOGY: iao
+.PHONY: mirror-iao
+.PRECIOUS: $(MIRRORDIR)/iao.owl
+mirror-iao: | $(TMPDIR)
+ curl -L $(OBOBASE)/iao.owl --create-dirs -o $(TMPDIR)/iao-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) convert -i $(TMPDIR)/iao-download.owl -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: cl
+.PHONY: mirror-cl
+.PRECIOUS: $(MIRRORDIR)/cl.owl
+mirror-cl: | $(TMPDIR)
+ curl -L $(OBOBASE)/cl/cl-base.owl --create-dirs -o $(TMPDIR)/cl-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) convert -i $(TMPDIR)/cl-download.owl -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: obi
+.PHONY: mirror-obi
+.PRECIOUS: $(MIRRORDIR)/obi.owl
+mirror-obi: | $(TMPDIR)
+ curl -L $(OBOBASE)/obi/obi-base.owl --create-dirs -o $(TMPDIR)/obi-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) convert -i $(TMPDIR)/obi-download.owl -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: chebi
+.PHONY: mirror-chebi
+.PRECIOUS: $(MIRRORDIR)/chebi.owl
+ifeq ($(IMP_LARGE),true)
+mirror-chebi: | $(TMPDIR)
+ $(ROBOT) convert -I https://raw.githubusercontent.com/obophenotype/chebi_obo_slim/refs/heads/main/chebi_slim.owl -o $(TMPDIR)/$@.owl
+endif
+
+
+## ONTOLOGY: duo
+.PHONY: mirror-duo
+.PRECIOUS: $(MIRRORDIR)/duo.owl
+mirror-duo: | $(TMPDIR)
+ curl -L $(OBOBASE)/duo.owl --create-dirs -o $(TMPDIR)/duo-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) remove -i $(TMPDIR)/duo-download.owl --base-iri http://purl.obolibrary.org/obo/DUO --axioms external --preserve-structure false --trim false -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: ro
+.PHONY: mirror-ro
+.PRECIOUS: $(MIRRORDIR)/ro.owl
+mirror-ro: | $(TMPDIR)
+ curl -L $(OBOBASE)/ro/ro-base.owl --create-dirs -o $(TMPDIR)/ro-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) convert -i $(TMPDIR)/ro-download.owl -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: nmrCV
+.PHONY: mirror-nmrCV
+.PRECIOUS: $(MIRRORDIR)/nmrCV.owl
+mirror-nmrCV: | $(TMPDIR)
+ $(ROBOT) remove -I http://nmrml.org/cv/v1.1.0/nmrCV.owl --base-iri http://nmrML.org/nmrCV# --axioms external --preserve-structure false --trim false -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: chmo
+.PHONY: mirror-chmo
+.PRECIOUS: $(MIRRORDIR)/chmo.owl
+mirror-chmo: | $(TMPDIR)
+ curl -L $(OBOBASE)/chmo/chmo-base.owl --create-dirs -o $(TMPDIR)/chmo-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) convert -i $(TMPDIR)/chmo-download.owl -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: go
+.PHONY: mirror-go
+.PRECIOUS: $(MIRRORDIR)/go.owl
+mirror-go: | $(TMPDIR)
+ curl -L $(OBOBASE)/go/go-base.owl --create-dirs -o $(TMPDIR)/go-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) convert -i $(TMPDIR)/go-download.owl -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: ms
+.PHONY: mirror-ms
+.PRECIOUS: $(MIRRORDIR)/ms.owl
+mirror-ms: | $(TMPDIR)
+ curl -L $(OBOBASE)/ms.owl --create-dirs -o $(TMPDIR)/ms-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) remove -i $(TMPDIR)/ms-download.owl --base-iri http://purl.obolibrary.org/obo/MS_ --axioms external --preserve-structure false --trim false -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: ncbitaxon
+.PHONY: mirror-ncbitaxon
+.PRECIOUS: $(MIRRORDIR)/ncbitaxon.owl
+mirror-ncbitaxon: | $(TMPDIR)
+ $(ROBOT) convert -I http://purl.obolibrary.org/obo/ncbitaxon/subsets/taxslim.owl -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: pato
+.PHONY: mirror-pato
+.PRECIOUS: $(MIRRORDIR)/pato.owl
+mirror-pato: | $(TMPDIR)
+ curl -L $(OBOBASE)/pato/pato-base.owl --create-dirs -o $(TMPDIR)/pato-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) convert -i $(TMPDIR)/pato-download.owl -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: uo
+.PHONY: mirror-uo
+.PRECIOUS: $(MIRRORDIR)/uo.owl
+mirror-uo: | $(TMPDIR)
+ curl -L $(OBOBASE)/uo.owl --create-dirs -o $(TMPDIR)/uo-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) remove -i $(TMPDIR)/uo-download.owl --base-iri http://purl.obolibrary.org/obo/UO --axioms external --preserve-structure false --trim false -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: ogms
+.PHONY: mirror-ogms
+.PRECIOUS: $(MIRRORDIR)/ogms.owl
+mirror-ogms: | $(TMPDIR)
+ curl -L $(OBOBASE)/ogms.owl --create-dirs -o $(TMPDIR)/ogms-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) remove -i $(TMPDIR)/ogms-download.owl --base-iri http://purl.obolibrary.org/obo/OGMS --axioms external --preserve-structure false --trim false -o $(TMPDIR)/$@.owl
+
+
+## ONTOLOGY: pr
+.PHONY: mirror-pr
+.PRECIOUS: $(MIRRORDIR)/pr.owl
+ifeq ($(IMP_LARGE),true)
+mirror-pr: | $(TMPDIR)
+ $(ROBOT) remove -I https://raw.githubusercontent.com/obophenotype/pro_obo_slim/master/pr_slim.owl --base-iri http://purl.obolibrary.org/obo/PR --axioms external --preserve-structure false --trim false -o $(TMPDIR)/$@.owl
+endif
+
+
+## ONTOLOGY: so
+.PHONY: mirror-so
+.PRECIOUS: $(MIRRORDIR)/so.owl
+mirror-so: | $(TMPDIR)
+ curl -L $(OBOBASE)/so.owl --create-dirs -o $(TMPDIR)/so-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) remove -i $(TMPDIR)/so-download.owl --base-iri http://purl.obolibrary.org/obo/SO --axioms external --preserve-structure false --trim false -o $(TMPDIR)/$@.owl
+
+ALL_MIRRORS = $(patsubst %, $(MIRRORDIR)/%.owl, $(IMPORTS))
+MERGE_MIRRORS = true
+
+ifeq ($(MERGE_MIRRORS),true)
+$(MIRRORDIR)/merged.owl: $(ALL_MIRRORS)
+ $(ROBOT) merge $(patsubst %, -i %, $^) -o $@
+.PRECIOUS: $(MIRRORDIR)/merged.owl
+endif
+
+
+$(MIRRORDIR)/%.owl: mirror-% | $(MIRRORDIR)
+ if [ -f $(TMPDIR)/mirror-$*.owl ]; then if cmp -s $(TMPDIR)/mirror-$*.owl $@ ; then echo "Mirror identical, ignoring."; else echo "Mirrors different, updating." &&\
+ cp $(TMPDIR)/mirror-$*.owl $@; fi; fi
+
+endif # MIR=true
+
+
+
+# ----------------------------------------
+# Subsets
+# ----------------------------------------
+$(SUBSETDIR)/%.tsv: $(SUBSETDIR)/%.owl
+ $(ROBOT) export -i $< --include classes \
+ --header "ID [IRI]|LABEL" --format tsv --export $@
+.PRECIOUS: $(SUBSETDIR)/%.tsv
+
+$(SUBSETDIR)/%.owl: $(ONT).owl | $(SUBSETDIR) all_robot_plugins
+ $(ROBOT) odk:subset -i $< --subset $* --fill-gaps true \
+ annotate --ontology-iri $(ONTBASE)/$@ $(ANNOTATE_ONTOLOGY_VERSION) -o $@
+.PRECIOUS: $(SUBSETDIR)/%.owl
+
+
+$(SUBSETDIR)/%.obo: $(SUBSETDIR)/%.owl
+ $(ROBOT) convert --input $< --check false -f obo $(OBO_FORMAT_OPTIONS) -o $@
+
+$(SUBSETDIR)/%.json: $(SUBSETDIR)/%.owl
+ $(ROBOT) convert --input $< --check false -f json -o $@.tmp.json &&\
+ mv $@.tmp.json $@
+
+
+# ---------------------------------------------
+# Sparql queries: Table exports / Query Reports
+# ---------------------------------------------
+
+SPARQL_EXPORTS_ARGS = $(foreach V,$(SPARQL_EXPORTS),-s $(SPARQLDIR)/$(V).sparql $(REPORTDIR)/$(V).tsv)
+# This combines all into one single command
+
+.PHONY: custom_reports
+custom_reports: $(EDIT_PREPROCESSED) | $(REPORTDIR)
+ifneq ($(SPARQL_EXPORTS_ARGS),)
+ $(ROBOT) query -f tsv --use-graphs true -i $< $(SPARQL_EXPORTS_ARGS)
+endif
+
+# ----------------------------------------
+# Release artefacts: export formats
+# ----------------------------------------
+
+
+$(ONT)-full.obo: $(ONT)-full.owl
+ $(ROBOT) convert --input $< --check false -f obo $(OBO_FORMAT_OPTIONS) -o $@
+$(ONT)-full.json: $(ONT)-full.owl
+ $(ROBOT) annotate --input $< --ontology-iri $(ONTBASE)/$@ $(ANNOTATE_ONTOLOGY_VERSION) \
+ convert --check false -f json -o $@.tmp.json &&\
+ mv $@.tmp.json $@
+$(ONT)-base.obo: $(ONT)-base.owl
+ $(ROBOT) convert --input $< --check false -f obo $(OBO_FORMAT_OPTIONS) -o $@
+$(ONT)-base.json: $(ONT)-base.owl
+ $(ROBOT) annotate --input $< --ontology-iri $(ONTBASE)/$@ $(ANNOTATE_ONTOLOGY_VERSION) \
+ convert --check false -f json -o $@.tmp.json &&\
+ mv $@.tmp.json $@
+# ----------------------------------------
+# Release artefacts: main release artefacts
+# ----------------------------------------
+
+$(ONT).owl: $(ONT)-full.owl
+ $(ROBOT) annotate --input $< --ontology-iri $(URIBASE)/$@ $(ANNOTATE_ONTOLOGY_VERSION) \
+ convert -o $@.tmp.owl && mv $@.tmp.owl $@
+
+$(ONT).obo: $(ONT).owl
+ $(ROBOT) convert --input $< --check false -f obo $(OBO_FORMAT_OPTIONS) -o $@
+$(ONT).json: $(ONT).owl
+ $(ROBOT) annotate --input $< --ontology-iri $(URIBASE)/$@ $(ANNOTATE_ONTOLOGY_VERSION) \
+ convert --check false -f json -o $@.tmp.json &&\
+ mv $@.tmp.json $@
+# -----------------------------------------------------
+# Release artefacts: variants (base, full, simple, etc)
+# -----------------------------------------------------
+SHARED_ROBOT_COMMANDS =
+
+$(ONTOLOGYTERMS): $(SRCMERGED)
+ $(ROBOT) query -f csv -i $< --query ../sparql/msio_terms.sparql $@
+
+# ROBOT pipeline that merges imports, including components.
+ROBOT_RELEASE_IMPORT_MODE=$(ROBOT) merge --input $<
+
+# ROBOT pipeline that removes imports, then merges components. This is for release artefacts that start from "base"
+ROBOT_RELEASE_IMPORT_MODE_BASE=$(ROBOT) remove --input $< --select imports --trim false merge $(patsubst %, -i %, $(OTHER_SRC))
+
+# base: A version of the ontology that does not include any externally imported axioms.
+$(ONT)-base.owl: $(EDIT_PREPROCESSED) $(OTHER_SRC) $(IMPORT_FILES)
+ $(ROBOT_RELEASE_IMPORT_MODE) \
+ reason --reasoner $(REASONER) --equivalent-classes-allowed asserted-only --exclude-tautologies structural --annotate-inferred-axioms false \
+ relax $(RELAX_OPTIONS) \
+ reduce -r $(REASONER) $(REDUCE_OPTIONS) \
+ remove --base-iri $(URIBASE)/MSIO --axioms external --preserve-structure false --trim false \
+ $(SHARED_ROBOT_COMMANDS) \
+ annotate --link-annotation http://purl.org/dc/elements/1.1/type http://purl.obolibrary.org/obo/IAO_8000001 \
+ --ontology-iri $(ONTBASE)/$@ $(ANNOTATE_ONTOLOGY_VERSION) \
+ --output $@.tmp.owl && mv $@.tmp.owl $@
+# Full: The full artefacts with imports merged, reasoned.
+$(ONT)-full.owl: $(EDIT_PREPROCESSED) $(OTHER_SRC) $(IMPORT_FILES)
+ $(ROBOT_RELEASE_IMPORT_MODE) \
+ reason --reasoner $(REASONER) --equivalent-classes-allowed asserted-only --exclude-tautologies structural \
+ relax $(RELAX_OPTIONS) \
+ reduce -r $(REASONER) $(REDUCE_OPTIONS) \
+ $(SHARED_ROBOT_COMMANDS) annotate --ontology-iri $(ONTBASE)/$@ $(ANNOTATE_ONTOLOGY_VERSION) --output $@.tmp.owl && mv $@.tmp.owl $@
+# ----------------------------------------
+# Debugging Tools
+# ----------------------------------------
+
+explain_unsat: $(EDIT_PREPROCESSED)
+ $(ROBOT) explain -i $< -M unsatisfiability --unsatisfiable random:10 --explanation $(TMPDIR)/$@.md
+
+
+
+GHVERSION=v$(VERSION)
+
+.PHONY: public_release
+public_release:
+ @test $(GHVERSION)
+ ls -alt $(RELEASE_ASSETS_AFTER_RELEASE)
+ gh release create $(GHVERSION) --title "$(VERSION) Release" --draft $(RELEASE_ASSETS_AFTER_RELEASE) --generate-notes
+
+# ----------------------------------------
+# General Validation
+# ----------------------------------------
+TSV=
+ALL_TSV_FILES=
+
+validate-tsv: $(TSV) | $(TMPDIR)
+ for FILE in $< ; do \
+ tsvalid $$FILE > $(TMPDIR)/validate.txt; \
+ if [ -s $(TMPDIR)/validate.txt ]; then cat $(TMPDIR)/validate.txt && exit 1; fi ; \
+ done
+
+validate-all-tsv: $(ALL_TSV_FILES)
+ $(MAKE) validate-tsv TSV="$^"
+
+# ----------------------------------------
+# Editors Utilities
+# ----------------------------------------
+
+# This is an experimental target people that want to use ODK Extended Prefix Map (EPM)
+# can use to pull the (currently inofficial) OBO EPM into the workspace.
+# Users are instructed to refer to the EPM only through the variable $(EXTENDED_PREFIX_MAP) as
+# its location might change in a feature version of ODK.
+$(EXTENDED_PREFIX_MAP): /tools/obo.epm.json
+ cp $< $@
+
+
+
+.PHONY: normalize_src
+normalize_src: $(SRC)
+ $(ROBOT) convert -i $< -f ofn -o $(TMPDIR)/normalise && mv $(TMPDIR)/normalise $<
+
+.PHONY: validate_idranges
+validate_idranges:
+ if [ -f msio-idranges.owl ]; then \
+ dicer-cli policy --assume-manchester --show-owlapi-error msio-idranges.owl ; \
+ fi
+
+# Deprecated: Use 'sh run.sh odk.py update' without using the Makefile.
+.PHONY: update_repo
+update_repo:
+ odk.py update
+
+
+
+# Note to future generations: computing the real path relative to the
+# current directory is a way to ensure we only clean up directories that
+# are located below the current directory, regardless of the contents of
+# the *DIR variables.
+.PHONY: clean
+clean:
+ for dir in $(MIRRORDIR) $(TMPDIR) $(UPDATEREPODIR) ; do \
+ reldir=$$(realpath --relative-to=$$(pwd) $$dir) ; \
+ case $$reldir in .*|"") ;; *) rm -rf $$reldir/* ;; esac \
+ done
+ rm -f $(CLEANFILES)
+
+.PHONY: help
+help:
+ @echo "$$data"
+
+define data
+Usage: [IMAGE=(odklite|odkfull)] [ODK_DEBUG=yes] sh run.sh make [(IMP|MIR|IMP_LARGE|PAT)=(false|true)] command
+
+----------------------------------------
+ Command reference
+----------------------------------------
+
+Core commands:
+* prepare_release: Run the entire release pipeline. Use make IMP=false prepare_release to avoid rerunning the imports
+* prepare_release_fast: Run the entire release pipeline without refreshing imports, recreating components or recompiling patterns.
+* update_repo: Update the ODK repository setup using the config file msio-odk.yaml (DEPRECATED)
+* test: Running all validation tests
+* test_fast: Runs the test suite, but without updating imports or components
+* odkversion: Show the current version of the ODK Makefile and ROBOT.
+* clean: Delete all temporary files
+* help: Print ODK Usage information
+* public_release: Uploads the release file to a release management system, such as GitHub releases. Must be configured.
+
+
+Imports management:
+* refresh-imports: Refresh all imports and mirrors.
+* recreate-components: Recreate all components.
+* no-mirror-refresh-imports: Refresh all imports without downloading mirrors.
+* refresh-imports-excluding-large: Refresh all imports and mirrors, but skipping the ones labelled as 'is_large'.
+* refresh-%: Refresh a single import, i.e. refresh-go will refresh 'imports/go_import.owl'.
+* no-mirror-refresh-%: Refresh a single import without updating the mirror, i.e. refresh-go will refresh 'imports/go_import.owl'.
+* mirror-%: Refresh a single mirror.
+
+Editor utilities:
+* validate_idranges: Make sure your ID ranges file is formatted correctly
+* normalize_src: Load and save your msio-edit file after you to make sure its serialised correctly
+* explain_unsat: If you have unsatisfiable classes, this command will create a markdown file (tmp/explain_unsat.md) which will explain all your unsatisfiable classes
+* validate-all-tsv: Check all your tsv files for possible problems in syntax. Use ALL_TSV_FILES variable to list files
+* validate-tsv: Check a tsv file for syntactic problems with tsvalid. Use TSV variable to pass filepath, e.g. make TSV=../my.tsv validate-tsv.
+* release_diff: Create a diff between the current release and the new release
+
+Additional build commands (advanced users)
+* all: Run the entire pipeline (like prepare_release), but without copying the release files to the release directory.
+* all_subsets: Build all subsets
+* custom_reports: Generate all custom sparql reports you have configured in your msio-odk.yaml file.
+* all_assets: Build all assets
+* show_assets: Print a list of all assets that would be build by the release pipeline
+* all_mappings: Update all SSSOM mapping sets
+
+Additional QC commands (advanced users)
+* robot_reports: Run all configured ROBOT reports
+* validate_profile_%: Run an OWL2 DL profile validation check, for example validate_profile_msio-edit.owl.
+* reason_test: Run a basic reasoning test
+
+Examples:
+* sh run.sh make IMP=false prepare_release
+* sh run.sh make test
+
+Tricks:
+* To forcefully rebuild a target even if nothing has changed, either
+ invoke the 'clean' target (which will wipe out intermediate files)
+ or touch a file that your target depends on (typically the -edit file).
+* Use the IMAGE parameter to the run.sh script to use a different image like odklite
+* Use ODK_DEBUG=yes sh run.sh make ... to print information about timing and debugging
+
+Updating the repository:
+(to apply changes to the ODK configuration or switch to a newer ODK version)
+* sh run.sh update_repo
+
+endef
+export data
+
+include msio.Makefile
\ No newline at end of file
diff --git a/src/ontology/README-editors.md b/src/ontology/README-editors.md
new file mode 100644
index 0000000..9c84a53
--- /dev/null
+++ b/src/ontology/README-editors.md
@@ -0,0 +1,27 @@
+These notes are for the EDITORS of msio
+
+This project was created using the [ontology development kit](https://github.com/INCATools/ontology-development-kit). See the site for details.
+
+For more details on ontology management, please see the
+[OBO Academy Tutorials](https://oboacademy.github.io/obook/), the
+[OBO tutorial](https://github.com/jamesaoverton/obo-tutorial) or the [Gene Ontology Editors Tutorial](https://go-protege-tutorial.readthedocs.io/en/latest/)
+
+This documentation has been superceded by the ODK automatic documentation, which you can
+activate by adding:
+
+```
+documentation:
+ documentation_system: mkdocs
+```
+
+to your Makefile and running:
+
+```
+sh run.sh make update_repo
+```
+(Unix)
+
+```
+run.bat make update_repo
+```
+(Windows)
\ No newline at end of file
diff --git a/src/ontology/catalog-v001.xml b/src/ontology/catalog-v001.xml
new file mode 100644
index 0000000..58525ae
--- /dev/null
+++ b/src/ontology/catalog-v001.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/ontology/imports/chebi_terms.txt b/src/ontology/imports/chebi_terms.txt
new file mode 100644
index 0000000..d8847e2
--- /dev/null
+++ b/src/ontology/imports/chebi_terms.txt
@@ -0,0 +1,52 @@
+http://purl.obolibrary.org/obo/CHEBI_23367
+http://purl.obolibrary.org/obo/CHEBI_24431
+http://purl.obolibrary.org/obo/CHEBI_33839
+http://purl.obolibrary.org/obo/CHEBI_33696
+http://purl.obolibrary.org/obo/CHEBI_18059
+http://purl.obolibrary.org/obo/CHEBI_24432
+http://purl.obolibrary.org/obo/CHEBI_52206
+http://purl.obolibrary.org/obo/CHEBI_28659
+http://purl.obolibrary.org/obo/CHEBI_15377
+http://purl.obolibrary.org/obo/CHEBI_16991
+http://purl.obolibrary.org/obo/CHEBI_16670
+http://purl.obolibrary.org/obo/CHEBI_33250
+http://purl.obolibrary.org/obo/CHEBI_33697
+http://purl.obolibrary.org/obo/CHEBI_25212
+http://purl.obolibrary.org/obo/CHEBI_15956
+http://purl.obolibrary.org/obo/CHEBI_16134
+http://purl.obolibrary.org/obo/CHEBI_16227
+http://purl.obolibrary.org/obo/CHEBI_16737
+http://purl.obolibrary.org/obo/CHEBI_17137
+http://purl.obolibrary.org/obo/CHEBI_23116
+http://purl.obolibrary.org/obo/CHEBI_24913
+http://purl.obolibrary.org/obo/CHEBI_26078
+http://purl.obolibrary.org/obo/CHEBI_29236
+http://purl.obolibrary.org/obo/CHEBI_29237
+http://purl.obolibrary.org/obo/CHEBI_32954
+http://purl.obolibrary.org/obo/CHEBI_33819
+http://purl.obolibrary.org/obo/CHEBI_34856
+http://purl.obolibrary.org/obo/CHEBI_35255
+http://purl.obolibrary.org/obo/CHEBI_35895
+http://purl.obolibrary.org/obo/CHEBI_36601
+http://purl.obolibrary.org/obo/CHEBI_36928
+http://purl.obolibrary.org/obo/CHEBI_36931
+http://purl.obolibrary.org/obo/CHEBI_36934
+http://purl.obolibrary.org/obo/CHEBI_36938
+http://purl.obolibrary.org/obo/CHEBI_36940
+http://purl.obolibrary.org/obo/CHEBI_37968
+http://purl.obolibrary.org/obo/CHEBI_37971
+http://purl.obolibrary.org/obo/CHEBI_37974
+http://purl.obolibrary.org/obo/CHEBI_38472
+http://purl.obolibrary.org/obo/CHEBI_38589
+http://purl.obolibrary.org/obo/CHEBI_41981
+http://purl.obolibrary.org/obo/CHEBI_46324
+http://purl.obolibrary.org/obo/CHEBI_47032
+http://purl.obolibrary.org/obo/CHEBI_4705
+http://purl.obolibrary.org/obo/CHEBI_52451
+http://purl.obolibrary.org/obo/CHEBI_52634
+http://purl.obolibrary.org/obo/CHEBI_55317
+http://purl.obolibrary.org/obo/CHEBI_5692
+http://purl.obolibrary.org/obo/CHEBI_63005
+http://purl.obolibrary.org/obo/CHEBI_72544
+http://purl.obolibrary.org/obo/CHEBI_77701
+http://purl.obolibrary.org/obo/CHEBI_85060
\ No newline at end of file
diff --git a/src/ontology/imports/chmo_terms.txt b/src/ontology/imports/chmo_terms.txt
new file mode 100644
index 0000000..ad82a24
--- /dev/null
+++ b/src/ontology/imports/chmo_terms.txt
@@ -0,0 +1,42 @@
+http://purl.obolibrary.org/obo/CHMO_0000228
+http://purl.obolibrary.org/obo/CHMO_0000470
+http://purl.obolibrary.org/obo/CHMO_0000506
+http://purl.obolibrary.org/obo/CHMO_0001806
+http://purl.obolibrary.org/obo/CHMO_0001215
+http://purl.obolibrary.org/obo/CHMO_0000591
+http://purl.obolibrary.org/obo/CHMO_0000613
+http://purl.obolibrary.org/obo/CHMO_0000598
+http://purl.obolibrary.org/obo/CHMO_0000931
+http://purl.obolibrary.org/obo/CHMO_0001841
+http://purl.obolibrary.org/obo/CHMO_0000718
+http://purl.obolibrary.org/obo/CHMO_0000599
+http://purl.obolibrary.org/obo/CHMO_0001844
+http://purl.obolibrary.org/obo/CHMO_0001864
+http://purl.obolibrary.org/obo/CHMO_0000600
+http://purl.obolibrary.org/obo/CHMO_0000592
+http://purl.obolibrary.org/obo/CHMO_0000575
+http://purl.obolibrary.org/obo/CHMO_0000497
+http://purl.obolibrary.org/obo/CHMO_0000514
+http://purl.obolibrary.org/obo/CHMO_0000524
+http://purl.obolibrary.org/obo/CHMO_0000571
+http://purl.obolibrary.org/obo/CHMO_0000593
+http://purl.obolibrary.org/obo/CHMO_0000595
+http://purl.obolibrary.org/obo/CHMO_0000605
+http://purl.obolibrary.org/obo/CHMO_0000606
+http://purl.obolibrary.org/obo/CHMO_0000607
+http://purl.obolibrary.org/obo/CHMO_0000719
+http://purl.obolibrary.org/obo/CHMO_0001150
+http://purl.obolibrary.org/obo/CHMO_0001195
+http://purl.obolibrary.org/obo/CHMO_0001852
+http://purl.obolibrary.org/obo/CHMO_0001862
+http://purl.obolibrary.org/obo/CHMO_0001863
+http://purl.obolibrary.org/obo/CHMO_0001865
+http://purl.obolibrary.org/obo/CHMO_0001866
+http://purl.obolibrary.org/obo/CHMO_0001867
+http://purl.obolibrary.org/obo/CHMO_0001868
+http://purl.obolibrary.org/obo/CHMO_0001869
+http://purl.obolibrary.org/obo/CHMO_0002060
+http://purl.obolibrary.org/obo/CHMO_0002301
+http://purl.obolibrary.org/obo/CHMO_0002380
+http://purl.obolibrary.org/obo/CHMO_0002442
+http://purl.obolibrary.org/obo/CHMO_0002867
\ No newline at end of file
diff --git a/src/ontology/imports/cl_terms.txt b/src/ontology/imports/cl_terms.txt
new file mode 100644
index 0000000..3a08965
--- /dev/null
+++ b/src/ontology/imports/cl_terms.txt
@@ -0,0 +1,3 @@
+http://purl.obolibrary.org/obo/CL_0000000
+http://purl.obolibrary.org/obo/CL_0000578
+http://purl.obolibrary.org/obo/CL_0000010
\ No newline at end of file
diff --git a/src/ontology/imports/duo_terms.txt b/src/ontology/imports/duo_terms.txt
new file mode 100644
index 0000000..68f26bd
--- /dev/null
+++ b/src/ontology/imports/duo_terms.txt
@@ -0,0 +1,25 @@
+http://purl.obolibrary.org/obo/DUO_0000001
+http://purl.obolibrary.org/obo/DUO_0000002
+http://purl.obolibrary.org/obo/DUO_0000003
+http://purl.obolibrary.org/obo/DUO_0000017
+http://purl.obolibrary.org/obo/DUO_0000010
+http://purl.obolibrary.org/obo/DUO_0000004
+http://purl.obolibrary.org/obo/DUO_0000005
+http://purl.obolibrary.org/obo/DUO_0000006
+http://purl.obolibrary.org/obo/DUO_0000007
+http://purl.obolibrary.org/obo/DUO_0000011
+http://purl.obolibrary.org/obo/DUO_0000012
+http://purl.obolibrary.org/obo/DUO_0000014
+http://purl.obolibrary.org/obo/DUO_0000015
+http://purl.obolibrary.org/obo/DUO_0000016
+http://purl.obolibrary.org/obo/DUO_0000018
+http://purl.obolibrary.org/obo/DUO_0000019
+http://purl.obolibrary.org/obo/DUO_0000020
+http://purl.obolibrary.org/obo/DUO_0000021
+http://purl.obolibrary.org/obo/DUO_0000022
+http://purl.obolibrary.org/obo/DUO_0000024
+http://purl.obolibrary.org/obo/DUO_0000025
+http://purl.obolibrary.org/obo/DUO_0000026
+http://purl.obolibrary.org/obo/DUO_0000027
+http://purl.obolibrary.org/obo/DUO_0000028
+http://purl.obolibrary.org/obo/DUO_0000029
\ No newline at end of file
diff --git a/src/ontology/imports/gaz_terms.txt b/src/ontology/imports/gaz_terms.txt
new file mode 100644
index 0000000..cea9fac
--- /dev/null
+++ b/src/ontology/imports/gaz_terms.txt
@@ -0,0 +1 @@
+http://purl.obolibrary.org/obo/GAZ_00000448
diff --git a/src/ontology/imports/go_terms.txt b/src/ontology/imports/go_terms.txt
new file mode 100644
index 0000000..ec137aa
--- /dev/null
+++ b/src/ontology/imports/go_terms.txt
@@ -0,0 +1,5 @@
+http://purl.obolibrary.org/obo/GO_0003674
+http://purl.obolibrary.org/obo/GO_0008150
+http://purl.obolibrary.org/obo/GO_0043234
+http://purl.obolibrary.org/obo/GO_0003824
+http://purl.obolibrary.org/obo/GO_0010467
\ No newline at end of file
diff --git a/src/ontology/imports/iao_terms.txt b/src/ontology/imports/iao_terms.txt
new file mode 100644
index 0000000..ba61622
--- /dev/null
+++ b/src/ontology/imports/iao_terms.txt
@@ -0,0 +1,84 @@
+http://purl.obolibrary.org/obo/IAO_0000030
+http://purl.obolibrary.org/obo/IAO_0000027
+http://purl.obolibrary.org/obo/IAO_0000078
+http://purl.obolibrary.org/obo/IAO_0000102
+http://purl.obolibrary.org/obo/IAO_0000115
+http://purl.obolibrary.org/obo/IAO_0000232
+http://purl.obolibrary.org/obo/IAO_0000119
+http://purl.obolibrary.org/obo/IAO_0000111
+http://purl.obolibrary.org/obo/IAO_0000114
+http://purl.obolibrary.org/obo/IAO_0000117
+http://purl.obolibrary.org/obo/IAO_0000112
+http://purl.obolibrary.org/obo/IAO_0000116
+http://purl.obolibrary.org/obo/IAO_0000118
+http://purl.obolibrary.org/obo/IAO_0000412
+http://purl.obolibrary.org/obo/IAO_0000600
+http://purl.obolibrary.org/obo/IAO_0000601
+http://purl.obolibrary.org/obo/IAO_0000602
+http://purl.obolibrary.org/obo/IAO_0010000
+http://purl.obolibrary.org/obo/IAO_0000136
+http://purl.obolibrary.org/obo/IAO_0000221
+http://purl.obolibrary.org/obo/IAO_0000417
+http://purl.obolibrary.org/obo/IAO_0000009
+http://purl.obolibrary.org/obo/IAO_0000003
+http://purl.obolibrary.org/obo/IAO_0000109
+http://purl.obolibrary.org/obo/IAO_0000032
+http://purl.obolibrary.org/obo/IAO_0000033
+http://purl.obolibrary.org/obo/IAO_0000010
+http://purl.obolibrary.org/obo/IAO_0000104
+http://purl.obolibrary.org/obo/IAO_0000309
+http://purl.obolibrary.org/obo/IAO_0000308
+http://purl.obolibrary.org/obo/IAO_0000001
+http://purl.obolibrary.org/obo/IAO_0000028
+http://purl.obolibrary.org/obo/IAO_0000300
+http://purl.obolibrary.org/obo/IAO_0000400
+http://purl.obolibrary.org/obo/IAO_0000038
+http://purl.obolibrary.org/obo/IAO_0000100
+http://purl.obolibrary.org/obo/IAO_0000306
+http://purl.obolibrary.org/obo/IAO_0000578
+http://purl.obolibrary.org/obo/IAO_0000005
+http://purl.obolibrary.org/obo/IAO_0000573
+http://purl.obolibrary.org/obo/IAO_0000416
+http://purl.obolibrary.org/obo/IAO_0000582
+http://purl.obolibrary.org/obo/IAO_0000002
+http://purl.obolibrary.org/obo/IAO_0000120
+http://purl.obolibrary.org/obo/IAO_0000121
+http://purl.obolibrary.org/obo/IAO_0000122
+http://purl.obolibrary.org/obo/IAO_0000123
+http://purl.obolibrary.org/obo/IAO_0000124
+http://purl.obolibrary.org/obo/IAO_0000125
+http://purl.obolibrary.org/obo/IAO_0000423
+http://purl.obolibrary.org/obo/IAO_0000428
+http://purl.obolibrary.org/obo/IAO_0000064
+http://purl.obolibrary.org/obo/IAO_0000101
+http://purl.obolibrary.org/obo/IAO_0000226
+http://purl.obolibrary.org/obo/IAO_0000227
+http://purl.obolibrary.org/obo/IAO_0000228
+http://purl.obolibrary.org/obo/IAO_0000229
+http://purl.obolibrary.org/obo/IAO_0000039
+http://purl.obolibrary.org/obo/IAO_0000004
+http://purl.obolibrary.org/obo/IAO_0000219
+http://purl.obolibrary.org/obo/IAO_0000407
+http://purl.obolibrary.org/obo/IAO_0000404
+http://purl.obolibrary.org/obo/IAO_0000406
+http://purl.obolibrary.org/obo/IAO_0000413
+http://purl.obolibrary.org/obo/IAO_0000581
+http://purl.obolibrary.org/obo/IAO_0000583
+http://purl.obolibrary.org/obo/IAO_0000007
+http://purl.obolibrary.org/obo/IAO_0000310
+http://purl.obolibrary.org/obo/IAO_0000577
+http://purl.obolibrary.org/obo/IAO_0000579
+http://purl.obolibrary.org/obo/IAO_0000414
+http://purl.obolibrary.org/obo/IAO_0000572
+http://purl.obolibrary.org/obo/IAO_0000144
+http://purl.obolibrary.org/obo/IAO_0000055
+http://purl.obolibrary.org/obo/IAO_0000129
+http://purl.obolibrary.org/obo/IAO_0000401
+http://purl.obolibrary.org/obo/IAO_0000402
+http://purl.obolibrary.org/obo/IAO_0000584
+http://purl.obolibrary.org/obo/IAO_0000103
+http://purl.obolibrary.org/obo/IAO_0000224
+http://purl.obolibrary.org/obo/IAO_0000230
+http://purl.obolibrary.org/obo/IAO_0000410
+http://purl.obolibrary.org/obo/IAO_0000420
+http://purl.obolibrary.org/obo/IAO_0000421
\ No newline at end of file
diff --git a/src/ontology/imports/merged_import.owl b/src/ontology/imports/merged_import.owl
new file mode 100644
index 0000000..cd81f89
--- /dev/null
+++ b/src/ontology/imports/merged_import.owl
@@ -0,0 +1,30247 @@
+Prefix(:=)
+Prefix(owl:=)
+Prefix(rdf:=)
+Prefix(xml:=)
+Prefix(xsd:=)
+Prefix(rdfs:=)
+
+
+Ontology(
+
+Annotation(owl:versionInfo "2025-12-02")
+
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class(