Theory — Deployment
Why Fuseki, not GraphDB this time
MedaCore picked GraphDB for the SHACL UI and the vendor-specific onto:explain. NorthWind has different constraints:
- 100% open source — required by procurement.
- Tight integration with Apache Jena rules (the operations team writes some SPARQL-Update rules for downstream alarm enrichment).
- EL reasoning via
ELKplugin — handles the alarm classification at telemetry rates.
Apache Jena Fuseki + ELK reasoner ticks all three. This is the recurring lesson of the track: the triplestore is a swappable backend. What stays constant is the ontology, the mapping, and the SPARQL.
Three modules, three PURLs, one repo
https://w3id.org/northwind/asset/1.0.0
https://w3id.org/northwind/sensors/1.0.0
https://w3id.org/northwind/events/1.0.0
Each module ships on its own semver. asset-core might be at 1.2.0 while sensors races ahead to 1.7.3. Consumers pin the version they tested against.
CI per module
Same ROBOT pipeline as MedaCore, but run independently per module and gated on the OWL 2 EL profile check (robot validate-profile --profile EL). If a contributor accidentally adds an inverse-property axiom, the build fails because that axiom would silently push the ontology into OWL 2 DL and break the polynomial-time guarantee the operations team relies on.