我的问题与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
对象找到任何方法。如果没有,它的用途是什么?
我很感激澄清。谢谢。
答案 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对象,该对象仅包含您传递给它的代理,因为(至少在撰写本文时)云不知道如何关联多个代理,但它确实知道默认值是提供给它的代理。