Measurement-type registry
The measurement-type registry is the interop anchor for Measurement.type (§4.1,
§4.5) and for the canonical channel-naming convention on a
location Measurement’s sampleArray. Like the exercise registry,
it is a separate, independently-versioned, fetchable artifact, decoupled from the
spec — the spec defines the mechanism (source-native namespacing with lazy semantic
resolution, §4.4); the registry ships content on its own cadence. The data is CC0.
It lives in the openbody-registry repository, under vocab/measurements/.
A separate registry from the exercise registry
Measurement types are Pillar A — Observation/telemetry (heart rate, sleep, body
composition, activity, power); the exercise registry is Pillar B — Structured Training
(movement ids and their facets). Different domains, no subject-matter overlap, and — as
below — a different, flatter model. Both are CC0 registry content decoupled from the core
openbody spec repo, so they ship together from openbody-registry as two
independently-evolving registries.
Flat controlled vocabularies, not combinatorial entries
Unlike the exercise registry, this registry has no canonical-entry-with-facets model and no crosswalk — measurement types are flat categorical tokens, not combinatorial movements. Each vocabulary is a controlled-vocabulary file in the open-token-set shape already used elsewhere in the spec for open, registry-backed fields (§5.9).
| File | Covers |
|---|---|
cardiovascular.json | Measurement.type — heart rate, resting HR, HRV, VO2max |
respiratory.json | Measurement.type — respiratory subset |
sleep.json | Measurement.type — sleep subset (§4.3) |
body-composition.json | Measurement.type — body mass, body-fat %, etc. |
activity.json | Measurement.type — activity/energy subset |
power-pace.json | Measurement.type — power/pace subset |
location-channel.json | Measurement.sampleArray.channels[].name for type: "location" — lat/lon/alt/speed/course |
See the registry’s top-level vocab/index.json for the authoritative manifest.
Entry model
{ "token": "heart_rate_variability", "label": "Heart Rate Variability", "aliases": ["hrv"], "description": "Most commonly RMSSD; producers SHOULD note the method (RMSSD/SDNN/etc.) in provenance or notes if not RMSSD. Recommended unit: ms."}A token’s recommended UCUM unit is noted in its description as a hint only — the
record’s own unit field is authoritative (§4.1), not this file.
Scope (v1)
A narrow, hand-curated high-frequency wedge — the measurement types every mainstream health/fitness platform already exposes (Apple Health, Garmin, Google Health Connect, Whoop, Oura, Strava) — not an exhaustive clinical taxonomy.
How to contribute
- Decide which vocabulary file the token belongs in (or whether a new domain file is warranted).
- Add
{ token, label, description }(plusaliasesif useful); note the recommended UCUM unit in the description. - Validate:
npm run check(schema conformance + token format/uniqueness within a file + cross-file token uniqueness). Green is required.
Licensing
Registry data is CC0 — the interop registry must be completely unencumbered.