You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Goal: a DDI Codebook that formtransform writes carries the whole form, so XLSForm → DDI → XLSForm gives back the same form. "Same" is judged on the Instrument model, not on bytes.
Approach (B: every field in the DDI itself)
The DDI stays the single source of truth. Everything the form needs goes into standard DDI elements where one fits, and otherwise into CDL-typed <notes>. The DDI 2.5 XSD provides type and subject on <notes> for exactly this kind of controlled vocabulary. An edit made in qwacback (concept tags, merged studies) therefore flows back into the form.
Rejected: embedding the whole form as JSON in one note (A). It's exact by construction, but it creates a second source of truth that drifts as soon as qwacback edits the DDI.
Goal: a DDI Codebook that formtransform writes carries the whole form, so XLSForm → DDI → XLSForm gives back the same form. "Same" is judged on the
Instrumentmodel, not on bytes.Approach (B: every field in the DDI itself)
The DDI stays the single source of truth. Everything the form needs goes into standard DDI elements where one fits, and otherwise into CDL-typed
<notes>. The DDI 2.5 XSD providestypeandsubjecton<notes>for exactly this kind of controlled vocabulary. An edit made in qwacback (concept tags, merged studies) therefore flows back into the form.Rejected: embedding the whole form as JSON in one note (A). It's exact by construction, but it creates a second source of truth that drifts as soon as qwacback edits the DDI.
Parts
relevant/constraint/constraint_messageas typed notes plus<universe>prose. See the comment there for corrections.<varGrp>for every group, notes kept apart from hints.cdl:note (type, required, default, appearance, parameters, list name, settings), plus a registry guard that noInstrumentfield is unmapped.Instrumentparser,ddi2xlsform, the round-trip contract test (fixtures + generated forms), Schematron rules for the vocabulary, and the ARCHITECTURE.md scope change.1–3 are independent emitter changes, each useful on its own for codebook readers. 4 needs them.
Limits
Decisions for qwacback
ddi2xlsformthrough theddi-emittersidecar instead of keeping its Go converter.count(notes) <= 1.