锡罐 PHP 库:人物对象

Tin Can PHP library: Person object

我的问题与锡罐 PHP API 图书馆的 Person 对象及其用途有关。

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

provide combined information about an Agent derived from an outside service, such as a directory service

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

我很难遵循库中的示例,但以下(过于简化的)代码似乎在 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 对象的任何方法。如果不是,它的预期用途是什么?

非常感谢您的澄清。谢谢。

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

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

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

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

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