Проверка выбранного элемента в select1 внутри группы повторов

У меня есть группа повторов, которая начинается с приглашения select1, остальные вопросы, которые следуют в группе, основаны на элементе, выбранном из select1 (релевантно). Каждый элемент в select1 является обязательным и должен быть задан только один раз. Как я могу проверить, что элемент не выбран снова. Есть ли механизм, позволяющий как-то избежать выбора уже выбранного элемента. Я определил select1 как

<select1 appearance="minimal" ref="/data/ITEMLIST">
<label ref="jr:itext('/data/listlabel:label')"/>
  <item>
    <label>मसिनो चामल</label>
    <value>FRICE</value>
  </item>
  <item>
    <label>खस्रो चामल</label>
    <value>CRICE</value>
  </item>
       '
       '
       '

1 ответ

Вы также можете:

а) проверить с использованием ограничения, например

constraint="not(selected(/path/to/previous/question, .))"

б) использовать предикат XPath, который исключает ранее выбранные значения из списка опций, представленного пользователю, см., например, эту форму (загрузите его по http://opendatakit.org/xiframe/, чтобы получить XForm).

в) Просто мысль, не проверенная, может быть неправильной: возможно, подсчитать все остальные ответы с текущим значением и добавить ограничение, чтобы убедиться, что это не больше 1. Например

constraint="count(/path/to/repeated[question = current()/.]) <= 1"

Обратите внимание, что в настоящее время в JR/ODK есть ошибка предиката, поэтому лучше всего проверить, работает ли она в Enketo. Они работают над исправлением ошибки в JR.

Другие вопросы по тегам