购买咨询
微信咨询
电话咨询
预约演示
跳转到内容

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 ...

dsl
mutex Q1A1 deselect Q2A1
mutex Q1A2 deselect Q2A2
mutex Q1A3 deselect Q2A3
示例

Q1:请选择您认可的描述(可多选)
A1:服务及时
A2:态度友好
A3:效率高
Q2:请选择您不认可的描述(可多选)
A1:服务拖延
A2:态度冷漠
A3:处理缓慢
📝对于“服务及时”[Q1A1]和“服务拖延”[Q2A1]用户只能二选其一,剩余选项同理,这样能够避免评价逻辑自相矛盾。

调问-专业的开源问卷表单系统