Follow-up to #155 / #154. `src/pipelines/ddi2xlsform/README.md` lists what a CDL codebook doesn't give back. Most of it can be carried, in standard DDI where it fits and a `cdl:` note otherwise (convention:ddiFields):
- List names: `cdl:list` on a select whose list isn't named after it (a grid member: after its grid).
- `or_other` shorthand: `cdl:or_other` on the pair's `varGrp type="other"` when the companion was synthesized.
- Note names: `cdl:note_names` next to a lead-in `preQTxt` (consecutive notes come back as separate rows).
- Intro/outro note position: `cdl:position` on `stdyDscr` (`in= after=`).
- Metadata rows (`start`, `deviceid`, …): `cdl:metadata` on `stdyDscr`, positioned the same way.
- Language names: `cdl:language` (tag → the form's column name), `default_language` as authored.
- Range bounds as authored (in `cdl:parameters`, `valrng` stays).
- All settings, not only `style` (`cdl:setting`).
Left as losses: a note's hint, rows no registry type covers (`calculate`, …), choice-sheet columns other than `exclusive`, a group without a label.
More round trips:
- LimeSurvey TSV → DDI → Instrument equals the TSV's Instrument.
- XLSForm → LimeSurvey → DDI → XLSForm equals XLSForm → LimeSurvey → XLSForm.
- XLSForm → DDI → XLSForm → LimeSurvey equals XLSForm → LimeSurvey.
- DDI → XLSForm → DDI is a fixpoint.
- The same on generated forms (fast-check).
Follow-up to #155 / #154. `src/pipelines/ddi2xlsform/README.md` lists what a CDL codebook doesn't give back. Most of it can be carried, in standard DDI where it fits and a `cdl:` note otherwise (convention:ddiFields):
Left as losses: a note's hint, rows no registry type covers (`calculate`, …), choice-sheet columns other than `exclusive`, a group without a label.
More round trips: