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 必须有数值 |
校验规则返回 非空字符串 时会提示错误,返回空字符串 ""
表示通过。
3.6 互斥(mutex)
mutex 题目选项 deselect 题目选项
示例 | 说明 |
---|---|
mutex Q4A1 deselect Q4A6 | 选 Q4A1 自动取消 Q4A6 |
mutex QS1Q2A3 deselect Q5A1 | 题组 1 题 2 选项 3 与 Q5A1 互斥 |
4. 公式与函数
DSL 公式兼容 Formula.js 大部分函数,语法与 Excel 接近。
分类 | 常用函数 | 用途示例 |
---|---|---|
数学运算 | SUM 、AVERAGE 、MAX 、MIN 、ROUND | 计分、统计平均值、求最大最小等 |
文本处理 | CONCATENATE 、& 、LEFT 、RIGHT 、LEN 、LOWER | 拼接标题、截取字符串、大小写转换 |
逻辑判断 | IF 、IFS 、AND 、OR 、NOT 、XOR | 多条件判断、分支逻辑 |
日期时间 | NOW 、TODAY 、YEAR 、MONTH 、DAY | 记录答题时间、判断日期范围 |
其他 | VALUE 、TEXT 、ABS 、MOD 等 | 数值转换、格式化输出、求绝对值等 |
小技巧
- 字符串常量需要使用双引号,例如
"优秀"
。- 组合复杂条件时,可嵌套
IF
或使用IFS
。- 表达式中同样可以引用题组题号,如
SUM(QS1Q1, QS1Q2)
。
5. 调试与最佳实践
- 一行一规则:方便开关与排查问题。
- 善用注释:
# ---- 基础显隐 ----
等分隔块,后续维护更省心。 - 先小后大:先写单条规则验证通过,再逐步扩展。
- 配合预览:保存后打开预览页面,即可实时观察规则效果。
- 关注 DSL 标签:题目右上角会展示对应 DSL ID,题组/矩阵题的编号在此最准确。
- 错误容错:语法写错时,系统会跳过该条规则,并在控制台输出提示,不影响其他逻辑执行。
- 变更后的复测:修改题目顺序或题组结构后,记得检查相关 DSL 是否仍指向正确的编号。
6. 更多资料
如仍有疑问,欢迎在问卷编辑器中点击右上角“帮助”或联系客户成功团队,我们会第一时间协助你完成逻辑配置。