diff --git a/docs/odk-workflows/RepositoryFileStructure.md b/docs/odk-workflows/RepositoryFileStructure.md
index 602ecfc..3907767 100644
--- a/docs/odk-workflows/RepositoryFileStructure.md
+++ b/docs/odk-workflows/RepositoryFileStructure.md
@@ -26,6 +26,7 @@ These are the current imports in VIBSO
| stato | http://purl.obolibrary.org/obo/stato.owl | None |
| uo | http://purl.obolibrary.org/obo/uo.owl | custom |
| chebi | http://purl.obolibrary.org/obo/chebi.owl | None |
+| foodon | http://purl.obolibrary.org/obo/foodon.owl | None |
## Components
Components, in contrast to imports, are considered full members of the ontology. This means that any axiom in a component is also included in the ontology base - which means it is considered _native_ to the ontology. While this sounds complicated, consider this: conceptually, no component should be part of more than one ontology. If that seems to be the case, we are most likely talking about an import. Components are often not needed for ontologies, but there are some use cases:
diff --git a/src/ontology/Makefile b/src/ontology/Makefile
index 591c0d1..e2002de 100644
--- a/src/ontology/Makefile
+++ b/src/ontology/Makefile
@@ -108,7 +108,7 @@ all_main: $(MAIN_FILES)
# ----------------------------------------
-IMPORTS = bfo ro omo iao chmo pato obi stato uo chebi
+IMPORTS = bfo ro omo iao chmo pato obi stato uo chebi foodon
IMPORT_ROOTS = $(patsubst %, $(IMPORTDIR)/%_import, $(IMPORTS))
IMPORT_OWL_FILES = $(foreach n,$(IMPORT_ROOTS), $(n).owl)
@@ -517,6 +517,16 @@ mirror-chebi: | $(TMPDIR)
mv $@.tmp.owl $(TMPDIR)/$@.owl; fi
+## ONTOLOGY: foodon
+.PHONY: mirror-foodon
+.PRECIOUS: $(MIRRORDIR)/foodon.owl
+mirror-foodon: | $(TMPDIR)
+ if [ $(MIR) = true ] && [ $(IMP) = true ]; then curl -L $(OBOBASE)/foodon.owl --create-dirs -o $(MIRRORDIR)/foodon.owl --retry 4 --max-time 200 &&\
+ $(ROBOT) convert -i $(MIRRORDIR)/foodon.owl -o $@.tmp.owl && \
+ $(ROBOT) remove -i $@.tmp.owl --base-iri $(URIBASE)/FOODON --axioms external --preserve-structure false --trim false -o $@.tmp.owl &&\
+ mv $@.tmp.owl $(TMPDIR)/$@.owl; fi
+
+
$(MIRRORDIR)/%.owl: mirror-% | $(MIRRORDIR)
if [ $(IMP) = true ] && [ $(MIR) = true ] && [ -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
diff --git a/src/ontology/catalog-v001.xml b/src/ontology/catalog-v001.xml
index ae4f60c..5fc9c50 100644
--- a/src/ontology/catalog-v001.xml
+++ b/src/ontology/catalog-v001.xml
@@ -23,5 +23,7 @@
+
+
diff --git a/src/ontology/imports/foodon_import.owl b/src/ontology/imports/foodon_import.owl
new file mode 100644
index 0000000..57d45c5
--- /dev/null
+++ b/src/ontology/imports/foodon_import.owl
@@ -0,0 +1,59 @@
+Prefix(:=)
+Prefix(owl:=)
+Prefix(rdf:=)
+Prefix(xml:=)
+Prefix(xsd:=)
+Prefix(rdfs:=)
+
+
+Ontology(
+
+Annotation( )
+Annotation(owl:versionInfo "2024-01-09")
+
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(Class())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(Datatype(xsd:date))
+
+
+
+############################
+# Classes
+############################
+
+# Class: (device specification)
+
+AnnotationAssertion( )
+AnnotationAssertion( "A directive information entity which specifies a device and its settings for use within a plan specification."@en)
+AnnotationAssertion( )
+AnnotationAssertion( "2021-11-29T21:53:39Z"^^xsd:dateTime)
+AnnotationAssertion(rdfs:label "device specification"@en)
+SubClassOf( )
+
+
+)
\ No newline at end of file
diff --git a/src/ontology/imports/foodon_terms.txt b/src/ontology/imports/foodon_terms.txt
new file mode 100644
index 0000000..7c2b8f6
--- /dev/null
+++ b/src/ontology/imports/foodon_terms.txt
@@ -0,0 +1 @@
+FOODON:00004086 # device specification
\ No newline at end of file
diff --git a/src/ontology/vibso-edit.owl b/src/ontology/vibso-edit.owl
index 33470c3..232ee66 100644
--- a/src/ontology/vibso-edit.owl
+++ b/src/ontology/vibso-edit.owl
@@ -30,6 +30,7 @@ Import()
Import()
Import()
Import()
+Import()
Annotation(dcterms:contributor )
Annotation(dcterms:contributor )
Annotation(dcterms:contributor )
diff --git a/src/ontology/vibso-odk.yaml b/src/ontology/vibso-odk.yaml
index e949fc0..5644654 100644
--- a/src/ontology/vibso-odk.yaml
+++ b/src/ontology/vibso-odk.yaml
@@ -62,6 +62,8 @@ import_group:
is_large: true
use_gzipped: true
make_base: true
+ - id: foodon
+ make_base: true
components:
products:
- filename: vibso_classes.owl # TSV templates to define VIBSO classes