Проверка выбранного элемента в 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.