Структура опроса в формате значений, разделенных табуляцией
From LimeSurvey Manual
Импорт и экспорт структуры опроса в формате значений, разделенных табуляцией
Эта функция позволяет легко создавать и редактировать опросы в табличных процессорах, таких как LibreOffice, Excel или Google Docs. В файле удалены все значения кодов SGQA.
Функция поддерживает импорт из файлов Tab Separated Value (TSV) в кодировке ASCII или UTF-8 с расширением .txt.
Начало работы
Проще всего взять существующий опрос и экспортировать его в формате Tab Separated Value. Используйте обычную кнопку экспорта опроса и вместо формата .lss выберите «Tab Separated Values format (*.txt)». Опрос будет сохранен как файл Tab Separated Value в нужном формате (текстовый файл Юникода с разделителями-табуляциями) со всеми необходимыми заголовками столбцов.
Подойдет любой табличный процессор, поддерживающий значения, разделенные табуляцией (например, OpenOffice или LibreOffice). LimeSurvey игнорирует любое форматирование в таблице, но вы можете добавить его, если это вам удобно.
Для каждой группы, вопроса, подвопроса и ответа предусмотрена одна строка. Также есть строки для глобальных переменных опроса и для переменных опроса, зависящих от языка. Первым указывается основной язык, затем дополнительные языки. Таким образом, если языков несколько, сначала идет все содержимое основного языка (например, все группы, вопросы, подвопросы и ответы). Затем следует переведенная копия для каждого дополнительного языка (с точно таким же количеством и порядком строк в переведенном наборе).
Связи определяются по расположению строк. Вопросы, следующие за группой, относятся к этой группе; подвопросы, следующие за вопросом, относятся к этому вопросу, а ответы, следующие за вопросом, также относятся к этому вопросу. Поэтому вам не нужно знать идентификаторы (gid, qid, sqid) вопросов — они вычисляются автоматически при импорте. Фактически этот формат вообще не использует gid, qid, sqid (или коды SGQA).
Советы
Цель импорта и экспорта в формате Tab Separated Value — позволить вам быстро разрабатывать опрос в таблице. Предполагается, что вы будете часто импортировать таблицу, проверять ее корректность с помощью функции «Show Survey Logic» и тестировать опрос. Каждый раз при импорте вы будете получать новый опрос. В итоге у вас может накопиться много частично разработанных опросов, но это нормально. Просто приучите себя отслеживать, какой из них самый новый, или удаляйте старый после импорта нового. Поскольку в формате Tab Separated Value коды SGQA не используются, вам не нужно беспокоиться о том, какие коды LimeSurvey назначает ключам основного опроса, групп, вопросов и ответов. Поэтому импортируйте и экспортируйте так часто, как вам нужно.
Вот несколько удобных возможностей, которые дает этот подход к созданию опросов:
- Одинаковые ответы для многих вопросов. Просто скопируйте строки «A» и вставьте их после каждого вопроса, у которого должен быть такой же набор.
- Одинаковые подвопросы для многих вопросов. Просто скопируйте строки «SQ» и вставьте их после каждого вопроса, которому они нужны.
- «Циклы» — многократное использование одной группы. Когда группа приобретет нужный вид, скопируйте ее необходимое число раз. Используйте фильтр Excel, чтобы отобразить только строки «G» (группы), и функцию протягивания столбца в Excel, чтобы обновить уравнения условия для каждой группы (например, для переписи первое условие может быть «numPeople > 1», следующее — «numPeople > 2». Функция протягивания автоматически обновит число). Отфильтруйте строки «Q» и убедитесь, что у каждого вопроса уникальное значение (например, если вы называете переменные g1_q1, g1_q2, g1_qN, используйте поиск и замену, чтобы преобразовать g1 в g2 для второй группы, g3 — для третьей и т. д.).
- Изменение порядка вопросов и групп. Просто измените порядок строк в файле таблицы.
- Тестирование модулей опроса. Для длинных опросов может потребоваться разбить тестирование на модули. Просто создайте отдельные файлы таблиц для каждого модуля, удалив ненужные строки. Это избавляет от необходимости вводить много данных для тестирования последующих разделов опроса.
- Тестирование обязательных вопросов. Частая проблема — не необходимость сделать многие вопросы обязательными, а необходимость отключить обязательность на время тестирования. Просто создайте основную таблицу, в которой обязательность задана окончательными значениями. Затем для тестирования удалите столбец «mandatory» и сохраните тестовую версию таблицы. После импорта этой версии ни один вопрос не будет обязательным. Когда тестирование закончится, импортируйте основную копию.
- Задание значений по умолчанию. Вместо графического интерфейса вы можете ввести любые нужные значения по умолчанию в столбец default. Это особенно полезно в случаях, когда интерфейс не позволяет ввести нужное значение, например выражения для задания значения по умолчанию для элементов списка (например, заполнение списка из атрибута участника опроса).
- Перевод. Вы можете создать копии таблицы — по одной на каждый язык. Включите все строки для основного языка, затем скопируйте и вставьте их ниже и с помощью протягивания измените поле языка на целевой язык. Эти копии можно передать переводчикам, а когда они закончат, объединить в один файл таблицы.
- Массовое задание расширенных атрибутов вопросов. Возможно, вы захотите, чтобы все уравнения были видимы (чтобы видеть их значения при сборе данных), а перед запуском опроса скрыть их все. Просто отфильтруйте таблицу по class = 'Q' и типу вопроса = '*' (уравнение) и задайте always_hide равным 1 для каждого из этих вопросов. Аналогично, если после создания опроса вы решили, какие вопросы должны отображаться в публичной статистике, не нужно редактировать каждый вопрос через интерфейс: отфильтруйте по class = 'Q' и задайте public_statistics = 1 для всех вопросов, которые должны быть видны в статистике.
- Поиск и замена. Если вам нужно изменить формулировку во всех вопросах, используйте поиск и замену в Excel. Аналогично, если вы решили массово переименовать переменные, поиск и замена вам поможет. Если нужен поиск и замена на основе регулярных выражений, выделите нужный столбец, скопируйте его в текстовый редактор, выполните поиск и замену и вставьте столбец обратно в таблицу.
- Получение согласований. Если вы проводите исследование, наблюдательный совет вашей организации может требовать текст вопросов. Это может быть удобный способ поделиться им. То же относится к обсуждениям с заказчиком.
- Согласие в команде. Если вам нужно, чтобы группа людей согласовала формулировку или внешний вид вопроса или группы, вы можете быстро подготовить прототип или отредактировать таблицу, импортировать ее и показать команде (с помощью предварительного просмотра вопроса или группы), что именно увидят участники. Так вы получите одобрение команды, не выходя из комнаты, вместо того чтобы документировать требования, реализовывать их и согласовывать на следующих встречах.
- Переход с других форматов опросов. Если ваш опрос создан в XML, Word или другом формате, вы можете создать процесс преобразования для приведения его к этому формату. Хотя можно попробовать преобразование в формат .lss, преимущество этого формата в том, что не нужно отслеживать связи по внешним ключам между группами, вопросами, подвопросами, ответами и значениями по умолчанию.
Ограничения
- По замыслу эта функция корректно работает только для опросов, использующих именование по qcode (а не SGQA). Предполагается, что имена переменных (идентификаторы вопросов) уникальны во всем опросе. Имена подвопросов могут повторяться, если они уникальны в пределах конкретного вопроса.
Формат файла
Общие сведения
Один и тот же набор заголовков столбцов используется для разных целей. Первые 14 столбцов служат разным целям в зависимости от типа сущности (например, группа, вопрос, ответ). Остальные столбцы — это алфавитный список имен полей базы данных для расширенных атрибутов вопросов. Ниже описан синтаксис для каждого типа сущности.
Первые 14 столбцов:
- id (New in 3.14.0 )
- related_id (New in 3.14.0 )
- class
- type/scale
- name
- relevance
- text
- help
- language
- validation
- mandatory
- other
- default
- same_default
Глобальные параметры опроса
Каждому параметру в таблице surveys соответствует одна строка.
- class => 'S'
- name => имя поля базы данных
- text => значение
Языковые параметры опроса
Для каждого поля на каждом языке в таблице surveys_languagesettings предусмотрена одна строка. Все записи для данного языка собираются перед вставкой в эту таблицу.
- class => 'SL'
- name => имя поля базы данных
- text => значение
- language => язык
Группы
Одна строка группы на каждый язык опроса (например, если в опросе 3 языка, будет 3 строки группы).
- id => уникальный числовой идентификатор группы, начиная с номера 1; для дополнительных языков текущей группы используйте тот же идентификатор
- class => 'G'
- name => group_name -- уникальный идентификатор группы
- relevance => grelevance -- уравнение условия на уровне группы, без фигурных скобок
- text => description -- описание группы на соответствующем языке
- language => language -- язык группы (например, 'en')
Вопросы
Одна строка вопроса на каждый язык опроса (например, если в опросе 3 языка, будет 3 строки вопроса). Предполагается, что вопросы относятся к группе, которая стоит перед ними.
- id => уникальный числовой идентификатор вопроса, начиная с номера 1; для дополнительных языков текущего вопроса используйте тот же идентификатор
- class => 'Q'
- type/scale => type -- (обычно однобуквенный) тип вопроса (например, 'M' — «Несколько ответов»)
- name => title -- уникальное имя вопроса (основа системы именования qcode)
- relevance => relevance -- уравнение условия для вопроса
- text => question -- текст вопроса на соответствующем языке
- help => help -- текст справки на соответствующем языке
- language => language -- язык группы (например, 'en')
- validation => preg -- необязательные критерии проверки вопроса с помощью регулярного выражения
- mandatory => mandatory -- 'Y', если вопрос обязательный
- other => other -- 'Y', если должен быть доступен вариант «Другое» (только для некоторых типов вопросов)
- default => default -- если задано, это значение вставляется в таблицу defaultvalues для данного вопроса
- same_default => same_default -- 'Y' для значения «истина»; в этом случае любое значение по умолчанию, заданное для основного языка, применяется и к другим языкам
Подвопросы
Одна строка подвопроса на каждый язык опроса. Предполагается, что подвопросы принадлежат вопросу, который находится перед ними.
- id => тот же уникальный числовой идентификатор, который используется для вопросов. Подвопросы должны использовать следующее доступное значение, ID вопросов и подвопросов должны отличаться (например, используйте ID 1 для вопроса и ID 2, 3 и 4 для подвопросов, принадлежащих вопросу 1; ID следующего вопроса должен быть 5 и так далее). Используйте один и тот же ID подвопроса для дополнительных языков текущего подвопроса.
- class => 'SQ'
- type/scale => scale_id -- 0 или 1, в зависимости от типа вопроса (например, у текстового массива будет две шкалы)
- name => title -- «имя» подвопроса, например, то, которое используется для exclude_all_others
- relevance => relevance -- (в будущем) для поддержки условия на уровне подвопроса
- text => question -- текст подвопроса на соответствующем языке
- help => help -- (в будущем) для поддержки справки на уровне подвопроса
- language => language -- язык подвопроса
- validation => preg -- (в будущем) для поддержки проверки регулярным выражением на уровне подвопроса (например, для частей адреса)
- mandatory => mandatory -- (в будущем) для поддержки обязательности на уровне подвопроса (например, чтобы сделать обязательными только несколько подвопросов)
- default => default -- если задано, это значение по умолчанию для подвопроса (вставляется в таблицу defaultvalues)
- same_default => same_default -- если задано, значение по умолчанию для основного языка используется для всех остальных языков
Ответы
Одна строка ответа на каждый язык опроса (например, если в опросе 3 языка, будет 3 строки ответа). Предполагается, что ответы принадлежат вопросу, который находится перед ними, и расположены в нужном порядке сортировки.
- id => используйте тот же ID, что и у вопроса, к которому относится ответ
- class => 'A'
- type/scale => scale_id -- 0 или 1 (например, для вопроса с двумя шкалами)
- name => code -- уникальный идентификатор ответа
- relevance => assessment_value -- если используется оценка ответов, это значение оценки ответов для данного ответа
- text => answer -- текст ответа на соответствующем языке
- language => language -- язык этого ответа (например, 'en')
Оценки ответов
Одна строка оценки ответов на каждый язык опроса (например, если в опросе 3 языка, будет 3 строки оценки ответов). Оценки ответов записываются в конце файла.
- id => уникальный числовой идентификатор оценки ответов, начиная с номера 1; используйте тот же ID для дополнительных языков текущей оценки ответов
- related_id => ID группы, к которой относится текущая оценка ответов
- class => 'AS'
- type/scale => область действия оценки ответов: T — всего, G — группа
- name => имя
- text => сообщение
- min_num_value => Минимум
- max_num_value => Максимум
- language => language -- язык этого ответа (например, 'en')
Квоты
Одна строка на каждую квоту. Квоты записываются в конце файла.
- id => уникальный числовой идентификатор квоты, начиная с номера 1
- class => 'QTA'
- name => название квоты
- mandatory => лимит
- other => действие квоты
- default => активна
- same_default => URL автозагрузки
Языковые настройки квоты
Одна строка квоты на каждый язык опроса. Предполагается, что языковые настройки квоты принадлежат квоте, которая находится перед ними.
- id => уникальный числовой идентификатор языковых настроек квоты, начиная с номера 1. Строки для разных языков опроса должны иметь разные ID
- related_id => ID квоты, к которой относится эта настройка
- class => 'QTALS'
- relevance => сообщение
- text => URL
- help => описание URL
- language => language -- язык этой квоты (например, 'en')
Участники квоты
Одна строка на каждый элемент квоты, не зависит от языка. Строка элемента квоты должна располагаться сразу после вопроса, к которому она относится. Предполагается, что элементы квоты принадлежат вопросу, который находится перед ними.
- id => уникальный числовой идентификатор элемента квоты, начиная с номера 1
- related_id => ID квоты, к которой относится этот элемент
- class => 'QTAM'
- name => код ответа
Условия
Одна строка на каждое условие, не зависит от языка. Строка условия должна располагаться сразу после вопроса, к которому она относится. Предполагается, что условия принадлежат вопросу, который находится перед ними.
- id => уникальный числовой идентификатор условия, начиная с номера 1.
- related_id => ID связанного вопроса, если применимо
- class => 'C'
- type/scale => сценарий
- name => имя поля ответа
- relevance => оператор действия
- text => ожидаемый ответ