diff --git a/.gitignore b/.gitignore
index 3fb4a86..53b6cd5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,7 +4,6 @@
.DS_Store
semantic.cache
bin/
-catalog-v001.xml
*.tmp
*.tmp.obo
diff --git a/docs/odk-workflows/RepositoryFileStructure.md b/docs/odk-workflows/RepositoryFileStructure.md
index 378a967..e9c06f9 100644
--- a/docs/odk-workflows/RepositoryFileStructure.md
+++ b/docs/odk-workflows/RepositoryFileStructure.md
@@ -22,6 +22,7 @@ These are the current imports in OGMS
| iao | http://purl.obolibrary.org/obo/iao.owl | mirror |
| ido | http://purl.obolibrary.org/obo/ido.owl | filter |
| omo | http://purl.obolibrary.org/obo/omo.owl | mirror |
+| cob | http://purl.obolibrary.org/obo/cob.owl | slme |
## 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 cc5b8f7..cf3cd42 100644
--- a/src/ontology/Makefile
+++ b/src/ontology/Makefile
@@ -16,7 +16,7 @@
# 3. [Update repo to latest ODK](update_repo)
# Fingerprint of the configuration file when this Makefile was last generated
-CONFIG_HASH= 04d4c89977807b1ad2521b6386e797df708e1d2805834dc0af9cc669ff68d53d
+CONFIG_HASH= 1fc11db5bb385926b27aa9fa890f57825a32f749e19de3b6ec2c22720f272f95
# ----------------------------------------
@@ -194,7 +194,7 @@ all_main: $(MAIN_FILES)
# ----------------------------------------
-IMPORTS = ro obi bfo iao ido omo
+IMPORTS = ro obi bfo iao ido omo cob
IMPORT_ROOTS = $(patsubst %, $(IMPORTDIR)/%_import, $(IMPORTS))
IMPORT_OWL_FILES = $(foreach n,$(IMPORT_ROOTS), $(n).owl)
@@ -571,6 +571,14 @@ mirror-omo: | $(TMPDIR)
$(ROBOT) convert -i $(TMPDIR)/omo-download.owl -o $(TMPDIR)/$@.owl
+## ONTOLOGY: cob
+.PHONY: mirror-cob
+.PRECIOUS: $(MIRRORDIR)/cob.owl
+mirror-cob: | $(TMPDIR)
+ curl -L $(OBOBASE)/cob.owl --create-dirs -o $(TMPDIR)/cob-download.owl --retry 4 --max-time 200 && \
+ $(ROBOT) convert -i $(TMPDIR)/cob-download.owl -o $(TMPDIR)/$@.owl
+
+
$(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
diff --git a/src/ontology/catalog-v001.xml b/src/ontology/catalog-v001.xml
index 16d739d..69c9ccc 100644
--- a/src/ontology/catalog-v001.xml
+++ b/src/ontology/catalog-v001.xml
@@ -7,5 +7,6 @@
+
\ No newline at end of file
diff --git a/src/ontology/imports/bfo_import.owl b/src/ontology/imports/bfo_import.owl
index ebff232..a44b0bb 100644
--- a/src/ontology/imports/bfo_import.owl
+++ b/src/ontology/imports/bfo_import.owl
@@ -7,14 +7,21 @@ Prefix(rdfs:=)
Ontology(
-
+
Annotation( )
-Annotation(owl:versionInfo "2025-07-02")
+Annotation(owl:versionInfo "2026-01-31")
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(AnnotationProperty())
Declaration(AnnotationProperty())
@@ -26,6 +33,7 @@ Declaration(AnnotationProperty())
Declaration(AnnotationProperty())
Declaration(AnnotationProperty())
Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
Declaration(AnnotationProperty())
Declaration(AnnotationProperty())
############################
@@ -92,6 +100,14 @@ AnnotationAssertion(rdfs:label "ent
AnnotationAssertion( "BFO 2 Reference: Continuant entities are entities which can be sliced to yield parts only along the spatial dimension, yielding for example the parts of your table which we call its legs, its top, its nails. ‘My desk stretches from the window to the door. It has spatial parts, and can be sliced (in space) in two. With respect to time, however, a thing is a continuant.’ [60, p. 240"@en)
AnnotationAssertion(rdfs:label "continuant"@en)
SubClassOf( )
+DisjointClasses( )
+
+# Class: (occurrent)
+
+AnnotationAssertion( "BFO 2 Reference: every occurrent that is not a temporal or spatiotemporal region is s-dependent on some independent continuant that is not a spatial region"@en)
+AnnotationAssertion( "BFO 2 Reference: s-dependence obtains between every process and its participants in the sense that, as a matter of necessity, this process could not have existed unless these or those participants existed also. A process may have a succession of participants at different phases of its unfolding. Thus there may be different players on the field at different times during the course of a football game; but the process which is the entire game s-depends_on all of these players nonetheless. Some temporal parts of this process will s-depend_on on only some of the players."@en)
+AnnotationAssertion(rdfs:label "occurrent"@en)
+SubClassOf( )
# Class: (independent continuant)
@@ -108,6 +124,53 @@ AnnotationAssertion( "independent continuant"@en)
SubClassOf( )
DisjointClasses( )
+DisjointClasses( )
+
+# Class: (process)
+
+AnnotationAssertion( "a process of cell-division, \\ a beating of the heart"@en)
+AnnotationAssertion( "a process of meiosis"@en)
+AnnotationAssertion( "a process of sleeping"@en)
+AnnotationAssertion( "the course of a disease"@en)
+AnnotationAssertion( "the flight of a bird"@en)
+AnnotationAssertion( "the life of an organism"@en)
+AnnotationAssertion( "your process of aging."@en)
+AnnotationAssertion( "BFO 2 Reference: The realm of occurrents is less pervasively marked by the presence of natural units than is the case in the realm of independent continuants. Thus there is here no counterpart of ‘object’. In BFO 1.0 ‘process’ served as such a counterpart. In BFO 2.0 ‘process’ is, rather, the occurrent counterpart of ‘material entity’. Those natural – as contrasted with engineered, which here means: deliberately executed – units which do exist in the realm of occurrents are typically either parasitic on the existence of natural units on the continuant side, or they are fiat in nature. Thus we can count lives; we can count football games; we can count chemical reactions performed in experiments or in chemical manufacturing. We cannot count the processes taking place, for instance, in an episode of insect mating behavior.Even where natural units are identifiable, for example cycles in a cyclical process such as the beating of a heart or an organism’s sleep/wake cycle, the processes in question form a sequence with no discontinuities (temporal gaps) of the sort that we find for instance where billiard balls or zebrafish or planets are separated by clear spatial gaps. Lives of organisms are process units, but they too unfold in a continuous series from other, prior processes such as fertilization, and they unfold in turn in continuous series of post-life processes such as post-mortem decay. Clear examples of boundaries of processes are almost always of the fiat sort (midnight, a time of death as declared in an operating theater or on a death certificate, the initiation of a state of war)"@en)
+AnnotationAssertion(rdfs:label "process"@en)
+SubClassOf( )
+
+# Class: (disposition)
+
+AnnotationAssertion( "an atom of element X has the disposition to decay to an atom of element Y"@en)
+AnnotationAssertion( "certain people have a predisposition to colon cancer"@en)
+AnnotationAssertion( "children are innately disposed to categorize objects in certain ways."@en)
+AnnotationAssertion( "the cell wall is disposed to filter chemicals in endocytosis and exocytosis"@en)
+AnnotationAssertion( "BFO 2 Reference: Dispositions exist along a strength continuum. Weaker forms of disposition are realized in only a fraction of triggering cases. These forms occur in a significant number of cases of a similar type."@en)
+AnnotationAssertion(rdfs:label "disposition"@en)
+SubClassOf( )
+DisjointClasses( )
+
+# Class: (realizable entity)
+
+AnnotationAssertion( "the disposition of this piece of metal to conduct electricity."@en)
+AnnotationAssertion( "the disposition of your blood to coagulate"@en)
+AnnotationAssertion( "the function of your reproductive organs"@en)
+AnnotationAssertion( "the role of being a doctor"@en)
+AnnotationAssertion( "the role of this boundary to delineate where Utah and Colorado meet"@en)
+AnnotationAssertion(rdfs:label "realizable entity"@en)
+SubClassOf( )
+DisjointClasses( )
+
+# Class: (quality)
+
+AnnotationAssertion( "the ambient temperature of this portion of air"@en)
+AnnotationAssertion( "the color of a tomato"@en)
+AnnotationAssertion( "the length of the circumference of your waist"@en)
+AnnotationAssertion( "the mass of this piece of gold."@en)
+AnnotationAssertion( "the shape of your nose"@en)
+AnnotationAssertion( "the shape of your nostril"@en)
+AnnotationAssertion(rdfs:label "quality"@en)
+SubClassOf( )
# Class: (specifically dependent continuant)
@@ -124,6 +187,28 @@ AnnotationAssertion( "the smell of this portion of mozzarella"@en)
AnnotationAssertion(rdfs:label "specifically dependent continuant"@en)
SubClassOf( )
+DisjointClasses( )
+
+# Class: (role)
+
+AnnotationAssertion( "John’s role of husband to Mary is dependent on Mary’s role of wife to John, and both are dependent on the object aggregate comprising John and Mary as member parts joined together through the relational quality of being married."@en)
+AnnotationAssertion( "the priest role"@en)
+AnnotationAssertion( "the role of a boundary to demarcate two neighboring administrative territories"@en)
+AnnotationAssertion( "the role of a building in serving as a military target"@en)
+AnnotationAssertion( "the role of a stone in marking a property boundary"@en)
+AnnotationAssertion( "the role of subject in a clinical trial"@en)
+AnnotationAssertion( "the student role"@en)
+AnnotationAssertion( "BFO 2 Reference: One major family of examples of non-rigid universals involves roles, and ontologies developed for corresponding administrative purposes may consist entirely of representatives of entities of this sort. Thus ‘professor’, defined as follows,b instance_of professor at t =Def. there is some c, c instance_of professor role & c inheres_in b at t.denotes a non-rigid universal and so also do ‘nurse’, ‘student’, ‘colonel’, ‘taxpayer’, and so forth. (These terms are all, in the jargon of philosophy, phase sortals.) By using role terms in definitions, we can create a BFO conformant treatment of such entities drawing on the fact that, while an instance of professor may be simultaneously an instance of trade union member, no instance of the type professor role is also (at any time) an instance of the type trade union member role (any more than any instance of the type color is at any time an instance of the type length).If an ontology of employment positions should be defined in terms of roles following the above pattern, this enables the ontology to do justice to the fact that individuals instantiate the corresponding universals – professor, sergeant, nurse – only during certain phases in their lives."@en)
+AnnotationAssertion(rdfs:label "role"@en)
+SubClassOf( )
+
+# Class: (generically dependent continuant)
+
+AnnotationAssertion( "The entries in your database are patterns instantiated as quality instances in your hard drive. The database itself is an aggregate of such patterns. When you create the database you create a particular instance of the generically dependent continuant type database. Each entry in the database is an instance of the generically dependent continuant type IAO: information content entity."@en)
+AnnotationAssertion( "the pdf file on your laptop, the pdf file that is a copy thereof on my laptop"@en)
+AnnotationAssertion( "the sequence of this protein molecule; the sequence that is a copy thereof in that protein molecule."@en)
+AnnotationAssertion(rdfs:label "generically dependent continuant"@en)
+SubClassOf( )
# Class: (material entity)
diff --git a/src/ontology/imports/cob_import.owl b/src/ontology/imports/cob_import.owl
new file mode 100644
index 0000000..40acd2d
--- /dev/null
+++ b/src/ontology/imports/cob_import.owl
@@ -0,0 +1,385 @@
+Prefix(:=)
+Prefix(owl:=)
+Prefix(rdf:=)
+Prefix(xml:=)
+Prefix(xsd:=)
+Prefix(rdfs:=)
+
+
+Ontology(
+
+Annotation( )
+Annotation(owl:versionInfo "2026-02-10")
+
+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(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(ObjectProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+Declaration(AnnotationProperty())
+############################
+# Annotation Properties
+############################
+
+# Annotation Property: (definition)
+
+AnnotationAssertion(rdfs:label "definition")
+
+# Annotation Property: (editor note)
+
+AnnotationAssertion(rdfs:label "editor note"@en)
+
+# Annotation Property: (term replaced by)
+
+AnnotationAssertion(rdfs:label "term replaced by"@en)
+
+
+############################
+# Object Properties
+############################
+
+# Object Property: (part of)
+
+AnnotationAssertion( "a core relation that holds between a part and its whole"@en)
+AnnotationAssertion(rdfs:label "part of"@en)
+
+# Object Property: (has part)
+
+AnnotationAssertion( "a core relation that holds between a whole and its part"@en)
+AnnotationAssertion(rdfs:label "has part"@en)
+
+# Object Property: (realizes)
+
+AnnotationAssertion( "Paraphrase of elucidation: a relation between a process and a realizable entity, where there is some material entity that is bearer of the realizable entity and participates in the process, and the realizable entity comes to be realized in the course of the process"@en)
+AnnotationAssertion(rdfs:label "realizes"@en)
+ObjectPropertyDomain( )
+ObjectPropertyRange( )
+
+# Object Property: (is about)
+
+AnnotationAssertion(rdfs:label "is about"@en)
+ObjectPropertyDomain( )
+
+# Object Property: (has specified input)
+
+AnnotationAssertion( "The inverse property of is specified input of")
+AnnotationAssertion(rdfs:label "has specified input"@en)
+ObjectPropertyDomain( )
+
+# Object Property: