Veydrin Language Data Standard

VLDS v1.0

An open, offline-first data format for a single language-learning lesson. Language-agnostic and audio-first: a set of items, each a source-language cue and one target-language variant per declared dialect, with a register, a pronunciation aid, and open-licensed audio that carries its attribution, a text alternative, and its provenance.

VLDS v1.0 CC-BY-4.0 JSON Schema 2020-12 Draft, one reference implementation
§ 1

Overview and Design Philosophy

VLDS specifies one lesson: the smallest unit a learner practises. A lesson is an ordered set of items. Each item pairs a cue in the language the learner already reads with the phrase to produce in the language being learned, given once per dialect the lesson teaches, plus an optional pronunciation aid and optional audio. VLDS is the content layer only. How lessons are packaged, distributed, discovered, or scheduled for review is out of scope and belongs to other layers.

Four principles decide every field:

Conventions. The key words "MUST", "MUST NOT", "REQUIRED", "SHOULD", "SHOULD NOT", and "MAY" in this document are to be interpreted as described in BCP 14 (RFC 2119, RFC 8174) when, and only when, they appear in all capitals. A VLDS document is a single JSON object. All strings that carry human-readable language MUST be in Unicode Normalization Form C (NFC). All language and dialect tags are BCP 47. The authoritative machine-readable schema is vlds-v1.0.schema.json (JSON Schema 2020-12).

Status. Per RFC 6410, a specification with a single interoperable implementation is a draft, not an internet standard. VLDS v1.0 has one reference implementation (the Cymanfa learning app). It is published as a stable, frozen draft: the wire format below will not change under the 1.x line, but the standard is honestly labelled a draft until a second independent implementation exists.
§ 2

Scope

VLDS covers the content of one lesson: its identity, the language and dialects it teaches, its items, and the text, pronunciation, and audio of each item. It is intended for beginner-to-advanced spoken-language curricula, community-authored courses, and offline apps.

VLDS does not try to be:

Relationship to existing standards (informative)

VLDS is a content standard whose nearest neighbours are complementary, not competitive. A lesson can be packaged for a learning-management system as Common Cartridge and integrated over LTI 1.3; practice events can be emitted as xAPI 2.0 (IEEE 9274.1.1-2023); catalogue records can be expressed in LOM or Dublin Core; scored variants can be authored in QTI 3.0. VLDS deliberately does not absorb any of these. It is the small, portable, offline unit they can each wrap.

§ 3

The Lesson Object

A VLDS document is one lesson object.

FieldTypeReq?Description
vlds_versionstringreqSpecification version, a "1.x" string. Consumers MUST accept any lesson whose major number they recognise.
idstringreqStable lesson identifier, unique within its pack.
languagestringreqBCP 47 tag of the target language taught, e.g. "cy". A language with no ISO code uses a private-use tag such as "qaa".
titlelang_mapreqLesson title, one entry per source language (§7).
dialectsdialect[]reqOrdered, non-empty list of the dialects this lesson provides (§4). A language with no dialect axis declares a single dialect, recommended id "std".
voicesvoice[]optDeclared voices (§4). When present, every audio map key MUST be one of these ids.
itemsitem[]reqThe lesson's items, in order (§5). At least one.
_*anyoptPrivate annotation keys, prefixed with an underscore (§8).

No other top-level keys are permitted, except underscore-prefixed annotations.

§ 4

Dialects and Voices

Dialect

A dialect is one variety of the target language the lesson teaches. The set is declared once at the top of the lesson and referenced by id in each item.

FieldTypeReq?Description
idstringreqPack-chosen token, e.g. "north". Unique within the lesson. Use "std" for a language with no dialect axis.
tagstringoptA single BCP 47 tag for the dialect. Private-use subtags (e.g. "cy-x-north") are permitted but not interoperable.
labellang_mapreqDisplay label, one entry per source language.

Voice

A voice is a named speaker or synthetic voice. Declaring voices lets a lesson offer the same phrase in more than one voice and lets a consumer let the learner choose.

FieldTypeReq?Description
idstringreqVoice identifier, e.g. "female". Audio maps key on this id.
labellang_mapoptDisplay label per source language.
genderenumoptfemale · male · neutral.
§ 5

Item and Variant

Item

An item is one thing to practise: a cue, and the target-language variant for each declared dialect.

FieldTypeReq?Description
idstringreqItem identifier, unique within the lesson.
cuelang_mapreqThe prompt, in one or more source languages. A learner whose source language is Welsh can be given a Welsh cue rather than an English one.
registerstringreqThe register of this item. An open string so any language can name its own registers; "formal" and "colloquial" are the recommended defaults, mapped to LexInfo register individuals. See the limitation in §11.
cue_audioaudio_clipoptAudio for the cue itself (§6).
targetsmapoptMap of dialect id to that dialect's variant. Keys MUST be declared dialect ids.
sharedvariantoptA single variant used for any declared dialect that has no targets entry. Use it for phrases that do not vary by dialect, so identical variants are not duplicated.
Coverage rule. For every item, every dialect declared at the top of the lesson MUST be resolvable: it MUST have an entry in targets, or the item MUST provide a shared variant to stand in for it. A lesson that declares a dialect it never teaches is invalid. This rule spans two fields and cannot be expressed in JSON Schema alone; it is a conformance criterion (P4) a validator MUST enforce.

Variant

A variant is the phrase to say in one dialect, with its pronunciation and audio.

FieldTypeReq?Description
textstringreqThe phrase to say, in Unicode NFC.
pronunciationobjectoptipa (IPA, BCP 47 fonipa) and/or respell, a respelling aid. See §11.
licenseenumoptSPDX id of the text's licence when it differs from the pack's content licence, e.g. a sentence ingested from an upstream corpus.
attributionobjectoptCredit for the text. REQUIRED when license is any CC-BY variant.
sourcestringoptURI of an upstream record this text comes from, e.g. a Wikidata Lexeme sense or a community-corpus sentence.
audiomapoptMap of declared voice id to an audio clip (§6). At least one entry when present.
§ 6

Audio Clip

An audio clip is a single recording or synthesis of a phrase, carrying everything a lawful, accessible, honest reuse needs: the source, the licence, the attribution, a text alternative, and whether a human or a machine produced it.

FieldTypeReq?Description
srcstringreqApp-relative path or URL to the audio. Omitting the whole clip degrades to text and is not a violation; a present clip MUST name its source.
licenseenumreqSPDX id from the open allow-list (§7).
source_typeenumreqhuman (IPTC digitalCapture) or synthetic (IPTC trainedAlgorithmicMedia). Machine-detectable provenance, required so a consumer or regulator can tell recorded speech from generated speech.
attributionobjectoptCredit. REQUIRED when license is any CC-BY variant; optional for CC0.
transcriptstringoptText alternative for the audio (WCAG 2.2 SC 1.2.1). A consumer that finds no transcript MUST use the variant text as the transcript.
generated_bystringoptFor synthetic audio: engine, voice, and version.
provisionalbooleanoptSHOULD be true while audio is synthetic and not yet human-reviewed.
modifiedbooleanoptWhether the clip was edited after capture or synthesis.
modification_notestringoptWhat was changed. REQUIRED when modified is true.

Attribution

The attribution object (used by clips and by ingested text) is name (required), and optional url and title. name credits a person, pseudonym, or organization; see the privacy note in §10.

§ 7

Full Example

A one-item Welsh lesson teaching North and South, in a female voice, with synthetic audio marked provisional. It validates against the VLDS v1.0 schema. lang_map values are maps of BCP 47 tag to an NFC string; the open-licence enum is the SPDX allow-list (CC0 and the CC-BY / CC-BY-SA versions only, never NonCommercial or NoDerivatives).

{
  "vlds_version": "1.0",
  "id": "seed-01",
  "language": "cy",
  "title": { "en": "Greetings and small talk", "cy": "Cyfarch a sgwrsio" },
  "dialects": [
    { "id": "north", "tag": "cy-x-north", "label": { "en": "North", "cy": "Gogledd" } },
    { "id": "south", "tag": "cy-x-south", "label": { "en": "South", "cy": "De" } }
  ],
  "voices": [ { "id": "female", "gender": "female" } ],
  "items": [
    {
      "id": "bore-da",
      "cue": { "en": "good morning" },
      "register": "colloquial",
      "shared": {
        "text": "bore da",
        "pronunciation": { "respell": "BOR-eh dah", "ipa": "/ˈbɔrɛ daː/" },
        "audio": {
          "female": {
            "src": "lessons/audio/seed-01/bore-da-female.mp3",
            "license": "CC0-1.0",
            "source_type": "synthetic",
            "generated_by": "piper cy_north 1.0",
            "provisional": true
          }
        }
      }
    }
  ]
}

Here bore da is identical in both dialects, so a single shared variant covers north and south rather than repeating them under targets. An item whose wording differs by dialect gives one entry per dialect id under targets instead.

§ 8

Extension Mechanism

VLDS is deliberately closed: no undeclared keys are allowed anywhere, so a typo is an error rather than silently ignored data. The one escape is annotation. Any object MAY carry keys whose names begin with an underscore (_). These are private annotations, not part of the wire format.

Why not a namespaced registry. Sibling standards that expect third-party payloads (VODS) define a governed extensions namespace with ownership and collision rules. VLDS expects a single, curated authoring path rather than arbitrary third-party payloads inside a lesson, so it offers only private annotations and pushes anything interoperable into a versioned field. This is a deliberate limitation, recorded in §11.
§ 9

Versioning and Compatibility

The version is vlds_version, a MAJOR.MINOR string. v1.0 is the first release.

§ 10

Security and Privacy Considerations

Untrusted content

A lesson is data from a potentially untrusted author, especially a community-contributed or downloaded one. A consumer MUST treat every string (text, cue, transcript, labels, notes) as untrusted input and MUST NOT render it as markup or evaluate it. src and source are author-supplied URIs: a consumer SHOULD constrain src to expected schemes and origins before fetching, and MUST fail safe (degrade to text) on a clip that does not load, rather than blocking the lesson.

Personal data in attribution

The attribution.name field, and a personal generated_by or url, can carry a real person's name and a link to them. This is the only personal data VLDS defines, and it is present by design, because open-licence attribution legally requires it. Authors SHOULD prefer a pseudonym or an organization where a contributor wishes it, and consumers republishing lessons MUST preserve attribution rather than stripping or altering it. VLDS carries no learner data of any kind: it is content, not a record of anyone's activity.

Resource limits

A consumer SHOULD bound the size and item count of a lesson it will load, so a hostile document cannot exhaust memory.

§ 11

Known Limitations

§ 12

Conformance

An implementation claims VLDS v1.0 conformance as a Producer, a Consumer, or both. The machine-readable schema at vlds-v1.0.schema.json checks structure; the criteria below add the cross-field and normalization rules a schema cannot express. Each criterion has a stable identifier.

Producer, a tool that emits VLDS

Consumer, a tool that reads VLDS

Test vectors

Conformance vectors accompany this specification in the examples/ directory beside the schema: a set of valid lessons that every consumer MUST accept, and invalid lessons (a missing required field, an uncovered dialect, an undeclared voice key, a CC-BY clip with no attribution, a non-NFC string, a NonCommercial licence) that every conforming validator MUST reject, one per criterion above. The reference implementation exercises these vectors in its VLDS conformance suite.

§ 13

Glossary

ItemOne thing a learner practises: a cue and its target-language variant per dialect.
CueThe prompt shown or spoken in a language the learner already reads, keyed by source language.
VariantThe phrase to produce in the target language for one dialect, with its pronunciation and audio.
DialectA declared variety of the target language. Named as data by the pack, not fixed by the format.
RegisterThe social level of a phrase, e.g. formal or colloquial.
lang_mapA map of BCP 47 language tag to a non-empty NFC string, used wherever text is language-keyed.
ProvenanceWhether audio was captured from a human or generated by a machine, and by what, per source_type.
NFCUnicode Normalization Form C, the canonical composed form required for all text (UAX #15).
§ 14

References

Normative

ReferenceRole
JSON Schema 2020-12The authoritative schema dialect for vlds-v1.0.schema.json.
RFC 2119 / RFC 8174Requirement keywords (BCP 14).
BCP 47 / RFC 5646Language and dialect tags, and the fonipa subtag for IPA.
Unicode UAX #15Normalization Form C, required for all text.
SPDX License ListThe identifiers used by every license field.
Creative Commons 4.0 (and ported versions)The legal terms behind the CC0 / CC-BY / CC-BY-SA allow-list.
WCAG 2.2 SC 1.2.1Audio-only text alternative, the basis for transcript and its fallback.
IPTC digitalSourceTypeThe controlled vocabulary behind source_type (digitalCapture / trainedAlgorithmicMedia).

Informative

ReferenceRelationship
VODS v1.0The Veydrin envelope that packages lessons into a distributable pack; the layer above VLDS.
1EdTech QTI 3.0Assessment authoring; the scored-question domain VLDS is not.
xAPI 2.0 (IEEE 9274.1.1-2023) / cmi5Learning-activity records a consumer can emit; VLDS carries none.
IEEE 1484.12.1 LOM / Dublin CoreCatalogue metadata for discovery; complementary, not carried here.
Common Cartridge / LTI 1.3Packaging and LMS integration a lesson can be wrapped for.
IPA / OntoLex-Lemon & LexInfoPronunciation and register vocabularies VLDS points at.
EU AI Act Art. 50 / EN 301 549 / Section 508Why machine-detectable AI-audio labelling and a text alternative are required, not optional, for a public-sector-facing standard.
C2PA Content CredentialsCandidate for a future signed-provenance field (§11).
§ 15

Changelog

VersionDateChanges
1.02026-08-29Initial release. Language-agnostic lesson object: declared dialects and voices; items with a language-keyed cue, an open-string register, per-dialect and shared variants; per-clip open licence, attribution, transcript, and source_type provenance; Producer criteria P1 through P8 and Consumer criteria C1 through C5; JSON Schema 2020-12.