Short answer
The deterministic ZIP extracts to one OCFL Object root. Its exact 0=ocfl_object_1.1 Namaste file declares OCFL 1.1, while the object-root inventory.json and inventory.json.sha512 files are byte-identical to those in the head-version directory. The inventory identifies the object with a stable URI, uses SHA-512 for content addressing, maps physical version content paths in its manifest, and maps content digests to ten portable logical paths in the head state. A complete SHA-256 fixity block independently covers every stored content file. The logical state preserves the canonical 37-row UTF-8 CSV, equivalent JSON Lines, W3C CSVW metadata, MLCommons Croissant 1.1 metadata, the SKOS vocabulary in JSON-LD, Turtle and N-Triples, SHACL shapes, a validation guide and the CC BY 4.0 notice. The extracted object validates with ocfl-py 2.1.0. OCFL specifies an object-at-rest filesystem layout, not a ZIP transfer serialization or OCFL-specific media type, so the download uses generic application/zip with a separate outer SHA-256. This is one OCFL Object, not an OCFL Storage Root, repository service, institutional endorsement or proof of ingest.
Download the ZIP and checksum into the same directory, verify the outer SHA-256, extract the single object root, then run ocfl-validate.py against that directory with ocfl-py 2.1.0. Inspect the inventory id, head, manifest, version state and local rights policy before repository ingest.
What to look for before choosing
- Complete U+3105 through U+3129 Bopomofo coverage with no audio or learner records
- Exact OCFL 1.1 Namaste declaration plus root and head-version inventory sidecars
- SHA-512 content-addressed manifest and complete SHA-256 fixity block
- Ten logical files with physical content paths separated from logical paths
- Deterministic single-root ZIP with a separately published outer SHA-256
A practical decision process
- Download the ZIP, checksums-sha256.txt and metadata.jsonld from the object guide.
- Run shasum -a 256 -c checksums-sha256.txt before extracting the transfer wrapper.
- Extract the ZIP and confirm it creates only the bopomofo-37-symbols-ocfl object root.
- Run ocfl-validate.py bopomofo-37-symbols-ocfl with ocfl-py 2.1.0.
- Confirm the inventory id and local retention policy before staging repository ingest.
Quick comparison
| Need | What to check | Why it matters |
|---|---|---|
| Transparent object identification | The root contains the exact 0=ocfl_object_1.1 Namaste declaration | Humans and tools can identify the extracted directory without proprietary software |
| Version and path reconstruction | The inventory separates physical manifest paths from logical state paths | A repository can rebuild the head state while retaining immutable version content |
| Independent byte verification | SHA-512 covers content addressing and SHA-256 fixity covers every physical content path | An OCFL validator can verify inventories, sidecars, state mappings and stored bytes |
Sources and resources
- Bopomofo OCFL 1.1 preservation object
- Oxford Common File Layout Specification 1.1
- Official OCFL 1.1 inventory JSON Schema
- ocfl-py validator
- IANA application/zip media type registration
Where Lumi Bopomofo fits
Lumi Bopomofo is not required to download, validate, preserve or reconstruct the OCFL object. If currently available, it appears only after the open repository resource as an optional on-device practice layer.
No subscriptionNo adsKid-safe
This page is an independent buying guide. App Store features and prices can change, so confirm details on the listing before purchase.