Единственный выбор
Вопросы типа select_one позволяют респондентам выбирать ровно один вариант из заранее определённого списка.
Тип вопроса select_one предлагает респонденту выбрать ровно один вариант из заранее определённого списка. По умолчанию варианты отображаются в виде переключателей, но доступен широкий спектр вариантов внешнего вида для изменения макета и поведения.
Базовая спецификация XLSForm
Лист survey:
| type | name | label |
|---|---|---|
| select_one yesno | consent | Дал ли респондент согласие? |
Лист choices:
| list_name | name | label |
|---|---|---|
| yesno | yes | Да |
| yesno | no | Нет |
listname в select_one listname должен совпадать со столбцом list_name в листе choices.
Дополнительную информацию см. в спецификации XLSForm.
Применение
Вопросы типа select_one используются для:
- Вопросов Да/Нет
- Одиночного множественного выбора (например, уровень образования, пол, семейное положение)
- Категориальных рейтингов (например, плохо / удовлетворительно / хорошо / отлично)
- Каскадных (связанных) выборов, где варианты фильтруются на основе предыдущего ответа
- Выбора страны, региона, района или другой административной единицы
Варианты внешнего вида
Укажите значение в столбце appearance, чтобы изменить отображение вариантов:
| Внешний вид | Описание |
|---|---|
| (нет) | Переключатели по умолчанию, по одному в строке |
minimal | Выпадающий список вместо переключателей |
quick | Автоматически переходит к следующему вопросу сразу после выбора (только мобильные) |
compact | Компактная сетка вариантов — количество столбцов адаптируется к ширине экрана |
compact-N | Компактная сетка, принудительно N столбцов (например, compact-3) |
quickcompact | Сочетает quick и compact |
quickcompact-N | Сочетает quick и compact с N принудительными столбцами |
horizontal | Варианты расположены горизонтально в ряд (веб) |
horizontal-compact | Горизонтально, компактный отступ (веб) |
likert | Ряд шкалы Лайкерта — метки сверху, переключатели снизу |
label | Показывает только метки вариантов без элементов ввода (используйте совместно с list-nolabel) |
list-nolabel | Показывает только элементы ввода без меток (используйте совместно с label) |
columns(N) | Отображение в N столбцах (расширение rtSurvey, например, columns(3)) |
distress | Виджет шкалы психологического дистресса Кесслера (K10) |
search-api(...) | Динамический поиск — загружает варианты из API во время выполнения |
Пример: Шкала Лайкерта
| type | name | label | appearance |
|---|---|---|---|
| select_one satisfaction | service_rating | Насколько вы удовлетворены обслуживанием? | likert |
Пример: Компактные 3 столбца
| type | name | label | appearance |
|---|---|---|---|
| select_one regions | region | Выберите регион | compact-3 |
Каскадные выборы
Каскадный (связанный) выбор фильтрует варианты на основе значения, выбранного в предыдущем вопросе. Используйте столбец choice_filter с именем столбца из листа choices.
survey:
| type | name | label | choice_filter |
|---|---|---|---|
| select_one province | province | Выберите провинцию | |
| select_one district | district | Выберите район | province_name = ${province} |
choices:
| list_name | name | label | province_name |
|---|---|---|---|
| province | nairobi | Найроби | |
| province | mombasa | Момбаса | |
| district | westlands | Вестлэндс | nairobi |
| district | kasarani | Касарани | nairobi |
| district | nyali | Ньяли | mombasa |
| district | likoni | Ликони | mombasa |
При выборе респондентом nairobi в списке районов появятся только Вестлэндс и Касарани.
Имя столбца, использованное в choice_filter (например, province_name), должно существовать в листе choices. ${province} ссылается на поле опроса с именем province.
Использование выбранного значения в выражениях
Ссылайтесь на выбранное значение (не метку) через ${fieldname}:
relevant: ${consent} = 'yes'
Для получения метки варианта вместо значения используйте choice-label():
calculate: choice-label(${education_level}, ${education_level})
Вариант «Другое» со свободным текстом
Распространённый шаблон — включить вариант «другое», раскрывающий текстовое поле:
| type | name | label | relevant |
|---|---|---|---|
| select_one occupation | job | Какова ваша профессия? | |
| text | job_other | Пожалуйста, уточните | ${job} = 'other' |
choices:
| list_name | name | label |
|---|---|---|
| occupation | farmer | Фермер |
| occupation | trader | Торговец |
| occupation | student | Студент |
| occupation | other | Другое (пожалуйста, уточните) |
Лучшие практики
- Делайте списки короткими и взаимоисключающими — если респонденты могут хотеть выбрать несколько, используйте
select_multiple. - Размещайте наиболее распространённый ответ первым или упорядочивайте по алфавиту для длинных списков.
- Всегда включайте вариант «Не знаю» или «Предпочитаю не отвечать», когда это уместно.
- Используйте
minimal(выпадающий список) для списков с более чем 7–8 вариантами на мобильных, чтобы экономить место на экране. - Для каскадных выборов добавляйте все столбцы фильтра в лист choices перед построением формы.
Ограничения
- Респондент может выбрать только один вариант — для вопросов с несколькими ответами используйте
select_multiple. - Внешний вид
likertлучше всего работает с 5–7 вариантами, умещающимися в одну строку. - Автопереход
quickработает только на мобильных; на веб-формах эффекта нет.