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

RuleRequirement
ManifestEvery distributable package MUST include manifest.ols.json.
ReferencesCross-file references MUST use stable IDs or package-qualified IDs.
AssetsBinary files SHOULD be stored outside JSON and linked by URI.
Content licenseMUST be declared per package and MAY be overridden per entity.
Review statusMUST 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.

Schemas and supported values