Package Layout
Package directory structure, standard file layout, and manifest requirements.
Real liturgical corpora are large. OLS v1.0 therefore defines a package layout, manifest, and modular references.
openliturgy-package/
manifest.ols.json
schema/
roles/
persons/
organizations/
texts/
readings/
chants/
rubrics/
blocks/
sections/
ordos/
propers/
calendars/
service-instances/
assets/
commentary/
tests/
valid/
invalid/
Manifest
{
"$schema": "https://ols.otyg.org/schema/v1.0/manifest.schema.json",
"ols_version": "1.0.0",
"type": "manifest",
"package": "org.openliturgy.eotc.core",
"version": "1.0.0",
"title": {
"en": "EOTC Core Liturgical Package"
},
"scope": {
"family": "oriental-orthodox",
"tradition": "eotc",
"profile": "eotc.v1"
},
"dependencies": ["org.openliturgy.common.bible@1", "org.openliturgy.common.psalter@1"],
"license": {
"spec": "Apache-2.0",
"content": "see-individual-sources"
}
}
Package Rules
| Rule | Requirement |
|---|---|
| Manifest | Every distributable package MUST include manifest.ols.json. |
| References | Cross-file references MUST use stable IDs or package-qualified IDs. |
| Assets | Binary files SHOULD be stored outside JSON and linked by URI. |
| Content license | MUST be declared per package and MAY be overridden per entity. |
| Review status | MUST be declared at package level and MAY be overridden per entity. |
A Small Referenced Package
The directory layout is a convention for discoverability; references, not folder order, establish relationships. A small service package might contain:
openliturgy-package/
manifest.ols.json
roles/
deacon.ols.json
blocks/
kyrie.ols.json
sections/
entrance.ols.json
ordos/
kidase.ols.json
The section can refer to the block by a stable ID:
{
"$schema": "https://ols.otyg.org/schema/v1.0/section.schema.json",
"ols_version": "1.0.0",
"type": "section",
"id": "sec-entrance",
"label": { "en": "Entrance" },
"blocks": [{ "$ref": "block-kyrie" }]
}
Package processors should load the manifest first, resolve declared dependencies, index IDs, and only then resolve cross-file references. This makes failures such as a missing block-kyrie deterministic and easy to report.
Package-Level Defaults
Package metadata can establish a default license or review status, but entity-level metadata can narrow it. An entity must not silently broaden a package restriction. For example, content from a package marked educational-only cannot become approved for sacramental use merely because an entity omits its authority object.