0

我的问题与 Tin Can PHP API 库的Person对象以及它的用途有关。

该库的Person对象(据我所知)是 xAPI 规范第 3 部分第 2.4 节中代理资源的实现(链接:https ://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Communication .md#24-agents-resource)。该规范识别一个 Person 对象并指出该对象的目的是

提供有关从外部服务(例如目录服务)派生的代理的组合信息

从该描述和库的开发人员(参见链接)看来,规范的 Person 对象旨在提供一种在一个对象内收集有关一个人的信息的方法,该信息分散在许多不同的 Agent 中对象。

我在遵循库中的示例时遇到了困难,但以下(过于简单的)代码似乎在 SCORM Cloud LRS 中有效:

...
$agent1 = new TinCan\Agent();
$agent1
    ->setMbox('david.jones@somehospital.gov.au')
    ->setName('Dr David Jones');

$agent2 = new TinCan\Agent();
$agent2
    ->setMbox('d.jones@medicalorg.org.au')
    ->setName('David Jones');

$person = new TinCan\Person();
$person
    ->setMbox([$agent1->getMbox(), $agent2->getMbox()])
    ->setName([$agent1->getName(), $agent2->getName()]);
...

库的Person对象是否打算保存到 LRS?如果是这样,我无法使用库的Statement对象找到任何方法。如果不是,它的预期用途是什么?

我将不胜感激。谢谢你。

4

1 回答 1

1

API 不提供保存此对象的方法。LRS 旨在使用它可以使用的任何方式将表示同一实体的多个代理组装到 Person 对象中。预期目的是允许访问语句流的系统能够为多个代理组合这些流,以更全面地了解该人的整体活动。

例如,我可能有 3 个(或 X)个标识符来代表我作为一个人,假设它们是:

  • mailto:dave.personal@example.com
  • mailto:davelastname@work.example.com
  • {"name": "@dave11785","homePage": "https://twitter.com"}

将这些代理标识符中的任何一个(作为完整的代理表示)传递给 Person 只读资源将返回一个包含所有这些代理的对象,假设 LRS 有足够的知识将它们映射在一起。因此,对于报告系统,它可以在读取语句流时为其看到的每个新代理请求 Person 对象,然后将具有不同actor属性(例如)的语句协调到该人完整活动的单个记录中。这里的关键是,LRS 必须以这样一种方式开发(或集成),使其具有将代理关联在一起的必要知识。

TinCanPHP 提供了全范围的数据模型对象,因为理论上它可以用来编写 LRS,就像与 LRP 进行通信一样多。这里的关键实现细节是它GET /agents通过类提供只读资源,TinCan\RemoteLRS该类将返回一个TinCan\Person对象。由于您的代码没有与TinCan\RemoteLRS类的实例交互,因此它实际上并未与 LRS 通信,因此 SCORM Cloud 的 LRS 在这种情况下无关紧要。如果您要使用可用资源进行交互,您将返回一个 Person 对象,其中仅包含您传递给它的代理,因为(至少在撰写本文时)Cloud 不知道如何关联多个代理,但它确实知道默认是提供给它的代理。

于 2017-01-25T20:50:06.063 回答