推荐给好友 上一篇 | 下一篇

【原义光】精通SCORM系列之二:SCORM RET概述

 

运行时环境概述

SCORM运行时环境模型定义了:发布内容对象、在LMSs和SCOs之间建立通信机制以及根据LMSs和SCOs之间的通信信息来管理跟踪信息。在SCORM中,内容对象有两种:
 ● 可共享内容对象(SCOs), SCOs可以在运行时与LMS通信;
 ● 素材(Assets),Assets在运行时不与LMS通信;
运行时环境主要处理:
 ● 将内容对象传递到学习者的浏览器中(例如发布学习内容);
 ● 在需要时,内容对象如何与LMS互相通信;
 ● 内容对象的什么信息应该被跟踪以及LMS如何管理这些信息;

SCORM的目的是学习资源可以在不同的学习管理系统中重复使用和具有互操作性。要使这些成为可能,必须有公共的方法启动学习资源、公共的机制使学习资源和LMS进行交流,并要有预定义的语言和词汇形成这种交流的基础。实时运行环境(Run-Time Environment)就提供了这种公共机制。实时运行环境有三个方面: 运行(Launch)、应用编程接口(API)和数据模型(Data Model)。

 ● 运行(Launch)处理为LMSs定义了一个通用的方法来启动内容对象。在SCORM中定义了两种内容对象:Assests和SCOs。运行处理确立了在运行的内容对象与LMS之间的通信机制,这种通讯通过公共的API进行标准化。

 ● API是内容对象与LMS之间传送的信息的一种通信机制,使用API可以开始、结束、获取、存储数据等动作。

 ● 数据模型(Data Model)主要描述了在SCO与LMS之间传送信息数据的模型,如SCO的跟踪信息,SCO的完成状态、一次测试的成绩等数据。在学习者会话中,LMS必须维护来自SCO数据模型的状态信息。而SCO需要利用这些预先定义的信息,以便在不同的LMS中重复使用。

管理运行时环境

当学习者与内容对象交互(学习尝试)时,LMS需要处理学习者的导航请求。当LMS确定一个学习活动请求对学习者时有效的时候(一个学习活动与一个内容对象相关联),LMS才会将内容对象发布到学习者面前。

运行时环境临时模型

当学习者与内容对象交互的时候,一个与内容对象(Asset或SCO)相关联的学习活动(Activity)被确定,并且被传送到学习者的浏览器中。在学习者的一次学习尝试中,有几个关键的概念需要明确定义:

 ● Learner Attempt(学习尝试):
使用内容对象来跟踪学习者一次学习活动的努力与满意情况。一次学习尝试可以跨越一个或多个学习者的课程,并且在课程间可能被悬挂(暂停学习)。
 ● Learner Session(学习会话):
指在学习者访问一个内容对象时的一个不间断的时间段。
 ● Communication Session(通信会话):
指在一个内容对象(如:SCO)与一个应用程序接口之间的一个活动连接。
 ● Login Session(登录会话):
指学习者开始一个会话(登录),直到学习者终止会话(登出)之间的时间段。

对于Asset来说,RTE仅由独立的学习尝试和学习会话组成,每个发布的Asset的学习尝试都有相应的学习会话。当一个学习活动被确认,并且传送到学习者面前,学习尝试就开始了。在学习尝试期间,学习者与内容对象(SCO或Asset)交互。当学习内容被传送到学习者浏览器内并开始使用时,学习会话开始了。当运行的内容对象时SCO时,SCO会与LMS进行初始化通信,这样通信会话就开始了。当SCO与LMS终止通信时,通信会话就结束了。当SCO处于暂停状态离开(学习者未通过SCO)或SCO处于正常状态离开(学习者通过SCO要求离开学习尝试)时,学习者会话结束。对于SCO来说,学习者在正常状态下结束学习会话时,学习尝试也相应结束。对于Asset来说,学习者结束Asset时,学习尝试也结束了。

LMS必须定义一些运行时数据集合,在Learner Attempt期间,SCO可以使用该集合与LMS互相通信。对于一个SCO来讲,当Learner Attempt开始时,LMS必须建立和初始化新的运行时数据集合,以供SCO访问和使用。SCORM不规定必须完全重新建立一个运行时数据集合,但是对于SCO来说,它在访问和使用该数据集合的时候,感觉象在使用一个新的运行时数据集合。
LMS可以选择保存运行时数据集合,以供其他地方使用,例如报表、审核、统计等。LMS也可以选择不保存先前的学习尝试的运行时数据。只有在学习尝试被暂停的情况下,LMS必须保存该学习尝试的运行时数据集合,以便该学习尝试恢复运行时使用。注意,当学习尝试被暂停,Learner Session和Learner Attempt都被结束了,因此当下一次Learner Session开始时,将会产生新的运行时数据集合,因此LMS需要将上次保存的运行时数据集合填充到新的运行时数据集合中去。

具有单个Learner Session的Learner Attempt。

具有多个Learner Session的Learner Attempt。在这里Learner Session被暂停多次,而Learner Attempt随后被重新继续,直到Learner Session于正常状态下被终止。

多个Learner Attempt和多个Learner Session。

应用程序接口(API)

概述

使用一个公共的API是为了提供一个标准的方法,使用该方法可以使的SCOs和LMSs之间互相通信,以达到互动性与重用性。怎样执行API进行通信是SCO开发者的事,同样服务器端的LMS怎样提供一个API实例以供SCO使用也不是由SCORM规定的,具体实现细节由LMS厂商决定。

由上图可以看到API只是一些函数的集合,SCO使用该函数集合与LMS进行通信。

 ● API执行(API Implementation)是一个功能函数的一部分,API执行函数的实现与SCO开发者无关。LMS需要提供API执行的实现,而且对客户端的SCO呈现出部分公共的接口。

 ● API实例(API Instance)是API执行的上下文和状态,是与SCO操作时的一个实例。
API是SCO与LMS之间的通讯机制。根据作用API的方法分为三类:

使用API方法必须注意以下几点:
 ● 所有的方法名称是大小写敏感的;
 ● 所有的方法的参数也是大小写敏感的;
 ● 所有通过参数传递的数据都是字符串的形式。

会话方法有:
●  Initialize(“”)
●  Terminate(“”)

数据转换方法有:
●  GetValue(parameter)
●  SetValue(parameter_1, parameter_2)
● Commit(parameter)

支持方法有:
●  GetLastError()
● GetErrorString(parameter)
●  GetDiagnostic(parameter)

通信会话状态模型
通信会话状态模型定义了API实例的状态模型。API实例的状态有三种:
●  未初始化
●  运行中
●  终止

未初始化(Not Initialized)状态:这个通信状态表示在运行SCO时但是SCO还没有调用Initialize(“”)方法之前的API实例的状态。在这期间,SCO需要搜索LMS提供的API实例。SCO可以调用下面几个API方法:
 ● GetLastError()
 ● GetErrorString()
 ● GetDiagnostic()

运行(Running)状态:这个通信状态表示在SCO成功调用Initialize()方法之后,并且SCO成功调用Terminate()方法之前的API实例的状态。在这个状态中SCO允许使用下列API方法:
 ● GetValue()
 ● SetValue()
 ● Commit()
 ● GetLastError()
 ● GetErrorString()
 ● GetDiagnositic()

终止(Terminated)状态:这个通信状态表示SCO成功调用Terminate()方法之后API实例的状态。在这个状态中SCO允许使用下列API方法:
 ● GetLastError()
 ● GetErrorString()
 ● GetDiagnositic()

API执行的错误代码

所有的错误代码都是整形数,并且通过转换成一个字符串返回。错误代码可以使用0到65535之间的数字。其中0到999是被保留使用的。所以1000到65535之间任意的数字是任意使用的。
所有的API方法在执行完都需要提供一个错误代码,除了支持方法:GetLastError()、GetErrorString()、GetDiagnositic()。SCO可以使用GetLastError()方法来获得最近一次API方法调用后的错误代码,使用GetLastErrorString()来获得错误的描述信息。下面就是错误代码的分类表格:

LMS的职责

SCORM规定LMS必须提供一个符合标准的API实例,该实例实现了SCORM所规定的API方法。为了给SCO提供API实例,LMS必须实现如何访问或定位API实例的功能。为了实现该功能,LMS必须提供一个名为”API_1484_11”的对象, LMS必须提供使SCO通过ECMAScript脚本能够访问到该API实例对象。

LMS可以在浏览器的子窗口中执行SCO,也可以在一个子Frame中运行SCO。而SCO通过ECMAScript来搜索和定位API实例。

SCO的职责

SCO的责任是通过API与LMS进行通信。SCO必须能寻找和定位API实例,这样SCO就可以通过LMS对学习者进行跟踪。
在SCORM环境中,内容对象是运行于web浏览器中,通过浏览器提供的DOM树可以定位API实例对象。DOM对一个页面中的所有对象的结构进行了组织。SCO在定位API实例时必须寻找下列位置:

 1. 搜索当前窗口的父窗口,父窗口的父窗口,一直追溯上去,直到最顶层的窗口;
 2. 搜索开启窗口,即打开当前窗口的那个窗口;
 3. 搜索开启窗口,如果开启窗口有父窗口的话,也必须一直追溯上去,直到最顶层的窗口;

SCO必须按照这种方式搜索API实例,直到API实例被发现,为了让SCO能找到API实例,IEEE为API实例对象在DOM树中定义了一个强制性名字:API_1484_11。

一旦SCO找到了API实例,则SCO就可以调用API方法,如Initialize(“”)和Terminate(“”)。

IEEE标准已经提供了一个用ECMAScript搜索API实例的实现,如下:

var nFindAPITries = 0;
var API = null;
var maxTries = 500;
var APIVersion = "";

function ScanForAPI(win){
   while ((win.API_1484_11 == null) && (win.parent != null)
           && (win.parent != win)) {
      nFindAPITries++;
      if (nFindAPITries > maxTries) {
         alert("Error in finding API instance -- too deeply nested.");
         return null;
      }
      win = win.parent;
   }
   return win.API_1484_11;
}

function GetAPI() {
   if ((win.parent != null) && (win.parent != win)) {
      API = ScanForAPI(win.parent);
   }
   if ((API == null) && (win.opener != null)) {
      API = ScanForAPI(win.opener);
      if (API != null) {
         APIVersion = API.version;
      }
   }
}



 

评分:0

我来说两句

seccode