运行时环境概述
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;
}
}
}SCORM运行时环境数据模型
概述
定义运行时数据模型的目的是为了在不同的LMS环境下,关于SCO的信息能被LMS所跟踪和记录。例如需要记录学习者的学习成绩,SCO必须通过一个公共的方法来向LMS提供学习者的学习成绩,如果没有这些公共的方法,LMS将不知道如果获取、存储和处理这些信息。
SCORM 运行时数据模型基于IEEE LTST Computer Managed Instruction(CMI)的P1484.11.1草案标准。P1484.11.1标准定义了一些数据模型元素的集合,这个集合能被用于内容对象 (如SCO)向LMS之间传递信息。集合可以包含有关学习者的信息、目标信息、成功状态以及完成状态。
SCORM运行时数据模型基于AICC CMI001,在SCORM版本1.2的时候,AICC完成了CMI001,并提交给了IEEE进行标准化。
为了标识数据模型,在SCORM运行时环境中,所有的数据模型元素的名称必须以”cmi”开头。它表示该数据模型元素是IEEE P1484.11.1数据模型定义的部分。因此你可以自己定义自己的数据模型的名称。唯一有限制的是,LMS必须实现数据模型所定义的动作。
所有的数据模型对于SCO来说都是选择使用的,SCO必须使用的API函数仅仅是Initialize(“”)和Terminate(“”)而已,而SetValue()以及GetValue()都不是必须使用的。
所有的数据模型元素都定义为ECMAScript的字符串类型,并使用的点符号(如cmi.success_status),处理集合
有些数据模型元素表现为一个集合。在本文档中数据集合称为一条数据记录,一条数据记录应该被存放于数组的一个位置中。通过数组的索引号可以访问该数据记录,数组的索引号从0开始。下列数据模型元素被定义为数据记录的集合:1. 来自学习者的注释(cmi.comments_from_learner)
2. 来自LMS的注释(cmi.comments_from_lms)
3. 目标(cmi.objectives)
4. 交互(cmi.interactions)在调用GetValue()请求时,有两种情况下会发生错误:
1. 常规获取失败:
数据集合元素请求溢出。请求的数据记录在数组指定的位置不存在。
2. 数据模型元素值没有设置:
请求的数据记录存在于数组指定的位置,但是该位置的值没有被初始化。在集合中的数据模型元素使用点-数字来表示(如n.):
cmi.objective.n. completion_status
_count数据模型的关键字用来确定当前集合中数据模型元素的数量。例如:
var numOfObjectives = GetValue("cmi.objectives._count");
所有的集合型数据模型元素(除了cmi.comments_from_lms,这个数据元素对于SCO来说是只读的)能够有属于自己的子元素。数据模型元素关键字
有 三个数据模型关键字:_version、_count和_children。这几个关键字都是受LMS所管理,并且这些关键字反映的是其他数据模型元素的 状态。这些关键字必须是只读的,如果SCO使用SetValue()来设置这些关键字,则LMS应该设置错误代码”404”(表示数据模型是只读的),并 且返回”false”。_count和_children只能应用于某一个数据模型元素上。 _version:_version数据模型关键字用在确定被LMS支持的数据模型的版本。该关键字不能用于任何数据模型元素上。
_count:_count数据模型关键字用于确定一个集合中当前所有数据模型元素的总数量。该值可以用作确定集合中下一个存储的位置。该关键字仅能用于集合类型的数据模型元素。
_children:_children 数据模型关键字用户确定一个父数据模型元素集合所拥有的所有的子数据模型元素。一个有效的_children请求应该返回一个字符串,该字符串包含所有的 数据模型元素,并且用一个通用的分隔符进行分割。该关键字仅能用于含有子数据模型元素的数据模型元素。保留分隔符
数据类型
每个数据模型元素必须关联一个定义的数据类型
characterstring:
一个字符串,定义在ISO10646标准中,ISO10646标准与UNICODE标准兼容。
localized_string_type:
一个本地化的字符串,在字符串前包含使用语言的指示器,以确定该字符串使用什么语言导入。SCORM使用保留定界符来表示字符串的语言。
格式:
“{lang=<language_type>}”<actual characterstring>
例如:
“{lang=en}The content presented an excellent point dealing with the topic.”
{lang=<language_type>}是可选的,默认值是en(English)。
language_type:
描述语言类型的数据类型,语言代码定义的格式:
language_type ::= langcode [“-” subcode]*
long_identifier_type:
short_identifier_type:
integer:
state:
real (10,7):
time (second, 10, 2):
timeinterval (second, 10,2):扩展SCORM运行时数据模型
SCORM运行时数据模型不应该被扩展,如果LMS收到一个带有未定义数据模型元素未参数的API请求,LMS必须:1. GetValue(Parameter):LMS必须空的字符串,并且设置错误代码”401”——未定义的数据模型元素;
2. SetValue(Parameter_1, Parameter_2):LMS必须返回”false”,并且设置错误代码”401”——未定义的数据模型元素;
SCORM运行时环境数据模型
概述
定义运行时数据模型的目的是为了在不同的LMS环境下,关于SCO的信息能被LMS所跟踪和记录。例如需要记录学习者的学习成绩,SCO必须通过一个公共的方法来向LMS提供学习者的学习成绩,如果没有这些公共的方法,LMS将不知道如果获取、存储和处理这些信息。
SCORM运行时数据模型基于IEEE LTST Computer Managed Instruction(CMI)的P1484.11.1草案标准。P1484.11.1标准定义了一些数据模型元素的集合,这个集合能被用于内容对象 (如SCO)向LMS之间传递信息。集合可以包含有关学习者的信息、目标信息、成功状态以及完成状态。
SCORM运行时数据模型基于AICC CMI001,在SCORM版本1.2的时候,AICC完成了CMI001,并提交给了IEEE进行标准化。
为了标识数据模型,在SCORM运行时环境中,所有的数据模型元素的名称必须以”cmi”开头。它表示该数据模型元素是IEEE P1484.11.1数据模型定义的部分。因此你可以自己定义自己的数据模型的名称。唯一有限制的是,LMS必须实现数据模型所定义的动作。
所有的数据模型对于SCO来说都是选择使用的,SCO必须使用的API函数仅仅是Initialize(“”)和Terminate(“”)而已,而SetValue()以及GetValue()都不是必须使用的。
所有的数据模型元素都定义为ECMAScript的字符串类型,并使用的点符号(如cmi.success_status),
处理集合
有些数据模型元素表现为一个集合。在本文档中数据集合称为一条数据记录,一条数据记录应该被存放于数组的一个位置中。通过数组的索引号可以访问该数据记录,数组的索引号从0开始。下列数据模型元素被定义为数据记录的集合:
1. 来自学习者的注释(cmi.comments_from_learner)
2. 来自LMS的注释(cmi.comments_from_lms)
3. 目标(cmi.objectives)
4. 交互(cmi.interactions)
在调用GetValue()请求时,有两种情况下会发生错误:
1. 常规获取失败:
数据集合元素请求溢出。请求的数据记录在数组指定的位置不存在。
2. 数据模型元素值没有设置:
请求的数据记录存在于数组指定的位置,但是该位置的值没有被初始化。
在集合中的数据模型元素使用点-数字来表示(如n.):
cmi.objective.n. completion_status
_count数据模型的关键字用来确定当前集合中数据模型元素的数量。例如:
var numOfObjectives = GetValue("cmi.objectives._count");
所有的集合型数据模型元素(除了cmi.comments_from_lms,这个数据元素对于SCO来说是只读的)能够有属于自己的子元素。
数据模型元素关键字
有 三个数据模型关键字:_version、_count和_children。这几个关键字都是受LMS所管理,并且这些关键字反映的是其他数据模型元素的 状态。这些关键字必须是只读的,如果SCO使用SetValue()来设置这些关键字,则LMS应该设置错误代码”404”(表示数据模型是只读的),并 且返回”false”。_count和_children只能应用于某一个数据模型元素上。
_version:_version数据模型关键字用在确定被LMS支持的数据模型的版本。该关键字不能用于任何数据模型元素上。
_count:_count数据模型关键字用于确定一个集合中当前所有数据模型元素的总数量。该值可以用作确定集合中下一个存储的位置。该关键字仅能用于集合类型的数据模型元素。
_children:_children 数据模型关键字用户确定一个父数据模型元素集合所拥有的所有的子数据模型元素。一个有效的_children请求应该返回一个字符串,该字符串包含所有的 数据模型元素,并且用一个通用的分隔符进行分割。该关键字仅能用于含有子数据模型元素的数据模型元素。
保留分隔符
数据类型
每个数据模型元素必须关联一个定义的数据类型
characterstring:
一个字符串,定义在ISO10646标准中,ISO10646标准与UNICODE标准兼容。
localized_string_type:
一个本地化的字符串,在字符串前包含使用语言的指示器,以确定该字符串使用什么语言导入。SCORM使用保留定界符来表示字符串的语言。
格式:
“{lang=<language_type>}”<actual characterstring>
例如:
“{lang=en}The content presented an excellent point dealing with the topic.”
{lang=<language_type>}是可选的,默认值是en(English)。
language_type:
描述语言类型的数据类型,语言代码定义的格式:
language_type ::= langcode [“-” subcode]*
long_identifier_type:
short_identifier_type:
integer:
state:
real (10,7):
time (second, 10, 2):
timeinterval (second, 10,2):
扩展SCORM运行时数据模型
SCORM运行时数据模型不应该被扩展,如果LMS收到一个带有未定义数据模型元素未参数的API请求,LMS必须:
1. GetValue(Parameter):LMS必须空的字符串,并且设置错误代码”401”——未定义的数据模型元素;
2. SetValue(Parameter_1, Parameter_2):LMS必须返回”false”,并且设置错误代码”401”——未定义的数据模型元素;