Documentation · Data Standards
ELM Dataset Standard
The full specification: how every ELM dataset is named, coded, reviewed, packaged and cited — with the rules a system needs to enforce it.
Select a segment to jump to its rules.
01 · Overview
One standard, applied to every dataset we publish. #
Scope
Every dataset collected, processed, licensed or published by ELM — across all languages and modalities, whether it came from the Annotation Studio, ELM Voice Studio, a partner, or a field collection.
What it covers
The two names every dataset carries (§3, §4), the registries behind each code segment (§6, §7, §8), what each validation state actually means (§9), how a dataset moves between states (§10), and how the whole thing is packaged, stored and cited (§11, §13).
Who it's for
Data collectors and annotation leads naming new datasets; engineers storing and serving them; researchers and licensees reading a code and deciding how far to trust it.
Quick reference
# format ELM-<LANGUAGE>-<MODALITY>-<TASK>-<STATUS>-<SEQUENCE> # example ELM-SWA-SPH-ASR-VAL-001 → Swahili · speech · built for speech recognition · validated · first of its kind # pattern ^ELM-[A-Z]{3}-(TXT|SPH|IMG|VID|MM) -(ASR|TTS|KWS|LID|SID|OCR|VQA|SLR|NER|CLS|SUM|POS|GEN|MT|ST|QA|LM) -(VAL|PAR|UNV)-[0-9]{3}$
Uppercase only. Hyphen separated. No spaces, underscores or accents. Exactly six segments.
02 · Terminology
Words we use precisely. #
| Term | Meaning |
|---|---|
| Dataset | A single published collection with one language, one modality profile, one licence and one code. |
| Record | The smallest reviewable unit: one utterance, one sentence pair, one image, one clip. |
| Stem | ELM-SWA-SPH-ASR-001 — the code without its status segment. Permanent; never changes. |
| Display code | ELM-SWA-SPH-ASR-VAL-001 — the full five-segment code. Changes when status changes. |
| Validation pass | One annotator reviewing a record against the task guidelines and marking it accepted, corrected or rejected. |
| Audit | A second, independent review of a random sample, used to confirm a first pass rather than to correct it. |
| Release | A frozen, checksummed snapshot of a dataset at a point in time. |
03 · The code name
Six segments, in a fixed order. #
The code name is the formal identifier used in systems, citations and licensing. It is deliberately readable: someone who has never seen the dataset should be able to say what language it is in, what it contains, what it was built to be used for, and how far it has been checked — all without opening it.
code = "ELM" "-" language "-" modality "-" task "-" status "-" sequence language = 3 uppercase letters ; ISO 639-3, uppercased (§6) modality = "TXT" | "SPH" | "IMG" | "VID" | "MM" ; what it contains (§7) task = 2-3 uppercase letters ; what it is for (§8) status = "VAL" | "PAR" | "UNV" ; how far it is checked (§9) sequence = 3 digits, "001" .. "999" ; (§3.6)
Rule 3.0
The code is generated from a dataset's metadata — never typed by hand into a second system. Store the stem and the status separately; render the display code from them. See §12 for the reference implementations.
3.1 Organisation #
Always ELM. It identifies Every Language Matters as the source of the dataset and is never abbreviated, localised or replaced — including for datasets built with a partner. Joint work is credited in the metadata (§11), not in the code.
3.2 Language #
Three letters, taken from the ISO 639-3 code for the language and written in uppercase — SWA for Swahili, BEM for Bemba, YOR for Yorùbá. The published registry is in §6.
- a.Use the individual language code when the dataset is one variety, and the macrolanguage code when it spans several. SWH is coastal Swahili; SWA covers Swahili broadly.
- b.Use MUL only when a dataset genuinely mixes languages and no single one dominates — a code-switching corpus, for example. A bilingual translation pair is not MUL; see rule c.
- c.For translation and speech-translation datasets, the language segment is the source language. Target languages are listed in the metadata.
- d.Script and region never enter the code. A dataset in a non-default script records it as an ISO 15924 tag in the metadata ("script": "Arab").
- e.UND (undetermined) is permitted only for unvalidated collections awaiting language identification, and must be resolved before the dataset can leave UNV.
3.3 Modality #
What the dataset actually contains, from the closed list in §7. Two rules decide the hard cases:
- a.A transcript that exists to describe the audio does not make a speech dataset multimodal. Speech with transcripts is SPH.
- b.Use MM when two or more modalities are aligned and both are the point of the dataset — video paired with speech, or images paired with spoken descriptions. If the modalities aren't aligned, publish them as separate datasets instead.
- c.Modality answers what is in the box. What the dataset is for is the task segment (§3.4) — SPH tells you there is audio, SPH-ASR tells you it is transcribed audio for recognition.
3.4 Task #
Two or three letters from the closed list in §8, naming what the dataset was built and labelled for: ASR for speech recognition, TTS for speech synthesis, MT for machine translation, CLS for classification. This is the segment that tells a researcher whether the dataset is any use to them.
- a.The task is decided by the annotations the dataset actually carries, not by what someone might repurpose it for. Speech with verbatim transcripts is ASR even if a team later trains a voice on it.
- b.Where a dataset genuinely supports more than one task, the code carries the primary one and the metadata lists the rest under also_supports (§11.2). Two tasks never share one code.
- c.Use LM for unlabelled corpora gathered for pretraining, and GEN for general collections built without a single task in view. Neither means "not decided yet" — an UNV dataset still declares its intended task on day one.
- d.The task never changes quietly. Re-annotating a dataset for a different task produces a new dataset with its own stem, recording the stem it was derived from (§10.5).
- e.Task and modality have to be compatible — TXT-TTS is not a valid pairing. The permitted combinations are in §8.
3.5 Status #
VAL, PAR or UNV, defined in full in §9. This is the only segment that changes over a dataset's life, which has one important consequence: the display code is a label, not a key. Systems, folder names and citations use the stem (§2); the status is stored as its own field and rendered alongside.
Do
datasets/ELM-SWA-SPH-ASR-001/
Stable path. Survives revalidation.
Don't
datasets/ELM-SWA-SPH-ASR-PAR-001/
Breaks every link the day the dataset is finished.
3.6 Sequence #
Three digits, zero-padded, counting from 001. The counter is scoped to the language and modality pair, so ELM-SWA-SPH-ASR-001 and ELM-SWA-TXT-MT-001 can both exist.
- a.Numbers are allocated at creation, in order, and are never reused — not even after a dataset is retired.
- b.The sequence carries no meaning beyond order of creation. It is not a quality rank, a size, or a version.
- c.Adding records to an existing dataset does not earn a new number. That's a new release (§10).
04 · The nickname
The name people will actually say out loud. #
Every dataset needs both names. The nickname is what appears in conversation, documentation and dataset listings; the code name is what appears in systems and citations. Neither one is optional.
- Two to six words, in title case.
- Lead with the language, then what makes it distinct: Bemba Radio Speech.
- Name the domain if the domain is the point: isiZulu Customer Support Transcripts.
- Say the job plainly when the dataset exists for one: Bemba Studio Read Speech reads as a voice dataset before anyone opens the code.
- Unique within its language.
- Written in the language's own orthography, diacritics included: Yorùbá News Corpus.
- ELM Swahili Dataset v2 — no ELM prefix, no version, no "dataset".
- SWA-SPH Collection — codes belong in the code name.
- Swahili Speech (Validated) — status is not part of the nickname; it changes.
- Batch 3 Final FINAL — internal working names never ship.
A nickname can be corrected for accuracy or spelling. When it is, the old name is kept in the metadata as an alias so existing references still resolve.
05 · Build & check a code
Assemble one, or paste one in. #
Builder
Swahili
Speech recognition
Display code
ELM-SWA-SPH-ASR-VAL-001
Stem
ELM-SWA-SPH-ASR-001
Swahili · speech · for speech recognition · validated · sequence 001
Validator
06 · Language codes
The published registry. #
Codes below are ISO 639-3, uppercased. Any language with a valid ISO 639-3 code may be used; this table lists the ones already in active collection, plus the two special codes. To add a language to the registry, see §15.
| Code | Language | Region | Type |
|---|---|---|---|
| SWA | Swahili | East Africa | Macro |
| SWH | Coastal Swahili | East Africa | Individual |
| BEM | Bemba | Zambia | Individual |
| NYA | Chichewa / Nyanja | Zambia, Malawi | Individual |
| TOI | Tonga | Zambia, Zimbabwe | Individual |
| LOZ | Lozi | Zambia | Individual |
| LUN | Lunda | Zambia | Individual |
| LUE | Luvale | Zambia, Angola | Individual |
| KQN | Kaonde | Zambia | Individual |
| SNA | Shona | Zimbabwe | Individual |
| ZUL | isiZulu | South Africa | Individual |
| XHO | isiXhosa | South Africa | Individual |
| SOT | Sesotho | Southern Africa | Individual |
| TSN | Setswana | Botswana | Individual |
| AFR | Afrikaans | South Africa | Individual |
| HAU | Hausa | West Africa | Individual |
| YOR | Yorùbá | West Africa | Individual |
| IBO | Igbo | Nigeria | Individual |
| WOL | Wolof | Senegal | Individual |
| BAM | Bambara | Mali | Individual |
| TWI | Twi | Ghana | Individual |
| EWE | Ewe | Ghana, Togo | Individual |
| LIN | Lingala | DR Congo | Individual |
| LUG | Luganda | Uganda | Individual |
| KIN | Kinyarwanda | Rwanda | Individual |
| AMH | Amharic | Ethiopia | Individual |
| SOM | Somali | Horn of Africa | Individual |
| MLG | Malagasy | Madagascar | Macro |
| MUL | Multiple languages | — | Special |
| UND | Undetermined | — | Special |
No language matches that filter. Any valid ISO 639-3 code can still be used — propose it for the registry in §15.
07 · Modality codes
A closed list of five. #
| Code | Modality | Contains | Typical formats |
|---|---|---|---|
| TXT | Text | Written language: articles, transcripts, dialogue, documents, translation pairs. | .txt .jsonl .csv |
| SPH | Speech | Spoken audio recordings, with or without transcripts. | .wav + .jsonl |
| IMG | Image | Visual data, such as photographed text, signage or documents. | .jpg .png + .jsonl |
| VID | Video | Video recordings, often paired with speech or sign language. | .mp4 + .jsonl |
| MM | Multimodal | Two or more aligned modalities, such as video with speech and transcript. | mixed + manifest |
Note
The list is closed: a modality that doesn't fit one of these five needs a registry change (§15), not an improvised code. Modality is only half the picture — pair it with the task code in §8 to say what the dataset is for. Speech datasets follow ELM Voice Studio's convention of WAV for both source and export.
08 · Task codes
What the dataset was built to be used for. #
Modality tells you a dataset contains speech. It doesn't tell you whether that speech is transcribed word-for-word for a recogniser, recorded in a studio for a voice, or paired with a translation. The task segment closes that gap, so a researcher can rule a dataset in or out before downloading it.
| Code | Task | Modalities | What the data looks like |
|---|---|---|---|
| ASR | Speech recognition | SPH, MM | Recordings with verbatim transcripts, for training and evaluating speech-to-text. |
| TTS | Speech synthesis | SPH | Clean, consistent recordings from few speakers with exactly matched text. |
| ST | Speech translation | SPH, MM | Speech in one language paired with text or speech in another. |
| KWS | Keyword spotting | SPH | Short clips labelled against a fixed vocabulary of trigger words. |
| SID | Speaker identification | SPH | Recordings labelled by pseudonymous speaker. |
| LID | Language identification | SPH, TXT | Samples labelled with the language they are in. |
| MT | Machine translation | TXT | Aligned sentence or document pairs across two languages. |
| CLS | Classification | TXT, IMG, SPH | Records labelled by category — topic, sentiment, intent, spam or scam. |
| NER | Named entity recognition | TXT | Entity spans marked in running text. |
| POS | Tagging & morphology | TXT | Token-level grammatical annotation. |
| QA | Question answering | TXT, MM | Questions paired with answers, with or without a supporting passage. |
| SUM | Summarisation | TXT | Documents paired with summaries. |
| OCR | Text recognition in images | IMG, VID | Images of written text with ground-truth transcription. |
| VQA | Visual question answering | IMG, MM | Images paired with questions and answers about them. |
| SLR | Sign language recognition | VID, MM | Signed video with glosses or translations. |
| LM | Language modelling | TXT | Raw or lightly cleaned corpora for pretraining. No task labels. |
| GEN | General purpose | any | Collected without one task in view; usable as a starting point for several. |
8.1 Choosing the right one
- a.Ask what a model could be trained or evaluated on with these labels, as they exist today. If the honest answer is "nothing yet", the code is LM or GEN.
- b.ASR and TTS both pair audio with text, but they are not interchangeable: ASR wants many speakers and real conditions, TTS wants few speakers and clean, consistent recording. Label by what the collection was designed for.
- c.Anything labelled by category — sentiment, topic, intent, spam or scam messages — is CLS. The specific label set lives in the metadata, not the code.
- d.A dataset whose task cannot be named without a compound ("ASR-CLS") is two datasets, or one dataset with an also_supports entry. Compounds are not valid codes.
- e.The list is closed. A task that isn't here needs a registry change (§15), not an improvised code.
8.2 The same language and modality, three different jobs
Bemba Radio Speech
Broadcast audio with verbatim transcripts. Many speakers, real background noise — the right shape for a recogniser, the wrong shape for a voice.
Bemba Studio Read Speech
Four speakers reading a balanced script in one room, at one level. Same language, same modality, entirely different job.
Chichewa Scam Message Collection
SMS messages gathered for scam detection. Categories defined, labelling not yet started.
Multilingual Web Corpus
Mixed-language text for pretraining. No task labels, and the code says so plainly.
09 · Validation states
What each state promises. #
Validated
Every record reviewed and accepted, plus an independent audit of a random sample that agrees with the first pass. Ready to be used or licensed with confidence.
Partially validated
Some of it has been reviewed — a sample, or work in progress. Usable, provided the reviewed share is published alongside it.
Unvalidated
Collected but not yet reviewed. May contain errors, duplicates or misidentified language. Treat accordingly.
9.1 Criteria
| Status | Records reviewed | Audit required | Must publish |
|---|---|---|---|
| VAL | 100% | Independent second pass on ≥ 5% of records, ≥ 95% agreement | Audit sample size, agreement rate, date of last pass |
| PAR | 1% – 99% | Not required | Reviewed share, and whether the reviewed portion is a random sample or a contiguous block |
| UNV | 0% | Not applicable | Collection method and date |
Rule 9.2
A validated dataset that fails its audit returns to PAR until the disagreements are resolved and the audit is repeated. Status is only ever raised by evidence recorded in the metadata — never by assertion.
10 · Lifecycle
How a dataset moves, and what moves with it. #
collected review begins review complete + audit passes
│ │ │
▼ ▼ ▼
UNV ───────────────▶ PAR ──────────────────────────▶ VAL
▲ │
└──────────────────────────────┘
audit fails, or new unreviewed records added
- 10.1Status transitions are recorded with a date and the annotator or lead responsible. The history stays in the metadata; the code only shows the current state.
- 10.2Adding records to a VAL dataset drops it to PAR until the new records are reviewed. Nothing silently inherits a validated status.
- 10.3Releases are numbered MAJOR.MINOR.PATCH. Major means records were removed or re-scoped; minor means records were added; patch means corrections only. The version lives in the metadata, never in the code.
- 10.4Retiring a dataset never frees its stem. A retired dataset keeps its code, is marked retired in the metadata with a reason, and stays resolvable so old citations don't break.
- 10.5Splitting a dataset creates new stems with new sequence numbers, each recording the stem it came from. Merging is not permitted — publish a new dataset that names its sources instead.
11 · Package & metadata
What ships with every dataset. #
11.1 Directory layout
ELM-SWA-SPH-ASR-001/ ├── dataset.json metadata, machine readable (§11.2) ├── README.md the same information, credits included, for a reader ├── LICENCE.txt the licence for this dataset specifically ├── data/ │ ├── audio/ WAV, one file per record │ └── transcripts/ ├── metadata/ │ ├── records.jsonl one line per record, incl. review state │ └── speakers.jsonl pseudonymised speaker profiles └── checksums.sha256
The folder is named with the stem, not the display code — see §3.5. Speaker identity, contact details and raw consent forms never enter the package; only pseudonymous identifiers do.
11.2 dataset.json
{
"stem": "ELM-SWA-SPH-ASR-001",
"display_code": "ELM-SWA-SPH-ASR-VAL-001",
"nickname": "Swahili Everyday Speech",
"aliases": [],
"language": { "code": "swa", "name": "Swahili", "script": "Latn" },
"modality": "SPH",
"task": "ASR",
"also_supports": ["LID"],
"validation": {
"status": "VAL",
"reviewed_share": 1.0,
"audit_share": 0.05,
"audit_agreement": 0.97,
"last_pass": "2026-07-14"
},
"content": { "records": 18420, "duration_hours": 62.4, "speakers": 214 },
"collection": { "method": "prompted recording", "tool": "ELM Voice Studio",
"started": "2026-02-03", "consent": "recorded" },
"credits": {
"authors": [
{ "name": "Mwaka Chanda", "role": "collection lead",
"affiliation": "Every Language Matters", "orcid": "0000-0002-1825-0097" },
{ "name": "Asha Juma", "role": "annotation lead",
"affiliation": "Every Language Matters" }
],
"contributors": [
{ "name": "ELM Swahili annotation team", "role": "validation", "count": 9 }
],
"contact": "https://everylanguagematters.com/contacts",
"acknowledgements": "Recording space provided by the Lusaka community radio network."
},
"release": { "version": "1.2.0", "date": "2026-07-21" },
"licence": "ELM-DATA-1.0",
"checksums": "checksums.sha256"
}
| Field | Required | Notes |
|---|---|---|
| stem | Always | Permanent identifier. Immutable once assigned. |
| display_code | Always | Derived. Regenerate whenever status changes. |
| nickname | Always | Rules in §4. Superseded names move to aliases. |
| task | Always | The task the annotations support (§8). Matches the task segment of the stem. |
| also_supports | Optional | Other tasks the data can serve as labelled. Empty array where there are none. |
| credits.authors | Always | Named and ordered, at least one. The people answerable for the dataset — see §11.3. |
| credits.contributors | Optional | Everyone who worked on it without meeting the author bar. Teams may be credited collectively with a count. |
| credits.contact | Always | Where questions about the dataset go. A route, not a personal address. |
| validation.reviewed_share | PAR, VAL | Decimal 0–1. The number behind the status. |
| validation.audit_* | VAL only | The evidence a VAL claim rests on. |
| collection.consent | Always | How consent was obtained for the recorded material. |
| content.duration_hours | SPH, VID, MM | Omit where it doesn't apply rather than writing zero. |
| licence | Always | Each dataset carries its own licence; there is no blanket one. |
11.3 Credit
Datasets are work, and the people who did that work are named in the metadata so the credit travels with the data instead of living in someone's memory. credits.authors is required and ordered — it is the author list a citation uses (§13).
- a.An author is someone who shaped the dataset: designed the collection, led the recording or gathering, wrote the annotation guidelines, or led validation. Approving a budget or hosting the files is not authorship.
- b.Order is agreed by the authors themselves before the first release and recorded as given — not alphabetical, not by seniority.
- c.Annotators and reviewers who worked to the guidelines go in contributors: named individually where they've agreed to be, or collectively with a count where they'd rather not be.
- d.Speakers, writers and other data subjects are never listed as authors or contributors. They stay pseudonymous in speakers.jsonl and are credited in the aggregate.
- e.Record an orcid where the author has one. Affiliation is recorded as it stood at the release, and isn't rewritten when someone moves on.
- f.The author list belongs to a release. A later release that adds substantial new work may add authors; it never removes them and never reorders the ones already published.
- g.Partner-built datasets name the partner's people alongside ours, each with their own affiliation. The organisation segment of the code stays ELM either way (§3.1).
12 · Implementation
Enforce it in code, not in review. #
Pattern
# modality and task groups, written out once MOD = TXT|SPH|IMG|VID|MM TASK = ASR|TTS|KWS|LID|SID|OCR|VQA|SLR|NER|CLS|SUM|POS|GEN|MT|ST|QA|LM # display code ^ELM-[A-Z]{3}-(MOD)-(TASK)-(VAL|PAR|UNV)-[0-9]{3}$ # stem ^ELM-[A-Z]{3}-(MOD)-(TASK)-[0-9]{3}$
Python
import re
MODALITY = "TXT|SPH|IMG|VID|MM"
TASK = "ASR|TTS|KWS|LID|SID|OCR|VQA|SLR|NER|CLS|SUM|POS|GEN|MT|ST|QA|LM"
CODE = re.compile(
"^ELM-(?P<language>[A-Z]{3})"
"-(?P<modality>" + MODALITY + ")"
"-(?P<task>" + TASK + ")"
"-(?P<status>VAL|PAR|UNV)"
"-(?P<sequence>[0-9]{3})$"
)
def parse(code: str) -> dict:
match = CODE.match(code.strip().upper())
if not match:
raise ValueError(f"{code!r} is not a valid ELM dataset code")
return match.groupdict()
def display_code(stem: str, status: str) -> str:
org, language, modality, task, sequence = stem.split("-")
return "-".join([org, language, modality, task, status, sequence])
PHP · Laravel
// config/datasets.php 'modalities' => ['TXT', 'SPH', 'IMG', 'VID', 'MM'], 'tasks' => ['ASR', 'TTS', 'ST', 'KWS', 'SID', 'LID', 'MT', 'CLS', 'NER', 'POS', 'QA', 'SUM', 'OCR', 'VQA', 'SLR', 'LM', 'GEN'], // validation $mod = implode('|', config('datasets.modalities')); $task = implode('|', config('datasets.tasks')); 'stem' => ['required', "regex:/^ELM-[A-Z]{3}-($mod)-($task)-[0-9]{3}$/"], 'status' => ['required', Rule::in(['VAL', 'PAR', 'UNV'])], // App\Models\Dataset — never store the display code protected function displayCode(): Attribute { return Attribute::get(function () { [$org, $language, $modality, $task, $sequence] = explode('-', $this->stem); return implode('-', [$org, $language, $modality, $task, $this->status, $sequence]); }); }
PostgreSQL
ALTER TABLE datasets
ADD CONSTRAINT datasets_stem_format
CHECK (stem ~ '^ELM-[A-Z]{3}-(TXT|SPH|IMG|VID|MM)'
'-(ASR|TTS|KWS|LID|SID|OCR|VQA|SLR|NER|CLS|SUM|POS|GEN|MT|ST|QA|LM)-[0-9]{3}$');
ALTER TABLE datasets ADD CONSTRAINT datasets_stem_unique UNIQUE (stem);
13 · Citation
Cite the stem, name the release. #
A citation has to stay true after a dataset is revalidated, so it points at the stem and the release, and states the status as it stood on the day the work was done. It opens with the author list from credits.authors (§11.3), in the order recorded there.
# with named authors Chanda, M., & Juma, A. (2026). Swahili Everyday Speech (Version 1.2.0) [Data set]. Every Language Matters. ELM-SWA-SPH-ASR-001, status VAL as of 2026-07-21. https://everylanguagematters.com/datasets/ELM-SWA-SPH-ASR-001 # seven or more authors Chanda, M., et al. (2026). Swahili Everyday Speech (Version 1.2.0) [Data set]. Every Language Matters. ELM-SWA-SPH-ASR-001, status VAL as of 2026-07-21. https://everylanguagematters.com/datasets/ELM-SWA-SPH-ASR-001
- a.Papers reporting results on a PAR dataset should state the reviewed share they trained or evaluated on.
- b.The task segment is part of the stem, so a citation already states what the dataset was built for. Don't drop segments to shorten it.
- c.Every Language Matters is the publisher, not the author. A complete citation names both.
- d.Licences attach to a release, not to a stem. Check the LICENCE.txt in the copy you actually received.
14 · Checklist
Before a dataset is published. #
- Code name matches the pattern, and the language code is in the registry or has been proposed.
- Sequence number allocated from the register for that language and modality, and not reused.
- Nickname follows §4 and is unique within the language.
- Task code matches the annotations the dataset actually carries, and is valid for its modality (§8).
- Status matches the evidence in dataset.json — reviewed share, and audit figures for VAL.
- Folder is named with the stem; no status in any path.
- Author list agreed and ordered by the authors themselves, with contributors credited as they consented (§11.3).
- Licence file present and specific to this dataset.
- Consent recorded, and no personal identifiers in the package.
- Checksums generated and verified against the release.
- README carries the same figures as the metadata.
15 · Governance
Changing the standard. #
Adding a language to the registry, adding a modality code, or changing a validation threshold is a change to this document. Send the proposal — what you want to add, why the existing codes don't cover it, and the datasets affected — through the contacts page. Registry additions are usually decided within a week; changes to the code format itself are versioned and announced on the news page before they take effect.
15.1 Change log
| Version | Date | Change |
|---|---|---|
| 1.0 | 21 July 2026 | First published standard: code format, modality codes, validation states, metadata and packaging. |
ELM Dataset Standard · v1.0
Cite this version by its URL. It is not edited in place — a dataset named under v1.0 is governed by v1.0.