跳到主要内容

DSL 语法说明

阅读建议

  • 第一次接触 DSL:先浏览“写作约定”+“如何引用题目/选项”,再结合下方示例练习。
  • 已具备经验的同学:可直接跳到“逻辑语句速查”或“公式与函数”。
  • 所有示例均可直接粘贴到 DSL 编辑器中体验,题号需替换成问卷中的实际编号。

1. 写作约定(大小写与格式)

类型写法要求说明 / 举例
关键字小写ifthenshowhidebranchassignmentwithvalidatereplacemutexdeselect
变量大写Q1Q1A2QS1Q1QS1Q1A3Q2S1
函数大写SUMAVERAGEIFMAXMINCONCATENATEANDORNOT
  • 大小写严格区分:关键字必须小写,题号/选项号/函数名必须大写。
  • 一条规则一行:避免在同一行写多条逻辑,便于阅读与排错。
  • 注释:行首 # 为整行注释,可用于分组说明;规则结尾也可追加 # 注释。
# 选了 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 标签为准。没有题组的问卷可以直接使用 Q1Q2 等。

2.3 连续范围写法

DSL 支持直接写连续区间,系统会自动展开:

写法展开结果
Q1~Q4Q1、Q2、Q3、Q4
Q1A1~Q1A3Q1A1、Q1A2、Q1A3
Q1S1~Q1S4Q1 矩阵题的行 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 Q2Q1 选项 1 为真时显示 Q2
if QS1Q1A1 then show QS1Q3题组 1 题 1 选项 1 选中 → 显示题组 1 题 3
if OR(Q1A1,Q1A2) then show Q3Q1 选项 1 或 2 任意一个为真 → 显示 Q3
if NOT(Q4A3) then hide Q5A2Q4 选项 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 Q5Q2 选项 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 接近。

分类常用函数用途示例
数学运算SUMAVERAGEMAXMINROUND计分、统计平均值、求最大最小等
文本处理CONCATENATE&LEFTRIGHTLENLOWER拼接标题、截取字符串、大小写转换
逻辑判断IFIFSANDORNOTXOR多条件判断、分支逻辑
日期时间NOWTODAYYEARMONTHDAY记录答题时间、判断日期范围
其他VALUETEXTABSMOD数值转换、格式化输出、求绝对值等

小技巧

  • 字符串常量需要使用双引号,例如 "优秀"
  • 组合复杂条件时,可嵌套 IF 或使用 IFS
  • 表达式中同样可以引用题组题号,如 SUM(QS1Q1, QS1Q2)

5. 调试与最佳实践

  1. 一行一规则:方便开关与排查问题。
  2. 善用注释# ---- 基础显隐 ---- 等分隔块,后续维护更省心。
  3. 先小后大:先写单条规则验证通过,再逐步扩展。
  4. 配合预览:保存后打开预览页面,即可实时观察规则效果。
  5. 关注 DSL 标签:题目右上角会展示对应 DSL ID,题组/矩阵题的编号在此最准确。
  6. 错误容错:语法写错时,系统会跳过该条规则,并在控制台输出提示,不影响其他逻辑执行。
  7. 变更后的复测:修改题目顺序或题组结构后,记得检查相关 DSL 是否仍指向正确的编号。

6. 更多资料

如仍有疑问,欢迎在问卷编辑器中点击右上角“帮助”或联系客户成功团队,我们会第一时间协助你完成逻辑配置。