Theory — Day-2
The hard part is everything after v1
Most ontology projects die not at design but at the first change request. MedaCore's day-2 handbook (a real example of the discipline you should ship for any production ontology):
Semver, ontology-flavoured
- PATCH (0.3.0 → 0.3.1) — labels, comments, examples. No axiom changes. Downstream queries never break.
- MINOR (0.3.0 → 0.4.0) — additive: new classes, new properties, looser domains. Old queries still work.
- MAJOR (0.3.0 → 1.0.0) — breaking: tighter domains, removed classes, restructured hierarchies. Triggers a deprecation window.
Deprecation, not deletion
Removing a class people might still be querying is hostile. Instead:
:OldCausalityCode a owl:Class ;
owl:deprecated true ;
rdfs:comment "Use :CausalityAssessment + :whoUMC instead." ;
skos:exactMatch :CausalityAssessment .
Three releases later, after every known consumer migrates (checked via SPARQL access logs), the class is finally dropped.
Change-request workflow
- Stakeholder files a request (Jira / GitHub issue).
- Ontology engineer drafts the change as a PR.
- CI runs
robot diffand posts the human-readable summary to the PR. - The Ontology Council (PV lead, data lead, regulatory affairs) reviews the diff. A MAJOR change requires written consumer sign-off.
- On merge, a new versioned PURL is published.
The cardinal sin
Editing the ontology in place on the production triplestore without going through the file → PR → CI → PURL cycle. You instantly lose reproducibility, auditability and the regulator's trust. The triplestore is a cache of the git-versioned source of truth — never the other way around.