核心概念
表单设计概述
什么是 XLSForm?
rtSurvey 使用 XLSForm 标准的扩展版本进行表单设计,为创建复杂调查提供强大功能。本指南将向您介绍 rtSurvey 表单设计的核心概念,从基本的 XLSForm 结构到 rtSurvey 特有的高级功能。
使用 XLSForm,您可以用人类可读的格式在熟悉的 Excel 工具中编写表单,几乎所有人都可以访问。 这一标准便于表单编写时的共享和协作。
虽然 XLSForm 对初学者友好,但它也允许有经验的用户创建复杂的表单。
rtSurvey 提供了一种在各种网页和移动数据收集平台上将跳题逻辑等高级功能融入表单的一致方式。
XLSForm 结构
一个 XLSForm 通常包含两个主要工作表:
- survey(调查):定义表单的结构和内容。
- choices(选项):指定多选题的答案选项。
可选的 **settings(设置)**工作表可提供额外的表单规范。
需要注意的是,survey 和 choices 工作表中的必填列必须存在,表单才能正常工作。两个工作表中的可选列可以对表单中每个条目的行为提供进一步控制,但不是必需的。
Excel 工作簿中的列可以按任意顺序排列,可选列可以留空。但是,必须使用 XLSForm 文档中规定的精确语法和命名约定,表单才能正确工作。
survey 工作表
survey 工作表是定义表单结构和提供内容的地方。survey 工作表中的每一行代表表单中的一个问题或元素。以下列在 survey 工作表中是必填的:
type:指定该问题预期的条目类型。name:指定该条目的唯一变量名称。名称必须以字母或下划线开头,只能包含字母、数字、连字符、下划线和句点。名称区分大小写。label:包含在表单中看到的问题实际文本。
| type | name | label |
|---|---|---|
| today | today | |
| select_one gender | gender | 受访者性别? |
| integer | age | 受访者年龄? |
choices 工作表
choices 工作表用于指定多选题的答案选项。
每一行代表一个答案选项。以下列在 choices 工作表中是必填的:
list_name:将一组相关答案选项组合在一起。name:指定该答案选项的唯一变量名称。label:以您希望在表单上显示的方式显示答案选项。
| list_name | name | label |
|---|---|---|
| gender | transgender | 跨性别 |
| gender | female | 女性 |
| gender | male | 男性 |
| gender | other | 其他 |
您添加到 Excel 工作簿的列,无论是必填列还是可选列,可以按任意顺序排列。可选列可以完全省略。行或列可以留空以提高可读性,但工作表上 20 个相邻空白列或行之后的数据将不会被处理。所有 .xlsx 文件格式均被忽略,因此您可以使用分割线、阴影和其他字体格式使表单更易读。
在 Excel 中编写表单时需要记住一点:使用的语法必须精确。例如,如果您写 Choices 或 choice 而不是 choices,表单将无法工作。
settings 工作表
settings 工作表是可选的,但允许您指定表单级别的元数据和行为。settings 工作表中的常用列包括:
| 列 | 描述 |
|---|---|
| form_title | 表单标题,显示给用户 |
| form_id | 表单的唯一标识符,用于数据管理和 API 调用 |
| default_language | 多语言表单的默认语言代码(例如 ’en’ 表示英语) |
| version | 表单的版本号,用于跟踪更改 |
| instance_name | 为每次表单提交生成唯一名称的表达式 |
| generation | 标记表单版本的整数。结构变更时递增 |
| family | 用于在结构变更时对相关表单进行分组的标识符 |
rtSurvey 中的 settings 工作表还可以包含特定于 rtSurvey 扩展功能的额外配置。请参阅 rtSurvey 文档获取支持设置的完整列表。
survey 工作表的核心组件
survey 工作表是表单设计的核心。以下是其核心组件的概述:
| 组件 | 描述 |
|---|---|
| type | 指定问题类型(例如 text、integer、select_one) |
| name | 问题的唯一标识符 |
| label | 显示给受访者的文本 |
| hint | 给受访者的额外指导 |
| appearance | 修改问题的显示方式 |
| relevant | 确定何时应提出该问题(跳题逻辑) |
| constraint | 验证回答 |
| calculation | 根据其他回答计算值 |
| required | 指定问题是否必须回答 |
这些组件中的每一个在创建有效高效的调查中都起着关键作用。点击"详细章节"列中的链接了解每个组件的更多信息。
问题类型
XLSForm 支持多种问题类型。以下是您可以在 XLSForm 的 survey 工作表的 type 列中输入的一些选项:
| 问题类型 | 答案输入 |
|---|---|
| integer | 整数(即整数)输入。 |
| decimal | 小数输入。 |
| range | 范围输入(包括评分) |
| text | 自由文本回答。 |
| select_one [options] | 多选题;只能选择一个答案。 |
| select_multiple [options] | 多选题;可以选择多个答案。 |
| select_one_from_file [file] | 从文件多选;只能选择一个答案。 |
| select_multiple_from_file [file] | 从文件多选;可以选择多个答案。 |
| rank [options] | 排序题;对列表排序。 |
| note | 在屏幕上显示注释,不需要输入。text 类型加 readonly=true 的简写。 |
| geopoint | 收集单个 GPS 坐标。 |
| geotrace | 记录两个或更多 GPS 坐标的线。 |
| geoshape | 记录多个 GPS 坐标的多边形;最后一个点与第一个点相同。 |
| date | 日期输入。 |
| time | 时间输入。 |
| dateTime | 接受日期和时间输入。 |
| image | 拍照或上传图像文件。 |
| audio | 录制音频或上传音频文件。 |
| background-audio | 填写表单时在后台录制音频。 |
| video | 录制视频或上传视频文件。 |
| file | 通用文件输入(txt、pdf、xls、xlsx、doc、docx、rtf、zip) |
| barcode | 扫描条形码,需要安装条形码扫描应用。 |
| calculate | 执行计算;请参阅下方的计算部分。 |
| acknowledge | 选择后将值设置为"OK"的确认提示。 |
| hidden | 没有关联 UI 元素的字段,可用于存储常量 |
| xml-external | 添加对外部 XML 数据文件的引用 |
标签
标签是为每个问题显示给受访者的文本。它们对于调查中清晰沟通至关重要。
- 基本用法:在
label列中输入问题文本。 - 多语言:使用额外的列,如
label::English和label::French,用于多语言调查。 - 格式化:rtSurvey 支持标签中的基本 HTML 格式,用于强调或结构化。
示例:
| type | name | label | label::French |
|------|------|-------|---------------|
| text | name | 您的姓名是? | Quel est votre nom? |
提示
提示为受访者提供额外指导,而不会使主要问题文本显得杂乱。
- 用法:在
hint列中添加提示。 - 可见性:提示通常显示在主要问题文本下方。
- 多语言:与标签一样,可以使用
hint::语言列为多种语言指定提示。
示例:
| type | name | label | hint |
|------|------|-------|------|
| integer | age | 您几岁了? | 请以年为单位输入您的年龄 |
外观
rtSurvey 中的 appearance 列允许自定义问题的显示方式。
- 标准选项:包括文本的"multiline"、选择题的"horizontal"。
- rtSurvey 扩展:
- 时间输入:各种时钟显示选项(例如
inline、inline-1line) - 颜色自定义:使用
colors()函数更改图标颜色
- 时间输入:各种时钟显示选项(例如
示例:
| type | name | label | appearance |
|------|------|-------|------------|
| text | time | 输入时间 | inline-[%H:%M] |
相关性
relevant 列实现跳题逻辑,确定何时应显示问题。
- 语法:使用 XPath 表达式定义条件。
- 变量:使用
${question_name}引用其他问题名称。
示例:
| type | name | label | relevant |
|------|------|-------|----------|
| text | allergies | 列出过敏症 | ${has_allergies} = 'yes' |
必填
required 列指定问题是否必须回答。
- 基本用法:使用 ‘yes’ 或 ’true’ 使问题成为必填。
- 高级:可以使用表达式进行条件性必填。
示例:
| type | name | label | required |
|------|------|-------|----------|
| text | email | 邮箱地址 | yes |
重复
重复允许一组问题被多次回答。
- 用法:使用
begin repeat和end repeat行定义重复组。 - 命名:为每个重复组起一个唯一的名称。
示例:
| type | name | label |
|------|------|-------|
| begin repeat | household_member | 家庭成员 |
| text | member_name | 姓名 |
| integer | member_age | 年龄 |
| end repeat | | |
媒体
rtSurvey 支持调查中的各种媒体类型,包括图像、音频和视频。
- 问题类型:在 type 列中使用 ‘image’、‘audio’ 或 ‘video’。
- 标签中的媒体:使用 HTML 标签在标签中引用媒体文件。
示例:
| type | name | label |
|------|------|-------|
| image | house_photo | 拍摄房屋照片 |
| note | | <img src="logo.jpg" /> 欢迎参与调查 |
只读
只读问题显示信息但不允许用户输入。
- 用法:在
appearance列中添加 ‘readonly’。 - 计算:常与 calculate 类型一起用于显示计算值。
示例:
| type | name | label | appearance | calculation |
|------|------|-------|------------|-------------|
| calculate | bmi | BMI | readonly | ${weight} / (${height} * ${height}) |
rtSurvey 扩展
rtSurvey 通过支持额外功能(如 grid layout、html format 和许多新的 widgets)扩展了 XLSForm 标准。
网格布局
rtSurvey 允许您的表单通过将多个问题压缩到一行来模拟传统纸质调查的外观。