DSL逻辑控制
DSL简介
☀️DSL(领域专用语言)
Domain Specific Language是一种专为问卷和表单设计的轻量级逻辑脚本语言,帮助用户无需编程经验也能轻松实现智能化问卷控制。
通过 DSL,可以:
- 进行配额(quota)管理,让收集的数据更具有代表性或符合项目研究需求;
- 根据答题内容动态显示(show)或隐藏(hide)题目与选项,设置答题流程中的跳转(goto)路径,实现个性化问卷逻辑;
- 用赋值(assignment)功能进行自动计算,如总分统计或结果推导;
- 通过验证(validate)语句可对用户输入进行校验,确保答案符合规则;
- 通过selectSize 则用于判断多选题选中项的数量,方便设定最小/最大选择限制。
DSL 语法简洁,功能丰富,是提升问卷交互体验和数据质量的高效工具。
DSL基本元素说明
题目变量
| 题目变量名称 | 关键词 | 说明 |
|---|---|---|
| 题目 | Q1 | "Q题编号"指定某题 |
| 选项 | Q1A1 | "Q题编号A选项编号"指定某题某个选项 |
| 矩阵题行选项 | Q1S1 | 表示矩阵中某一行 |
| 矩阵题行列选项 | Q1S1A1 | 表示矩阵中某行某列 |
| 连续题 | Q1~4 | 表示连续的几题 |
| 连续选项 | Q1A1~4 | 表示某题内连续的几个选项 |
| 连续矩阵题行 | Q1S1~4 | 表示矩阵题连续的行选项 |
逻辑运算符
| 逻辑运算符名称 | 关键词 | 说明 |
|---|---|---|
| 逻辑与 | and | 表示同时满足才返回真 |
| 逻辑或 | or | 表示只有一个满足就返回真 |
| 逻辑非 | not | 表示取逻辑反值 |
| 逻辑等于 | = | 表于左右值必须相等 |
| 逻辑大于等于 | >= | 表于左边大于或等于右边 |
| 逻辑大于 | > | 表于左边大于右边 |
| 逻辑小于等于 | <= | 表于左边小于或等于右边 |
| 逻辑小于 | < | 表于左边小于右边 |
| 逻辑组合 | () | 表于组成逻辑组合 |
执行方法
| 执行方法名称 | 关键词 | 说明 |
|---|---|---|
| 配额方法 | quota | 回答某题或某选项数量达到一定数量后停止问卷收集 |
| 显示方法 | show | 表示让某题或选项显示可见 |
| 隐藏方法 | hide | 表示让某题或选项隐藏不可见 |
| 跳转方法 | goto | 从某题跳转到某题或问卷结尾 |
| 赋值方法 | assignment | 可将右边的表达式计算结果设置给左边的对象 |
| 验证方法 | validate | 检查左右逻辑关系是否符合验证关系 |
| 取选中选项的长度 | selectSize | 如多选题,用于计算选择了几个选项 |
DSL执行方法
配额方法——quota
通过DSL进行配额管,请参看配额管理
显示方法——show
- 单条件显示
- 显示题目
if Q1A1 then show Q2
示例
Q1:您是否有驾照?
A1:有
A2:没有
Q2:您的驾照类型是?(Q2)
📝如果用户第一题选择第一个选项“有”[Q1A1],则显示第二题[Q2]- 显示选项
if Q1A1 then show Q2A1
示例
Q1:您目前的职业身份是?
A1:教师
A2:医生
A3:其他
Q2:您关注的内容类型是?
A1:教学资源
A2:医学资讯
A3:通用内容
📝只有在Q1中选择了“教师”[Q1A1],Q2的选项“教学资源”[Q2A1]才会显示给用户。如果选择“医生”或“其他”,则选项不会出现,但其他选项仍然正常展示。 - 显示题目
- 与条件 显示
if Q1A1 and Q2A1 then show Q3示例
Q1:您是否注册过本平台?
A1:是
A2:否
Q2:您是否购买过产品?
A1:是
A2:否
📝如果 Q1 和 Q2 都选择“是”[Q1A1 and Q2A1],则显示 Q3:请评价您的购买体验。 - 或条件 显示
if Q1A1 or Q1A2 then show Q2示例
Q1:您日常出行方式有哪些?
A1:骑自行车
A2:步行
A3:驾车
📝如果用户选择了“骑自行车”[Q1A1] 或“步行”[Q1A2],则显示Q2:您对绿色出行的看法? - 组合条件显示
if (Q1A1 or Q1A2) and Q2A1 then show Q2,Q3示例
Q1:您通过哪些渠道了解我们的产品?
A1:社交媒体
A2:线上广告
A3:线下门店
Q2:您是否曾经访问过我们的官方网站?
A1:是
A2:否
Q3:您最常访问我们官网的哪个版块?
Q4:您是否愿意参与产品改进的用户访谈?
📝如果用户在Q1中选择了“社交媒体”[Q1A1]或“线上广告”[Q1A2],且Q2中选择了是访问过官网[Q2A1],则显示 Q3 和 Q4。
隐藏方法——hide
if Q1A1 then hide Q2
📝 如果选择了Q1A1,则隐藏第二题[Q2]
⚠️隐藏hide与显示show
隐藏与显示对逻辑语句的使用基本相同
- 想让题目在特定条件下才出现:用 show
- 想让题目在特定条件下消失:用 hide
为了使问卷逻辑更清晰,建议配合题目的业务背景选择合适的方法。
跳转方法——goto
- 单条件跳转
if Q1A1 then goto from Q1 to Q6
示例
Q1:您是否愿意参与本次完整问卷?
A1:不愿意
A2:愿意
Q2~Q5:调查详细问题
Q6:请问不参与问卷的原因?
📝如果用户在Q1中选择了不愿意[Q1A1],则直接略过Q2~Q5,跳转到Q6。
跳转到结尾
此外,单条件跳转不仅可以跳转到某一题,也可以直接跳转到问卷结尾if Q1A1 then goto from Q1 to END
END是表示问卷结尾的题目变量。
- 组合条件跳转
if (Q1A1 and Q2 < 65) or (Q1A2 and Q2 < 60) then branch from Q2 to END
示例
Q1. 你的性别?
A1:男
A2:女
Q2:你的年龄?
Q3~Q8:调查详细问题
📝如果用户是男性且年龄小于65岁[(Q1A1 and Q2 < 65)],或是女性且年龄小于60岁[Q1A2 and Q2 < 60],则在答完 Q2 后,直接跳转到问卷结束,不再显示 Q3~Q8。
赋值方法——assignment
- 条件赋值
if Q1A1 then assignment Q2 = 20
示例
Q1:您是否参加过我们的培训课程?
A1:是
A2:否
Q2:培训评估得分(系统自动填写)
📝 如果用户在 Q1 选择了“是”[Q1A1],则系统将 Q2 的值设置为 20。
- 无条件赋值
assignment Q2 = 20
📝 无论用户填不填写,系统一开始就将 Q2 的值设置为 20
验证方法——=validate
- 无条件相等验证
validate Q5 == Q1 + 1
示例
Q1:候选人已完成的面试轮数
Q5:当前要安排的面试轮次为第几轮?
📝 确保面试安排连续进行,不跳轮、不重复面。Q5 必须等于 Q1 +1。
- 无条件范围验证
validate Q5 >= Q1 + 1
示例
Q1:您现有的项目成员人数?
Q5:您希望扩充后的团队人数?
📝 系统检查 Q5 是否大于等于 Q1 + 1,即新团队人数至少要增加一个人。
用于业务逻辑合理性验证,防止用户输入不符现实预期的数值。
- 条件验证
if Q1A1 then validate Q5 >= Q1 + 1
示例
Q1:您拥有的子女数量?
A1:填写为整数,例如 1、2、3...
Q5:您预计明年子女数量? 📝 如果用户在 Q1 中填写的子女数量是 1,并选择了 A1(表示确认为“当前准确”),
则系统校验 Q5 的值必须 大于等于 Q1 的值 +1,也就是至少为 2,
否则提示“请检查您的预期是否合理”。
取选中选项的长度——selectSize
assignment Q2 = selectSize(Q1)
示例
Q1:您常用的购物平台是?
A1:淘宝
A2:京东
A3:拼多多
A4:其他
Q2:常用胡购物平的数量是多少?
📝 Q2 为填空题,用于记录用户在 Q1 中选择了几个选项。
例如,如果用户选择了淘宝和京东,selectSize(Q1) 返回 2,Q2 的值将为 2。
这种方式常用于统计选择数量、做分支判断或配额设置等。
配置选项互斥——mutex ... deselect ...
mutex Q1A1 deselect Q2A1
mutex Q1A2 deselect Q2A2
mutex Q1A3 deselect Q2A3示例
Q1:请选择您认可的描述(可多选)
A1:服务及时
A2:态度友好
A3:效率高
Q2:请选择您不认可的描述(可多选)
A1:服务拖延
A2:态度冷漠
A3:处理缓慢
📝对于“服务及时”[Q1A1]和“服务拖延”[Q2A1]用户只能二选其一,剩余选项同理,这样能够避免评价逻辑自相矛盾。

