- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| docs | ||
| examples | ||
| ontology | ||
| queries | ||
| shapes | ||
| tests | ||
| vocab | ||
| .gitignore | ||
| AGENTS.md | ||
| pyproject.toml | ||
| README.md | ||
Eunomia archival storage model
Eunomia is a linked-data-first model for physical archival storage. It keeps archival descriptions separate from the physical units that instantiate them and models boxes, shelves, cabinets, racks and depots as a current direct-location chain. Applications can derive a record's full location without copying depot data onto the record.
The namespace is temporary:
https://example.org/eunomia/
Replace it with a persistent institutional HTTP namespace before publishing production data.
Package contents
ontology/eunomia.ttl— core OWL/RDFS vocabulary.ontology/eunomia-navigation.ttl— minimal pathing-ready extension.vocab/eunomia-vocab.ttl— bilingual SKOS value schemes and an illustrative Amsterdam box profile.shapes/eunomia-core.shacl.ttl— non-waivable integrity validation.shapes/eunomia-operations.shacl.ttl— waivable bounds, overlap, orientation and stack validation.examples/depot-k.trig— complete example with public and restricted named graphs.examples/invalid/— focused validation failures and one approved-waiver case.queries/— competency SPARQL queries.tests/test_model.py— parsing, SHACL and query assertions.docs/model.md— model decisions and extension guidance.
Install and verify
Python 3.12 is required.
python -m venv .venv
.venv\Scripts\python -m pip install -e .
.venv\Scripts\python -m unittest discover -s tests -v
Validate a Turtle graph directly:
.venv\Scripts\python -m pyshacl -s shapes/eunomia-core.shacl.ttl -e ontology/eunomia.ttl -i rdfs -m -a -f human your-data.ttl
.venv\Scripts\python -m pyshacl -s shapes/eunomia-operations.shacl.ttl -e ontology/eunomia.ttl -i rdfs -m -a -f human your-data.ttl
Production validation should also load vocab/eunomia-vocab.ttl; the test suite does so without network access.
Core pattern
:record200 a rico:RecordResource ;
rico:hasOrHadInstantiation :unit200 .
:unit200 a eun:PhysicalUnit ;
eun:directlyLocatedIn :box17 ;
eun:hasCurrentPlacement :unit200Placement .
:box17 eun:directlyLocatedIn :shelf3 .
:shelf3 eun:directlyLocatedIn :cabinet2 .
:cabinet2 eun:directlyLocatedIn :rack1 .
:rack1 eun:directlyLocatedIn :depotK .
The current depot is obtained with eun:directlyLocatedIn+. Historical locations are represented by eun:HistoricalPlacement and do not participate in that current path.
Important boundaries
- Linked data does not mean all data must be public. Exact addresses, geometry and placement history belong in an access-controlled named graph.
- OWL states semantics; SHACL provides the closed-world registration contract.
- V1 calculations support millimetres, centimetres and metres and orthogonal orientations.
- Weight/load limits, environmental observations, arbitrary geometry and route optimization are extension points, not v1 constraints.
vocab:AmsterdamseArchiefdoosasserts only the supplied 12.5 cm width. Its unknown depth and height are deliberately not guessed.