Body

The form body is what is actually displayed to the user. Each body element must reference one of the nodes in the instance using the ref="".

String, integer, decimal, date, geopoint, barcode

<input ref="node1">
  <label>prompt label</label>
  <hint>optional prompt hint</hint>
</input>

Select multi

<!-- the <label> for each element is what the user will see. -->
<!-- the <value> will be what gets sent with the data. -->
<!-- Note: text between the <value> tags must not contain spaces. -->
<select ref="node2">
  <label>Please select colors you like</label>
  <hint>You can pick several, or none</hint>
  <item>
    <label>Blue</label>
    <value>blue</value>
  </item>
  <item>
    <label>Green</label>
    <value>green</value>
  </item>
  <item>
    <label>Yellow</label>
    <value>yell</value>
  </item>
  <item>
    <label>Red</label>
    <value>red</value>
  </item>
</select>

Select one

<!-- the <label> for each element is what the user will see. -->
<!-- the <value> will be what gets sent with the data. -->
<!-- note: text between the <value> tags must not contain spaces. -->
<select1 ref="node3">
  <label>Please select your favorite color</label>
  <hint>you can only pick one</hint>
  <item>
    <label>Blue</label>
    <value>blue</value>
  </item>
  <item>
    <label>Green</label>
    <value>green</value>
  </item>
  <item>
    <label>Yellow</label>
    <value>yell</value>
  </item>
  <item>
    <label>Red</label>
    <value>red</value>
  </item>
</select1>

Capture image, audio, or video

<!-- image -->
<upload ref="node5" mediatype="image/*">
  <hint>this will launch the camera or image chooser</hint>
  <label>image prompt</label>
</upload>

<!-- audio -->
<upload ref="node6" mediatype="audio/*">
  <hint>this will launch the audio recorder or sound chooser</hint>
  <label>audio prompt</label>
</upload>

<!-- video -->
<upload ref="node7" mediatype="video/*">
  <label>this will launch the camcorder or video chooser</label>
</upload>

Multiple prompts in a single screen, logical, labeled, or repeated groups of prompts

<!-- plain group -->
<group>
  <label>household</label>
  <input ref="name">
    <label>name</label>
  </input>
  <input ref="age">
    <label>age</label>
  </input>
</group>

<!-- repeated group -->
<!-- note: /data/household must be defined as instance variables -->
<group>
  <label>household</label>
  <repeat nodeset="/data/household">
    <input ref="name">
      <label>name</label>
    </input>
    <input ref="age">
      <label>age</label>
    </input>
  </repeat>
</group>

<!-- multiple prompts per screen -->
<group appearance="field-list">
  <label>household</label>
  <input ref="name">
    <label>name</label>
  </input>
  <input ref="age">
    <label>age</label>
  </input>
</group>

Use a previous answer in your prompt text

<input ref="node9">
  <label>Are you sure <output value="/data/name"/> is your name?</label>
</input>

Branching on a group

<!-- instance -->
<group_b>
  <question_b1/>
  <question_b2/>
</group_b>

<!-- bind -->
<bind nodeset="/data/group_b" type="string"
 relevant="selected(/data/branch, 'b')"/> 

<!-- body -->
<!-- /data/branch instance must be defined and bound as a select1 -->
<group ref="/data/group_b">
  <input ref="/data/group_b/question_b1">
    <label>question b1</label>
  </input>
  <input ref="/data/group_b/question_b2">
    <label>question b2</label>
  </input>
</group>

Repeating prompts a fixed number of times

<!-- /data/repeat_* nodes must be defined as an instance variable -->
<group>
  <label>repeat node a</label>
  <repeat nodeset="/data/repeat_node_a" jr:count="/data/repeat_count_a">
    <input ref="/data/repeat_node_a/repeat_string_a">
      <label>this should repeat <output value="/data/repeat_count_a"/>
        times and finish</label>
    </input>
  </repeat>
</group>

Ask enumerator to acknowledge a prompt

<trigger ref="node4">
  <label>trigger prompt</label>
  <hint>need to push button</hint>
</trigger>