From 3bc1981ffc29559e726957fb04e78b9b8fa05cec Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Mon, 22 Jun 2026 13:43:36 +0100 Subject: [PATCH 1/5] Exclude individuals from SLME merged import module. Including individuals in the merged import module causes a bunch of ENVO individuals representing mostly "ecoregions" to be added to FBbi, even though they have nothing to do here. --- src/ontology/fbbi-odk.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/ontology/fbbi-odk.yaml b/src/ontology/fbbi-odk.yaml index 217e9f3..d68af57 100644 --- a/src/ontology/fbbi-odk.yaml +++ b/src/ontology/fbbi-odk.yaml @@ -7,6 +7,7 @@ namespaces: - http://purl.obolibrary.org/obo/FBbi_ import_group: use_base_merging: true + slme_individuals: exclude products: - id: ro - id: omo From dec22846d00511fcb9b40876c002b09b7828ab4e Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Mon, 22 Jun 2026 14:03:56 +0100 Subject: [PATCH 2/5] Add ORCIDIO component. Add a component containing the ORCIDIO individuals representing the known contributors to the ontology. This requires forcing the ODK to use the latest version of the ODK ROBOT plugin. --- src/ontology/fbbi-odk.yaml | 7 +++++++ src/ontology/fbbi.Makefile | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/ontology/fbbi-odk.yaml b/src/ontology/fbbi-odk.yaml index d68af57..2a9a15c 100644 --- a/src/ontology/fbbi-odk.yaml +++ b/src/ontology/fbbi-odk.yaml @@ -5,6 +5,10 @@ documentation: documentation_system: mkdocs namespaces: - http://purl.obolibrary.org/obo/FBbi_ +robot_plugins: + plugins: + - name: odk + mirror_from: https://github.com/INCATools/odk-robot-plugin/releases/download/odk-robot-plugin-0.3.3/odk.jar import_group: use_base_merging: true slme_individuals: exclude @@ -12,6 +16,9 @@ import_group: - id: ro - id: omo - id: iao +components: + products: + - filename: orcidio.owl robot: reasoner: ELK repo: fbbi diff --git a/src/ontology/fbbi.Makefile b/src/ontology/fbbi.Makefile index a930223..2b83176 100644 --- a/src/ontology/fbbi.Makefile +++ b/src/ontology/fbbi.Makefile @@ -3,3 +3,10 @@ ## If you need to customize your Makefile, make ## changes here rather than in the main Makefile +# Automatically generate the orcidio component from ORCID references +# within the ontology. +# Of note, ODK 1.7 will have built-in support for this, so once ODK 1.7 +# is out we should replace this with the built-in feature. +$(COMPONENTSDIR)/orcidio.owl: $(TMPDIR)/stamp-component-%.owl $(SRCMERGED) | $(COMPONENTSDIR) all_robot_plugins + $(ROBOT) odk:extract-orcids -i $(SRCMERGED) \ + $(ANNOTATE_CONVERT_FILE) From 52559204d9f9711dbbefdd4820cf845f2ed8a4b9 Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Mon, 22 Jun 2026 14:06:07 +0100 Subject: [PATCH 3/5] Commit re-generated files. --- docs/odk-workflows/RepositoryFileStructure.md | 5 ++ src/ontology/Makefile | 49 +++++++++++++++++-- src/ontology/catalog-v001.xml | 1 + src/ontology/fbbi-edit.owl | 1 + 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/docs/odk-workflows/RepositoryFileStructure.md b/docs/odk-workflows/RepositoryFileStructure.md index bd788c2..3567404 100644 --- a/docs/odk-workflows/RepositoryFileStructure.md +++ b/docs/odk-workflows/RepositoryFileStructure.md @@ -26,3 +26,8 @@ Components, in contrast to imports, are considered full members of the ontology. 2. A part of the ontology is managed in ROBOT templates 3. The expressivity of the component is higher than the format of the edit file. For example, people still choose to manage their ontology in OBO format (they should not) missing out on a lot of owl features. They may choose to manage logic that is beyond OBO in a specific OWL component. +These are the components in FBBI + +| Filename | URL | +| -------- | --- | +| orcidio.owl | None | diff --git a/src/ontology/Makefile b/src/ontology/Makefile index 5823286..d3da4a6 100644 --- a/src/ontology/Makefile +++ b/src/ontology/Makefile @@ -10,7 +10,7 @@ # More information: https://github.com/INCATools/ontology-development-kit/ # Fingerprint of the configuration file when this Makefile was last generated -CONFIG_HASH= 2896ea1d0cc1ffaf7742742d22644a31d17bfe0a130e6e37dd4a9babf75985d3 +CONFIG_HASH= 298f0b177bd11c6df8f99fe6755aa350025828149603d6f6ac06eb3ee26ca76d # ---------------------------------------- @@ -57,7 +57,7 @@ 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 = +OTHER_SRC = $(COMPONENTSDIR)/orcidio.owl ONTOLOGYTERMS = $(TMPDIR)/ontologyterms.txt EDIT_PREPROCESSED = $(TMPDIR)/$(ONT)-preprocess.owl @@ -155,7 +155,7 @@ custom_robot_plugins: .PHONY: extra_robot_plugins -extra_robot_plugins: +extra_robot_plugins: $(ROBOT_PLUGINS_DIRECTORY)/odk.jar # Install all ROBOT plugins to the runtime plugins directory @@ -175,6 +175,9 @@ $(ROBOT_PLUGINS_DIRECTORY)/%.jar: # Specific rules for supplementary plugins defined in configuration +$(ROBOT_PLUGINS_DIRECTORY)/odk.jar: + curl -L -o $@ https://github.com/INCATools/odk-robot-plugin/releases/download/odk-robot-plugin-0.3.3/odk.jar + # ---------------------------------------- # Release assets @@ -407,7 +410,7 @@ $(IMPORTDIR)/merged_import.owl: $(MIRRORDIR)/merged.owl $(ALL_TERMS) \ $(ROBOT) merge --input $< \ extract $(foreach f, $(ALL_TERMS), --term-file $(f)) $(T_IMPORTSEED) \ --force true --copy-ontology-annotations false \ - --individuals include \ + --individuals exclude \ --method BOT \ remove $(foreach p, $(ANNOTATION_PROPERTIES), --term $(p)) \ $(foreach f, $(ALL_TERMS), --term-file $(f)) $(T_IMPORTSEED) \ @@ -443,6 +446,44 @@ no-mirror-refresh-%: $(MAKE) --assume-new=$(SRC) --assume-new=$(IMPORTDIR)/$*_terms.txt \ IMP=true IMP_LARGE=true MIR=false PAT=false $(IMPORTDIR)/$*_import.owl +# ---------------------------------------- +# Components +# ---------------------------------------- +# Some ontologies contain external and internal components. A component is included in the ontology in its entirety. + +ifeq ($(COMP),true) +.PHONY: all_components +all_components: $(OTHER_SRC) + +.PHONY: recreate-components +recreate-components: + $(MAKE) --assume-new=$(TMPDIR)/stamp-component-orcidio.owl \ + COMP=true IMP=false MIR=true PAT=true all_components + +.PHONY: no-mirror-recreate-components +no-mirror-recreate-components: + $(MAKE) --assume-new=$(TMPDIR)/stamp-component-orcidio.owl \ + COMP=true IMP=false MIR=false PAT=true all_components + +.PHONY: recreate-% +recreate-%: + $(MAKE) --assume-new=$(TMPDIR)/stamp-component-$*.owl \ + COMP=true IMP=false MIR=true PAT=true $(COMPONENTSDIR)/$*.owl + +.PHONY: no-mirror-recreate-% +no-mirror-recreate-%: + $(MAKE) --assume-new=$(TMPDIR)/stamp-component-$*.owl \ + COMP=true IMP=false MIR=false PAT=true $(COMPONENTSDIR)/$*.owl + +$(COMPONENTSDIR)/%.owl: $(TMPDIR)/stamp-component-%.owl | $(COMPONENTSDIR) + test -f $@ || touch $@ +.PRECIOUS: $(COMPONENTSDIR)/%.owl + +$(TMPDIR)/stamp-component-%.owl: | $(TMPDIR) + touch $@ +.PRECIOUS: $(TMPDIR)/stamp-component-%.owl + +endif # COMP=true # ---------------------------------------- # Mirroring upstream ontologies # ---------------------------------------- diff --git a/src/ontology/catalog-v001.xml b/src/ontology/catalog-v001.xml index 8d94d6a..36ecb74 100644 --- a/src/ontology/catalog-v001.xml +++ b/src/ontology/catalog-v001.xml @@ -2,5 +2,6 @@ + \ No newline at end of file diff --git a/src/ontology/fbbi-edit.owl b/src/ontology/fbbi-edit.owl index d11562a..c0c4871 100644 --- a/src/ontology/fbbi-edit.owl +++ b/src/ontology/fbbi-edit.owl @@ -7,6 +7,7 @@ Prefix(rdfs:=) Ontology( +Import() Import() Annotation( ) Annotation( ) From c455779b4ac04c71ad710e4d02e5219e8194ec55 Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Mon, 22 Jun 2026 14:07:10 +0100 Subject: [PATCH 4/5] Refresh imports and components. --- src/ontology/components/orcidio.owl | 45 +++ src/ontology/imports/merged_import.owl | 424 +------------------------ 2 files changed, 55 insertions(+), 414 deletions(-) create mode 100644 src/ontology/components/orcidio.owl diff --git a/src/ontology/components/orcidio.owl b/src/ontology/components/orcidio.owl new file mode 100644 index 0000000..d8807e1 --- /dev/null +++ b/src/ontology/components/orcidio.owl @@ -0,0 +1,45 @@ +Prefix(:=) +Prefix(owl:=) +Prefix(rdf:=) +Prefix(xml:=) +Prefix(xsd:=) +Prefix(rdfs:=) + + +Ontology( + +Annotation(owl:versionInfo "2026-06-22") + +Declaration(Class()) +Declaration(NamedIndividual()) +Declaration(NamedIndividual()) +Declaration(NamedIndividual()) +Declaration(AnnotationProperty()) +Declaration(AnnotationProperty()) + + + +############################ +# Named Individuals +############################ + +# Individual: (Damien Goutte-Gattat) + +AnnotationAssertion(Annotation( ) "researcher ORCID ID = 0000-0002-6095-8718") +AnnotationAssertion(Annotation( ) rdfs:label "Damien Goutte-Gattat") +ClassAssertion( ) + +# Individual: (David Osumi-Sutherland) + +AnnotationAssertion(Annotation( ) "researcher") +AnnotationAssertion(Annotation( ) rdfs:label "David Osumi-Sutherland") +ClassAssertion( ) + +# Individual: (Willy W Wong) + +AnnotationAssertion(Annotation( ) "researcher ORCID ID = 0000-0002-8841-5870") +AnnotationAssertion(Annotation( ) rdfs:label "Willy W Wong") +ClassAssertion( ) + + +) \ No newline at end of file diff --git a/src/ontology/imports/merged_import.owl b/src/ontology/imports/merged_import.owl index 6341ea9..2852dd2 100644 --- a/src/ontology/imports/merged_import.owl +++ b/src/ontology/imports/merged_import.owl @@ -7,8 +7,8 @@ Prefix(rdfs:=) Ontology( - -Annotation(owl:versionInfo "2026-03-30") + +Annotation(owl:versionInfo "2026-06-22") Declaration(Class()) Declaration(Class()) @@ -151,44 +151,6 @@ Declaration(ObjectProperty()) Declaration(ObjectProperty()) Declaration(ObjectProperty()) Declaration(ObjectProperty()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) Declaration(NamedIndividual()) Declaration(NamedIndividual()) Declaration(NamedIndividual()) @@ -207,9 +169,6 @@ Declaration(NamedIndividual()) Declaration(NamedIndividual()) Declaration(NamedIndividual()) Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) -Declaration(NamedIndividual()) Declaration(AnnotationProperty()) Declaration(AnnotationProperty()) Declaration(AnnotationProperty()) @@ -228,6 +187,7 @@ Declaration(AnnotationProperty()) Declaration(AnnotationProperty()) Declaration(AnnotationProperty()) Declaration(AnnotationProperty()) +Declaration(AnnotationProperty()) Declaration(AnnotationProperty()) Declaration(AnnotationProperty()) Declaration(AnnotationProperty()) @@ -375,6 +335,7 @@ TransitiveObjectProperty() # Object Property: (preceded by) AnnotationAssertion( "x is preceded by y if and only if the time point at which y ends is before or equivalent to the time point at which x starts. Formally: x preceded by y iff ω(y) <= α(x), where α is a function that maps a process to a start point, and ω is a function that maps a process to an end point."@en) +AnnotationAssertion( "http://www.obofoundry.org/ro/#OBO_REL:preceded_by") AnnotationAssertion( ) AnnotationAssertion(rdfs:label "preceded by"@en) SubObjectPropertyOf( ) @@ -426,6 +387,7 @@ ObjectPropertyRange( (has participant) AnnotationAssertion( "a relation between a process and a continuant, in which the continuant is somehow involved in the process"@en) +AnnotationAssertion( "http://www.obofoundry.org/ro/#OBO_REL:has_participant") AnnotationAssertion(rdfs:label "has participant"@en) ObjectPropertyDomain( ) ObjectPropertyRange( ) @@ -697,6 +659,7 @@ SubObjectPropertyOf( (temporally related to) +AnnotationAssertion( "https://docs.google.com/document/d/1kBv1ep_9g3sTR-SD3jqzFqhuwo9TPNF-l-9fUDbO6rM/edit?pli=1"^^xsd:anyURI) AnnotationAssertion( ) AnnotationAssertion(rdfs:comment "A relation that holds between two occurrents. This is a grouping relation that collects together all the Allen relations.") AnnotationAssertion(rdfs:label "temporally related to"@en) @@ -1432,9 +1395,9 @@ AnnotationAssertion(rdfs:label "kina SubClassOf( ) SubClassOf( ObjectHasSelf()) -# Class: (data item) +# Class: (data entity) -AnnotationAssertion( "An information content entity that is intended to be a truthful statement about something (modulo, e.g., measurement precision or other systematic errors) and is constructed/acquired by a method which reliably tends to produce (approximately) truthful statements."@en) +AnnotationAssertion( "An information content entity that is intended to be one or more truthful statement(s) about something (modulo, e.g., measurement precision or other systematic errors) and is constructed/acquired by a method which reliably tends to produce (approximately) truthful statements."@en) AnnotationAssertion(rdfs:label "data entity"@en) AnnotationAssertion(rdfs:label "data item"@en) SubClassOf( ) @@ -1513,461 +1476,96 @@ SubClassOf( (Western Australian Mulga Shrublands Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T17:25:21Z"^^xsd:dateTime) -AnnotationAssertion( "Western Australia Ecoregion") -AnnotationAssertion( "WWF:AA1310") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1310") -AnnotationAssertion(rdfs:label "Western Australian Mulga Shrublands Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Australasia Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T17:51:32Z"^^xsd:dateTime) -AnnotationAssertion( "https://www.worldwildlife.org/biomes/deserts-and-xeric-shrublands") -AnnotationAssertion(rdfs:label "Australasia Ecoregion"@en) - -# Individual: (Tirari-Sturt Stony Desert Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T17:52:41Z"^^xsd:dateTime) -AnnotationAssertion( "Southern central Australia Ecoregion"@en) -AnnotationAssertion( "WWF:AA1309") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1309") -AnnotationAssertion(rdfs:label "Tirari-Sturt Stony Desert Ecoregion") -ObjectPropertyAssertion( ) - -# Individual: (Simpson Desert Region) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T17:54:35Z"^^xsd:dateTime) -AnnotationAssertion( "Eastern central Australia Ecoregion") -AnnotationAssertion( "WWF:AA1308") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1308") -AnnotationAssertion(rdfs:label "Simpson Desert Region"@en) -ObjectPropertyAssertion( ) - -# Individual: (Pilbara Shrublands Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T17:56:13Z"^^xsd:dateTime) -AnnotationAssertion( "Western Australia Ecoregion") -AnnotationAssertion( "WWF:AA1307") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1307") -AnnotationAssertion(rdfs:label "Pilbara Shrublands Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Carnarvon Xeric Shrublands Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T18:10:52Z"^^xsd:dateTime) -AnnotationAssertion( "Western coast of Australia Ecoregion") -AnnotationAssertion( "WWF:AA1301") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1301") -AnnotationAssertion(rdfs:label "Carnarvon Xeric Shrublands Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Central Ranges Xeric Shrub Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T18:12:28Z"^^xsd:dateTime) -AnnotationAssertion( "Central Australia Ecoregion") -AnnotationAssertion( "WWF:AA1302") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1302") -AnnotationAssertion(rdfs:label "Central Ranges Xeric Shrub Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Gibson Desert Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T18:15:11Z"^^xsd:dateTime) -AnnotationAssertion( "Western central Australia") -AnnotationAssertion( "WWF:AA1303") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1303") -AnnotationAssertion(rdfs:label "Gibson Desert Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (The Great Sandy-Tanami Desert Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T18:17:15Z"^^xsd:dateTime) -AnnotationAssertion( "Northwestern Australia") -AnnotationAssertion( "WWF:AA1304") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1304") -AnnotationAssertion(rdfs:label "The Great Sandy-Tanami Desert Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Great Victoria Desert Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T18:24:06Z"^^xsd:dateTime) -AnnotationAssertion( "Southern Australia Ecoregion") -AnnotationAssertion( "WWF:AA1305") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1305") -AnnotationAssertion(rdfs:label "Great Victoria Desert Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Nullarbor Plains Xeric Shrubland Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-05T18:26:16Z"^^xsd:dateTime) -AnnotationAssertion( "Southern Australia Ecoregion") -AnnotationAssertion( "WWF:AA1306") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/aa1306") -AnnotationAssertion(rdfs:label "Nullarbor Plains Xeric Shrubland Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Afrotropical Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-06T22:01:41Z"^^xsd:dateTime) -AnnotationAssertion( "https://www.worldwildlife.org/biomes/deserts-and-xeric-shrublands") -AnnotationAssertion(rdfs:label "Afrotropical Ecoregion"@en) - -# Individual: (Succulent Karoo Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-06T22:02:37Z"^^xsd:dateTime) -AnnotationAssertion( "Southern Africa: Southern Namibia into South Africa") -AnnotationAssertion( "WWF:AT1322") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1322") -AnnotationAssertion(rdfs:label "Succulent Karoo Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Yemen and Saudi Arabia Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-06T22:07:38Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1321") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1321") -AnnotationAssertion( "Arabian Peninsula: Yemen and Saudi Arabia") -AnnotationAssertion(rdfs:label "Yemen and Saudi Arabia Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Yemen, Saudi Arabia, and Oman Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-06T22:11:38Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1320") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1320") -AnnotationAssertion( "Arabian Peninsula: Yemen, Saudi Arabia, and Oman") -AnnotationAssertion(rdfs:label "Yemen, Saudi Arabia, and Oman Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Somali Montane Xeric Woodland Ecoregion) - -AnnotationAssertion( ) -AnnotationAssertion( "2019-03-06T22:13:00Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1319") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1319") -AnnotationAssertion( "Somali montane xeric woodlands ecoregion") -AnnotationAssertion(rdfs:label "Somali Montane Xeric Woodland Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Socotran Archipelago Ecoregion) - -AnnotationAssertion( "2019-03-06T22:15:07Z"^^xsd:dateTime) -AnnotationAssertion( "Islands east of the Horn of Africa and south of Yemen Ecoregion") -AnnotationAssertion( "WWF:AT1318") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1318") -AnnotationAssertion(rdfs:label "Socotran Archipelago Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Red Sea Coastal Desert Ecoregion) - -AnnotationAssertion( "2019-03-06T22:18:55Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1317") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1317") -AnnotationAssertion(rdfs:label "Red Sea Coastal Desert Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Namibian Savanna Woodland Ecoregion) - -AnnotationAssertion( "2019-03-06T22:20:56Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1316") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1316") -AnnotationAssertion(rdfs:label "Namibian Savanna Woodland Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Namib Desert Ecoregion) - -AnnotationAssertion( "2019-03-06T22:24:28Z"^^xsd:dateTime) -AnnotationAssertion( "Africa: Namibia Ecoregion") -AnnotationAssertion( "WWF:AT1315") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1315") -AnnotationAssertion(rdfs:label "Namib Desert Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Nama Karoo Ecoregion) - -AnnotationAssertion( "2019-03-06T22:26:15Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1314") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1314") -AnnotationAssertion(rdfs:label "Nama Karoo Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Masai Xeric Grasslands and Shrublands Ecoregion) - -AnnotationAssertion( "2019-03-06T22:28:43Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1313") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1313") -AnnotationAssertion(rdfs:label "Masai Xeric Grasslands and Shrublands Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Madagascar Succulent Woodlands Ecoregion) - -AnnotationAssertion( "2019-03-06T22:30:23Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1312") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1312") -AnnotationAssertion(rdfs:label "Madagascar Succulent Woodlands Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Madagascar Spiny Thickets Ecoregion) - -AnnotationAssertion( "2019-03-06T22:31:29Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1311") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1311") -AnnotationAssertion( "Madagascar spiny desert ecoregion") -AnnotationAssertion(rdfs:label "Madagascar Spiny Thickets Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Kaokoveld Desert Ecoregion) - -AnnotationAssertion( "2019-03-06T22:39:32Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1310") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1310") -AnnotationAssertion( "Africa: Coastal Namibia and Angola Ecoregion") -AnnotationAssertion(rdfs:label "Kaokoveld Desert Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Kalahari Xeric Savanna Ecoregion) - -AnnotationAssertion( "2019-03-06T22:42:47Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1309") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1309") -AnnotationAssertion(rdfs:label "Kalahari Xeric Savanna Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Ile Europa and Bassas da India Ecoregion) - -AnnotationAssertion( "2019-03-06T22:44:54Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1308") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1308") -AnnotationAssertion( "Southern Africa: Islands about half-way between southern Madagascar and southern Mozambique Ecoregion") -AnnotationAssertion(rdfs:label "Ile Europa and Bassas da India Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Hobyo Grassland and Shrubland Ecoregion) - -AnnotationAssertion( "2019-03-06T22:46:58Z"^^xsd:dateTime) -AnnotationAssertion( "Eastern Africa: Somalia") -AnnotationAssertion( "WWF:AT1307") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1307") -AnnotationAssertion(rdfs:label "Hobyo Grassland and Shrubland Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Oman and United Arab Emirates Ecoregion) - -AnnotationAssertion( "2019-03-06T22:54:57Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1306") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1306") -AnnotationAssertion( "Arabian Peninsula: Oman and United Arab Emirates Ecoregion") -AnnotationAssertion(rdfs:label "Oman and United Arab Emirates Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Ethiopian Xeric Grasslands and Shrublands Ecoregion) - -AnnotationAssertion( "2019-03-07T00:08:06Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1305") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1305") -AnnotationAssertion(rdfs:label "Ethiopian Xeric Grasslands and Shrublands Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Eritrean Coastal Desert Ecoregion) - -AnnotationAssertion( "2019-03-07T00:11:29Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1304") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1304") -AnnotationAssertion(rdfs:label "Eritrean Coastal Desert Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (East Saharan Montane Xeric Woodland Ecoregion) - -AnnotationAssertion( "2019-03-07T00:13:33Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1303") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1303") -AnnotationAssertion( "North central Africa: Eastern Chad and small area of western Sudan") -AnnotationAssertion(rdfs:label "East Saharan Montane Xeric Woodland Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Oman, Yemen, and Saudi Arabia Ecoregion) - -AnnotationAssertion( "2019-03-07T00:16:12Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1302") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1302") -AnnotationAssertion( "Western Asia: Oman, Yemen, and Saudi Arabia Ecoregion") -AnnotationAssertion(rdfs:label "Oman, Yemen, and Saudi Arabia Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Aldabra Island Xeric Scrub Ecoregion) - -AnnotationAssertion( "2019-03-07T00:18:09Z"^^xsd:dateTime) -AnnotationAssertion( "WWF:AT1301") -AnnotationAssertion( "https://www.worldwildlife.org/ecoregions/at1301") -AnnotationAssertion(rdfs:label "Aldabra Island Xeric Scrub Ecoregion"@en) -ObjectPropertyAssertion( ) - -# Individual: (Indo-Malay Ecoregion) - -AnnotationAssertion( "2019-04-26T23:38:50Z"^^xsd:dateTime) -AnnotationAssertion( ) -AnnotationAssertion(rdfs:label "Indo-Malay Ecoregion"@en) - -# Individual: (Thar Desert) - -AnnotationAssertion( "2019-04-26T23:40:13Z"^^xsd:dateTime) -AnnotationAssertion( ) -AnnotationAssertion( "WWF:IM1304") -AnnotationAssertion( "Southern Asia: Western India into Pakistan") -AnnotationAssertion(rdfs:label "Thar Desert"@en) -ObjectPropertyAssertion( ) - -# Individual: (Northwestern Thorn Scrub Forests) - -AnnotationAssertion( "2019-04-27T00:12:51Z"^^xsd:dateTime) -AnnotationAssertion( ) -AnnotationAssertion( "WWF:IM1303") -AnnotationAssertion( "Southern Asia: Eastern India and western Pakistan") -AnnotationAssertion(rdfs:label "Northwestern Thorn Scrub Forests"@en) -ObjectPropertyAssertion( ) - -# Individual: (Solar radiation) - -AnnotationAssertion( "Stellar radiation emitted from Sol.") -AnnotationAssertion(rdfs:label "Solar radiation"@en) -ObjectPropertyAssertion( ) - # Individual: (example to be eventually removed) AnnotationAssertion(rdfs:label "example to be eventually removed"@en) -ClassAssertion( ) # Individual: (failed exploratory term) AnnotationAssertion( "The term was initially used in an attempt to structure part of the ontology, but in retrospect failed to do a good job."@en) -AnnotationAssertion( "The term was used in an attempt to structure part of the ontology but in retrospect failed to do a good job"@en) AnnotationAssertion(rdfs:label "failed exploratory term"@en) -ClassAssertion( ) # Individual: (metadata complete) AnnotationAssertion( "Class has all its metadata, but is either not guaranteed to be in its final location in the asserted IS_A hierarchy or refers to another class that is not complete."@en) AnnotationAssertion(rdfs:label "metadata complete"@en) -ClassAssertion( ) # Individual: (organizational term) -AnnotationAssertion( "Term created to ease viewing/sort terms for development purpose, and will not be included in a release"@en) AnnotationAssertion( "The term was created to ease viewing/sorting terms for development purposes, but will not be included in a release."@en) AnnotationAssertion(rdfs:label "organizational term"@en) -ClassAssertion( ) # Individual: (ready for release) AnnotationAssertion( "Class has undergone final review, is ready for use, and will be included in the next release. Any class lacking \"ready_for_release\" should be considered likely to change place in hierarchy, have its definition refined, or be obsoleted in the next release. Those classes deemed \"ready_for_release\" will also derived from a chain of ancestor classes that are also \"ready_for_release.\""@en) AnnotationAssertion(rdfs:label "ready for release"@en) -ClassAssertion( ) # Individual: (metadata incomplete) AnnotationAssertion( "Class is being worked on; however, the metadata (including definition) are not complete or sufficiently clear to the branch editors."@en) AnnotationAssertion(rdfs:label "metadata incomplete"@en) -ClassAssertion( ) # Individual: (uncurated) AnnotationAssertion( "Nothing done yet beyond assigning a unique class ID and proposing a preferred term."@en) AnnotationAssertion(rdfs:label "uncurated"@en) -ClassAssertion( ) # Individual: (pending final vetting) AnnotationAssertion( "All definitions, placement in the asserted IS_A hierarchy and required minimal metadata are complete. The class is awaiting a final review by someone other than the term editor."@en) AnnotationAssertion(rdfs:label "pending final vetting"@en) -ClassAssertion( ) # Individual: (placeholder removed) AnnotationAssertion( "The term was created to temporarily stand in for a semantic purpose, but is no longer needed, typically due to another permanent term being defined."@en) AnnotationAssertion(rdfs:label "placeholder removed"@en) -ClassAssertion( ) # Individual: (terms merged) AnnotationAssertion( "The term has been combined with one or more other terms to create a more encompassing (merged) term."@en) AnnotationAssertion(rdfs:label "terms merged"@en) -ClassAssertion( ) # Individual: (term imported) AnnotationAssertion( "The term has been replaced by a term imported from another ontology."@en) AnnotationAssertion(rdfs:label "term imported"@en) -ClassAssertion( ) # Individual: (term split) AnnotationAssertion( "The term has been split into two or more new terms."@en) AnnotationAssertion(rdfs:label "term split"@en) -ClassAssertion( ) # Individual: (universal) AnnotationAssertion(rdfs:label "universal"@en) -ClassAssertion( ) # Individual: (defined class) AnnotationAssertion( "A defined class is a class that is defined by a set of logically necessary and sufficient conditions but is not a universal"@en) AnnotationAssertion(rdfs:label "defined class"@en) -ClassAssertion( ) # Individual: (named class expression) AnnotationAssertion( "A named class expression is a logical expression that is given a name. The name can be used in place of the expression."@en) AnnotationAssertion(rdfs:label "named class expression"@en) -ClassAssertion( ) # Individual: (to be replaced with external ontology term) AnnotationAssertion( "Terms with this status should eventually replaced with a term from another ontology."@en) AnnotationAssertion(rdfs:label "to be replaced with external ontology term"@en) -ClassAssertion( ) # Individual: (requires discussion) AnnotationAssertion( "A term that is metadata complete, has been reviewed, and problems have been identified that require discussion before release. Such a term requires editor note(s) to identify the outstanding issues."@en) AnnotationAssertion(rdfs:label "requires discussion"@en) -ClassAssertion( ) # Individual: (out of scope) AnnotationAssertion( "The term was added to the ontology on the assumption it was in scope, but it turned out later that it was not."@en) AnnotationAssertion(rdfs:label "out of scope") -ClassAssertion( ) - -# Individual: (domain entity does not exist) - -AnnotationAssertion( "The term was added to the ontology on the assumption it was a valid domain entity, but it turns out the entity does not exist in reality."@en) -AnnotationAssertion(rdfs:label "domain entity does not exist") -ClassAssertion( ) SubClassOf(ObjectSomeValuesFrom( ) ObjectUnionOf(ObjectSomeValuesFrom( ObjectSomeValuesFrom( )) ObjectSomeValuesFrom( ObjectSomeValuesFrom( ObjectSomeValuesFrom( ))))) -DifferentIndividuals( ) -DifferentIndividuals( ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) @@ -2020,13 +1618,9 @@ SubObjectPropertyOf(ObjectPropertyChain( ) ) SubObjectPropertyOf(ObjectPropertyChain( ) ) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()) ClassAtom( Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) -DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) -DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) -DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) -DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Annotation(rdfs:comment "GP(X)-enables->MF(Y)-has_part->MF(Z) => GP(X) enables MF(Z), e.g. if GP X enables ATPase coupled transporter activity' and 'ATPase coupled transporter activity' has_part 'ATPase activity' then GP(X) enables 'ATPase activity'") Annotation(rdfs:label "enabling an MF enables its parts") Body(ClassAtom( Variable()) ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) @@ -2047,4 +1641,6 @@ DLSafeRule(Body(ObjectPropertyAtom( V DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) DLSafeRule(Body(ObjectPropertyAtom( Variable() Variable()) ObjectPropertyAtom( Variable() Variable()))Head(ObjectPropertyAtom( Variable() Variable()))) +AnnotationAssertion(Annotation( ) "researcher") +AnnotationAssertion(Annotation( ) rdfs:label "David Osumi-Sutherland") ) \ No newline at end of file From 3044b299ef9516a57a7fbc1c26bb92a1481374db Mon Sep 17 00:00:00 2001 From: Damien Goutte-Gattat Date: Mon, 22 Jun 2026 15:22:00 +0100 Subject: [PATCH 5/5] Remove circular dependency to build orcidio.owl. We cannot have `$(COMPONENTSDIR)/orcidio.owl` depend on `$(SRCMEREGD)`, because `$(SRCMERGED)` itself is dependent on all the components. We work around the issue by manually remove all import declarations from the edit file (what is normally done for `$(SRCMERGED)`), _without_ re-adding the import declarations for ODK-declared components (which is what causes the circular dependency). This work in our case because orcidio is the only component in FBbi. Hopefully by the time we add other components to FBbi (if we ever do that), ODK 1.7 will be out and will no longer need to do any of that. --- src/ontology/fbbi.Makefile | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/ontology/fbbi.Makefile b/src/ontology/fbbi.Makefile index 2b83176..6615073 100644 --- a/src/ontology/fbbi.Makefile +++ b/src/ontology/fbbi.Makefile @@ -7,6 +7,7 @@ # within the ontology. # Of note, ODK 1.7 will have built-in support for this, so once ODK 1.7 # is out we should replace this with the built-in feature. -$(COMPONENTSDIR)/orcidio.owl: $(TMPDIR)/stamp-component-%.owl $(SRCMERGED) | $(COMPONENTSDIR) all_robot_plugins - $(ROBOT) odk:extract-orcids -i $(SRCMERGED) \ +$(COMPONENTSDIR)/orcidio.owl: $(TMPDIR)/stamp-component-%.owl $(EDIT_PREPROCESSED) | $(COMPONENTSDIR) all_robot_plugins + $(ROBOT) remove --input $(EDIT_PREPROCESSED) --select imports --trim false \ + odk:extract-orcids \ $(ANNOTATE_CONVERT_FILE)