Canonical format, version 1. Validate against the published
JSON Schemas
rather than reimplementing the parser.
project.json manifest at the root names every
collection, asset, and lesson by a project-relative path, and defines the outline.
Directory tree
Paths in
project.json are relative to the project root. Paths inside a collection file
(its recordFiles) are relative to that collection file, so content/collections/vocabulary.json
references records with "../records/cat.json".project.json
The parsed in-memory
CourseProject (see Reader and writer)
carries more optional fields than the fixture writes, such as level, license,
contributors, funding, sponsors, and coverAssetId. The fixture keeps the manifest
minimal; a real course may populate more. Read defensively and treat extra fields as
optional.Loading order
- Read and parse
project.json. Reject an unknownformat; refuse aformatVersionhigher than you support, and upgrade one lower than yours (see File formats). - Load each collection file, then its
recordFiles. - Load each asset file.
- Load each lesson file, then each part file it references.
- Build the in-memory course and a binding resolver (see Resolving and rendering).