sam-it / ls-interfaces
Limesurvey 实体接口:调查、组、问题、答案
v0.5.0
2016-06-03 08:36 UTC
README
Limesurvey 实体接口:调查、组、问题、答案
从 Limesurvey 问题、子问题和答案量表中抽象出来的方法是以下这种方式。
LimeSurvey 抽象。
--草案
- 每个问题都有若干维度(目前限制为:{0, 1, 2})。
- 单一选择或文本问题有0个维度,它有1个数据点。
- 具有1个维度的问题有n个数据点,其中n是第一维度中(子)问题的数量。
- 具有2个维度的问题有n * m个数据点,其中n是第一维度中的问题数量,m是第二维度中的问题数量。
- 每个数据点要么有一个固定的答案集(Limesurvey 强加额外限制,即对于每个问题,这个固定集对所有子问题都是相同的)。
示例
public function int getDimensions();
/**
* Returns the subquestions for the specified dimension.
**/
public function QuestionInterface[] getQuestions(int $i);
如果 getDimensions()
对于一个问题返回2,那么从 getQuestions()
返回的所有问题都将有1个维度。(把它想象成部分函数应用)
if ($question->getDimensions() == 2) {
foreach($question->getQuestions(0) as $i => $subQuestion) {
assert($subQuestion->getDimensions() == 1);
foreach($subQuestion->getQuestions(0) as $j => $subSubQuestion) {
assert($subSubQuestion->getDimensions() == 0);
assert(
$subSubQuestion->getId()
== $question->getQuestions(1)[j]->getQuestions(0)[$i]->getId()
== $question->getQuestions($i, $j)->getId()
);
}
}
}
直观地说,在大多数情况下,你可以将维度0视为Y轴,将维度1视为X轴。你吃了多少?
- 请注意,与实际中的 LimeSurvey 不同,这些接口可以支持每个数据点的不同答案选项。
这些接口要求实现者即使 LimeSurvey 可能没有相应的查询,也要实现问题对象
在这个例子中(在LS中),量表1有答案选项1、2和3,量表2有选项是、否和可能。这些接口没有答案量表的概念。相反,只有0个维度的问题可以有答案选项。此外,我们的接口要求这以具有2个维度的形式暴露,每个维度有2个问题。请注意,这个例子中的量表1和量表2必须作为问题暴露。
用法
这些接口的目的是允许开发人员在不担心 LimeSurvey 内部结构的情况下编写程序。实现者可以,例如,创建一个客户端,使用LS2.x中可用的JSON-RPC API(https://github.com/SAM-IT/ls2-jsonrpc-client)。另一种选择是创建一个 LimeSurvey 插件,将所需的数据作为JSON暴露(这可能会更高效,因为需要的往返次数更少)。
当 LimeSurvey 内部结构发生变化时,不需要适应依赖代码,唯一需要适应的是这些接口的实现。
注意
一些随机笔记,将移至适当的接口
QuestionInterface::getId()
必须在 LimeSurvey 安装中是唯一的,这也适用于“虚拟”对象,如量表问题。