IDs, References & Namespaces

Format of stable identifiers, references, namespaces, and uniqueness rules.

OLS v1.0 uses stable identifiers so content can be reused across apps, service books, teaching tools, and archives.

ID Format

{
  "id": "eotc.kidase.common.block.kyrie"
}

Reference Forms

FormExampleUse
Local IDblock-kyrieSame file or same package context.
Qualified IDeotc.kidase.common.block.kyrieStable package-level reference.
URNurn:ols:eotc:kidase:block:kyrieLong-lived archival reference.
JSON Reference{ "$ref": "blocks/kyrie.ols.json" }File-level composition.

ID Rules

RuleRequirement
UniquenessIDs MUST be unique within a package.
StabilityIDs SHOULD NOT change when text is translated.
VersioningBreaking textual or structural changes SHOULD create a new version field, not a new random ID.
Human readabilityIDs SHOULD be descriptive and lowercase.
No spacesIDs MUST NOT contain spaces.

Choosing a Reference Form

Use the least ambiguous form that survives the expected lifetime of the content:

  • Use a local ID for tightly coupled files distributed in one package.
  • Use a qualified ID when another package may import or cache the entity.
  • Use a URN for archival catalogs and external systems that must not depend on a file path.
  • Use $ref when composing JSON documents and the target is identified by a file or package resolver.
{
  "id": "sec-entrance",
  "blocks": [{ "$ref": "block-kyrie" }, { "$ref": "org.openliturgy.eotc.core:block-trisagion" }]
}

Renames and Versions

Changing a label, translation, or file location does not require a new ID. When an ID itself must change, publishers should retain a redirect or alias in package metadata so old references can be diagnosed or migrated. A breaking structural revision should update the entity or package version while preserving the stable identity whenever it still represents the same liturgical object.