β Back to Converter
All metadata instructions the EQDS Word to XLSForm Converter can automatically detect and convert to valid XLSForm syntax.
Metadata type: Instruction01 and 1 produce the same resultQue. Ques. Q. Question before question names are stripped automaticallyFor [Q], or For [Q1] and [Q2], to target a specific question in a funnel groupOpen ended grid (text), Integer grid (integer), Decimal grid (decimal), Date grid (date)Constraint: Sum of all topics must not exceed 10Constraint: Only select 5 options β count-selected(.) <= 5NOTEA1, NOTEA2 etc.{} in a question label to display the label text of an option selected elsewhere1.1 How Instructions Are Written
Every metadata instruction appears as a paragraph above the question table:
Relevance: Display if DEM1 = 01
Constraint: Do not proceed if number > 65
Choice filter: Display options selected at WHL2a
1.2 Question Code Prefixes
Stripped automatically: Que. / Ques. / Q. / Question
1.3 Case Sensitivity
All triggers are case-insensitive. DISPLAY IF, display if, and Display If all produce identical results.
1.4 Leading Zeros
Handled automatically. 01, 1, '01', and "01" all produce the same result.
1.5 Targeting Specific Questions
Use For [Q], ... to direct an instruction at a specific question:
For HOB3b, display options selected at HOB3a
Display STK4bai, STK4baii and STK4baiii if 01 is selected at OOP2eiv
1.6 {} Reference Calls
Use {} in a question label to display the label text of an option selected at another question:
{reference option label selected at OM3a}
{option selected at OM3a}
β both produce ${OM3a_label}
Parentheses () are never treated as reference calls.
1.7 Question Code Rules
Every non-note question must begin with a unique code followed by a full-stop:
DEM1. What is your name? β correct
What is your name? β error: missing code
1.8 Group Hierarchy
Four nesting levels: Section β Subsection β Subsection Group β Questions
1.9 Open-Ended Grid Input Types
Open ended grid / Text grid β text
Integer grid / Int grid β integer
Decimal grid / Number grid β decimal
Date grid β date
1.10 Bold Hints
Hint text is wrapped in bold markdown (**text**) by default. Can be turned off in the converter UI.
| # | Pattern | Trigger Words | XLSForm Output | Column | Notes |
|---|
or name = '[code]'product_group = ${current_item}>> group headers in option table to tag choices with product_groupBoth phrasings accepted: filter through question funnel or filter through funnel
Q1 β no filter
Q2 β selected(${Q1}, name)
Q3 β selected(${Q2}, name)
Display IMR6a if IMR3 = 01 or IMR2 = 01
Display STK4bai, STK4baii, STK4baiii if 01 is selected at OOP2eiv
Only named questions get the condition. Unnamed siblings get none.
{reference option label selected at OM3a}
{option selected at OM3a}
β both produce ${OM3a_label} (label text, not code)
Write as a Constraint: instruction above the grid table. Applies to both open-ended grids and single choice grids:
Constraint: Sum of all topics must not exceed 10
Constraint: Sum of all topics must be = 10
Constraint: Sum of all topics must equal 10
Constraint: Sum of all topics must be equal to 10
Constraint: Sum of all topics must be at least 5
Important β the = n case: The equality check only fires when all subsequent topics are empty, meaning the current topic is the last one answered. All previous topics only enforce <= n. This correctly handles variable topic counts based on filtered selections β if only 3 of 10 topics are shown, the = n check fires on topic 3, not topic 10.
All produce count-selected(.) <= 5:
Constraint: Only select 5 options
Constraint: Select no more than 5 options
Constraint: Maximum 5 selections
Form A: Display if at least 2 options are selected at PRV1a
β count-selected(${PRV1a}) >= 2
Form B: Display if options selected at PRV1a > 1
β count-selected(${PRV1a}) > 1
Use 'exactly' for count equality (not '=').
No question named β applies to the current question (dot operator):
Do not proceed if 01 is not selected β selected(., '1')
Do not proceed if 01 is selected β not(selected(., '1'))
Do not proceed if 01, 02, and 03 is not selected
β selected(.,'1') and selected(.,'2') and selected(.,'3')
Pattern A β equals + selected-at:
Display if PRV2ci = 01 or 997 or 998 or 999 and 01 is selected at PRV1a
Pattern B β chained selected-at:
Display if 01 is selected at PRV2ci, or 997 or 998 or 999 and 01 is selected at PRV1a
Works for both Relevant and Constraint. 'Proceed if' keeps conditions positive.
Step 1 β Tag choices with >> group headers:
>> Toning cream
Moisturising 01
Step 2 β Write the choice filter:
Choice filter: filter by current item at ELI2
β product_group = ${current_item}
...and make 997, 998 always visible
β product_group = ${current_item} or name = '997' or name = '998'
Constraint: Phone number = Nigeria β regex(.,'^...$')
92 countries supported; unknown β [REVIEW]
Constraint: Allow only 11 digits β regex(.,'^[0-9]{11}$')
Constraint: Allow only 10 to 13 digits β regex(.,'^[0-9]{10,13}$')
Constraint: Make 997 exclusive and do not proceed if number > 65 and only select 3 options
β not(selected(.,'997')...) and . <= 65 and count-selected(.) <= 3
Relevant: Display if DEM1 = 01 and DEM2 is answered
β ${DEM1} = '1' and ${DEM2} != ''
Any compatible patterns joined by and/or in one instruction line.
Prefix any option label with ~ in the Word table:
~None 25
~Packaging doesn't really matter 06
~ from label in choices sheet${Q_label} calculatenot(selected(${Q},'code')) as relevant on any referencing questionOnly activates when ~ is explicitly present in the document.
The trigger paragraph appears above the first question of the repeat group and always starts with "Repeat group" (case-insensitive).
End Repeat Group or a section boundary| # | Instruction Pattern | Example | Notes |
|---|---|---|---|
| 1 | Repeat group for options selected at [Q] | Repeat group for options selected at MED1a | Repeats for every option selected at Q |
| 2 | Repeat group for all [Q] options | Repeat group for all MED1a options | Repeats for ALL options regardless of selection |
| 3 | Repeat group for options selected at [Q] but not selected at [Q2] | Repeat group for options selected at MED1a but not selected at MED1b | Only options in Q1 but not Q2 (exclusion) |
| 4 | Repeat group for options selected at [Q] and [Q2] | Repeat group for options selected at AWR1 and USE1 | Only options selected on BOTH Q1 and Q2 (intersection) |
| 5 | Repeat group for [v1],[v2]... selected at [Q] | Repeat group for 01 and 02 selected at MED1a | Specified codes only. Always Brand-Fixed Conditional Group Loop |
| 6 | Repeat group for [v1],[v2]... selected at [Q] but not selected at [Q2] | Repeat group for 01, 03 selected at AWR1 but not selected at USE1 | Subset + exclusion. Always Brand-Fixed |
| 7 | Repeat group for [v1],[v2]... selected at [Q] and [Q2] | Repeat group for 01, 03 selected at AWR1 and USE1 | Subset + intersection. Always Brand-Fixed |
| 8 | Repeat group for [Q] (short form) | Repeat group for PRV1a | Equivalent to full form. Uses Smart Auto-Select threshold |
Repeat group for 01 and 02 selected at MED1a
Repeat group for 01, 02 and 03 selected at MED1a