DSL 语法说明
阅读建议
- 第一次接触 DSL:先浏览“写作约定”+“如何引用题目/选项”,再结合下方示例练习。
- 已具备经验的同学:可直接跳到“逻辑语句速查”或“公式与函数”。
- 所有示例均可直接粘贴到 DSL 编辑器中体验,题号需替换成问卷中的实际编号。
1. 写作约定(大小写与格式)
| 类型 | 写法 要求 | 说明 / 举例 |
|---|---|---|
| 关键字 | 小写 | if、then、show、hide、branch、assignment、with、validate、replace、mutex、deselect |
| 变量 | 大写 | Q1、Q1A2、QS1Q1、QS1Q1A3、Q2S1 |
| 函数 | 大写 | SUM、AVERAGE、IF、MAX、MIN、CONCATENATE、AND、OR、NOT |
- 大小写严格区分:关键字必须小写,题号/选项号/函数名必须大写。
- 一条规则一行:避免在同一行写多条逻辑,便于阅读与排错。
- 注释:行首
#为整行注释,可用于分组说明;规则结尾也可追加#注释。
# 选了 Q1 选项 1 就显示 Q2
if Q1A1 then show Q2
assignment Q5 with SUM(Q1, Q2) # 自动合计分数
2. 如何引用题目、选项与题组
2.1 普通题目
| 书写方式 | 代表对象 |
|---|---|
Q1 | 第 1 题 |
Q1A1 | 第 1 题的第 1 个选项 |
Q1A1~Q1A4 | 第 1 题的选项 1–4 |
Q1S1 / Q1S1A1 | 矩阵题的第 1 行 / 第 1 行第 1 列 |
2.2 题组(Question Set)
题组在 DSL 中使用 QS 前缀。写法遵循“题组 → 题目 → 选项”的顺序。
| 书写方式 | 代表对象 |
|---|---|
QS1 | 题组 1 本身 |
QS1Q1 | 题组 1 中的第 1 个题目 |
QS1Q1A2 | 题组 1 第 1 个题目的第 2 个选项 |
QS1Q1S1 | 题组 1 第 1 个题目(矩阵题)的第 1 行 |
QS1Q1S1A3 | 题组 1 第 1 个题目第 1 行、第 3 列选项 |
提示:实际编号以编辑器中展示的 DSL 标签为准。没有题组的问卷可以直接使用
Q1、Q2等。
2.3 连续范围写法
DSL 支持直接写连续区间,系统会自动展开:
| 写法 | 展开结果 |
|---|---|
Q1~Q4 | Q1、Q2、Q3、Q4 |
Q1A1~Q1A3 | Q1A1、Q1A2、Q1A3 |
Q1S1~Q1S4 | Q1 矩阵题的行 1–4 |
QS1Q1~QS1Q3 | 题组 1 中的题目 1–3 |
QS1Q1A1~QS1Q1A4 | 题组 1 中题 1 的选项 1–4 |
无需额外加花括号,编辑器会自动转换为内部表达。
2.4 特殊标识
| 标识 | 含义 |
|---|---|
END | 问卷的末尾,用于跳转/终止逻辑 |
# | 注释 |
3. 逻辑语句速查
3.1 显示 / 隐藏(show / hide)
if 条件 then show 题目/选项
if 条件 then hide 题目/选项
| 示例 | 说明 |
|---|---|
if Q1A1 then show Q2 | Q1 选项 1 为真时显示 Q2 |
if QS1Q1A1 then show QS1Q3 | 题组 1 题 1 选项 1 选中 → 显示题组 1 题 3 |
if OR(Q1A1,Q1A2) then show Q3 | Q1 选项 1 或 2 任意一个为真 → 显示 Q3 |
if NOT(Q4A3) then hide Q5A2 | Q4 选项 3 未勾选 → 隐藏 Q5 的选项 2 |
可以使用
Qx,Qy批量控制多个题目或选项。
3.2 跳转(branch)与终止
if 条件 then branch from 起始题 to 目标题/END
branch from 起始题 to 目标题/END
| 示例 | 说明 |
|---|---|
if Q1A3 then branch from Q1 to END | 甄别不符合条件的用户,直接结束 |
branch from QS1Q2 to QS1Q4 | 题组 1 的题 2 做完后跳到题 组 1 的题 4 |
if Q2A2 then branch from Q2 to Q5 | Q2 选项 2 为真 → 跳过中间题目直接来到 Q5 |
branch from Q10 to END | 无条件结束,适合问卷尾部的默认跳转 |
3.3 赋值(assignment)
assignment 题目 with 公式
if 条件 then assignment 题目 with 公式
| 示例 | 说明 |
|---|---|
assignment Q3 with SUM(Q1, Q2) | Q3 为 Q1 与 Q2 的和 |
if Q4A1 then assignment Q5 with 99 | 勾选 Q4 选项 1 → Q5 赋值 99 |
assignment QS1Q3 with MAX(Q1, Q2, Q3) | 题组 1 的题 3 自动取最大值 |
赋值逻辑适用范围广:自动打分、拼接文本、动态展示等。
3.4 替换(replace)
replace 题目 with 公式
| 示例 | 说明 |
|---|---|
replace Q2 with CONCATENATE("您好,", Q1) | 把 Q2 标题改成“您好,+Q1 的内容” |
replace QS1Q2 with IF(Q1A1,"高级版","基础版") | 根据答案动态替换题组内的标题 |
3.5 校验(validate)
validate 题目 with 公式
if 条件 then validate 题目 with 公式
| 示例 | 说明 |
|---|---|
validate Q2 with IF(Q2>10,"不能大于 10","") | Q2 大于 10 时提示 |
if Q3A1 then validate Q4 with IF(Q4>=0,"","请输入分值") | 仅在 Q3 选项 1 勾选时校验 Q4 必须有数值 |
校验规则返回 非空字符串 时会提示错误,返回空字符串 "" 表示通过。