Tin Can PHP库:人物对象

时间:2017-01-25 13:54:33

标签: php object tin-can-api

我的问题与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对象并指示对象的目的是

  

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

从该描述和库(see link)的开发人员看来,规范的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对象找到任何方法。如果没有,它的用途是什么?

我很感激澄清。谢谢。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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