简介
SCORM定义了一个网络化学习的“内容聚合模型”(Content Aggregaion Model)和学习对象的“实时运行环境”(Run-time Environment)。
简单说,它是为了知足对网络化学习内容的高水平要求而设计的模型,参考了一系列相关技术规范。
这个模型由内容模型(Content Model)、元数据(Meta-data)和内容包装(Content Packaging)三部分组成。
Scorm RTE定义了通用的内容对象运行机制,包括Launch、API以及Data Model。Launch
: 定义了内容对象的发布,描述了如何启动一个Scorm内容对象(Asset和SCO两种),并确立了内容对象和LMS之间的通讯机制。API
: 定义了LMS与内容对象之间的通讯API,使得内容对象在须要时经过API与LMS进行交互存取数据。API会将得到的数据模型实例存储在用户端的内存中(如一个JavaScript对象),并在须要时将该数据发送至LMS平台。Data Model
: 描述了跟踪用户学习通用数据模型,即内容对象在与LMS进行通讯时所依赖的数据结构,包括用户的学习时间、完成状态、成绩等元素。LMS须要对每一个用户的每一个内容对象维护一个Data Model数据结构。html
API提供了内容对象与LMS通讯的接口,而DM则描述了通讯所使用的数据模型,API+DM使得内容对象在不一样的LMS系统中具备了通用性。数据库
更详细的介绍请参考scorm百度百科和SCORM维基百科。编程
下面时本身查阅资料,概括整理的SCORM标准中API接口和Data Model参数详解,以便各位同行开发时查阅使用,也是本身学习过程的总结记录,不正确之处请你们指正。服务器
应用编程接口(API)
在SCORM标准中,SCO(SharableContentObject)是LMS经过SCORMRTE(运行时间环境)能够跟踪的最低粒度水平的学习资源,它们的通信由APIAdapter(适配器)来完成。网络
API定义了八个主要的function,分别是LMSInitilize
、LMSFinish
、LMSSetValue
、LMSGetValue
、LMSCommit
、LMSGetLastError
、LMSGetErrorString
、LMSGetDiagnostic
,其中LMSGetValue
和LMSSetValue
最为复杂,也是跟踪中使用频率最高的,通信过程当中使用DataModel(数据模型)来记录跟踪信息。session
LMSInitilize
LMSInitilize
初始化函数,负责在当前学习的内容对象和LMS之间创建通讯链接,并从LMS取得该当前用户关于当前内容对象的学习记录信息,即整个DM数据结构。内容对象在载入时均会经过该方法得到初始运行时数据。函数成功执行返回”true”(字符串,非布尔值,下同),不然返回”false”。
当学习者进入开始阅读一个SCO时,SCO第一步就是调用LMSInitialize判断该学员之上课记录,当学员第一次阅读该门课的该SCO时,LMSInitialize就会将设定初值至相关的环境变量;若学习者并非第一次阅读该SCO,LMSInitialize则必须将该学习者以前的上课记录取出,并存入环境变量中,如此即完成启动SCO之动做。数据结构
LMSFinish
LMSFinish
结束函数,结束一个内容对象与LMS的通讯链接。内容对象在退出前均会调用该方法。一般实现时,该方法会调用LMSCommit提交一次最近的数据。当LMS平台在API实现时,选择HTTP协议进行无状态通讯,则该函数自己将不产生数据通讯,仅仅是调用LMSCommit提交一次数据。成功执行返回”true”,不然返回”false”。
当学习者阅读完并要离开一个SCO时,在结束时SCO便会调用LMSFinish将环境变量重设,并判断该SCO是否在结束以前己经有调用过LMSCommit将全部记录回存至LMS,若还没有储存,则会自动调用并将全部学习者在该SCO的上课记录回存。less
LMSSetValue
LMSSetValue
负责更新一个数据模型的属性值。该方法原型为LMSSetValue(element, value),参数element标识要设置的属性,value则是属性的值。LMSSetValue 是至关复杂的Function,负责储存全部相关的学习记录,当SCO调用LMSSetValue欲将某个data model回存时,LMSSetValue第一步先判断所欲回存之data model,判断该data model是否能够set(写入),其次判断其型别,当型别错误时,记录其Error Code,当型别检查经过时,则依SCORM1.2 RTE所订定该data model的处理规则,并将数据存入内存中。例如,内容对象在须要更改DM的某一属性值时会调用该函数,如当用户完成学习一个内容对象后需将该内容对象的cmi.core.lesson_status更新为completed。一般该函数只是更新客户端内存中该属性的值,而非直接提交至LMS平台。函数成功执行返回”true”,不然返回”false”。ide
LMSGetValue
LMSGetValue
获取一个数据模型的属性值。该方法原型为LMSGetValue(element),参数element,表示属性名。一般该方法直接从客户端内存中取出所需的值。成功执行则返回对应的属性值,不然返回空字符串。当SCO调用LMSGetValue时,LMSSetValue会先判断data model是否能够读取,若不可读取,则写入其错误代码;若该data model是能够读取,则进取出其值并回传给SCO。LMSSetValue并无直接和receiver相连,因此是将数据由暂存的内存中取出。函数
LMSCommit
LMSCommit
提交函数,负责将客户端内存中目前的RTE数据提交至LMS平台,由平台完成最后的分析写入工做。因此当LMSCommit被调用时,会将全部之暂存数据组成XML文件,再应用XMLHTTP对象将数据POST到 Receiver,当Receiver收到这个Request时,就会解译所传入之XML文件,再将XML文件中的数据直接存入数据库中。采用JS实现的API可用AJAX进行数据提交。成功返回”true”,不然返回”false”。
LMSGetLastError
LMSGetLastError
得到错误码,当内容对象调用API时返回”false”或产生其余错误时,可调用该函数得到具体的错误代码,API实现中须要设置相应的错误码。
LMSGetErrorString
LMSGetErrorString
得到错误码对应的字符串说明,参数为错误码。
LMSGetDiagnostic
LMSGetDiagnostic
得到针对当前错误的诊断信息,参数为错误码。
数据模型(Data Model)
Scorm1.2 RTE数据模型部分定义了跟踪内容对象的数据结构。LMS平台须要为每一个用户的每一个内容单元维护一组数据模型实例,该实例数据记录了该用户对应于该内容对象的学习状态(如分数、进度、完成状态等)。
DM中全部的属性均以cmi开头,以”.“分隔。同时数据模型中定了了三个关键字:children、_count,保留的关键字受LMS管理,且均为只读(如使用LMSSetValue设置_version属性,则会返回false,且API应在实现时将错误码置为402)。version
: 标识了LMS平台支持的数据模型版本,该属性不可用于数据模型元素上(即只能以cmi._version方式获取)children
:返回某一数据模型元素的全部子属性(元素),以字符串形式返回,并以执行的分隔符分隔_count
: 返回一个数据模型元素集合中包含的元素总数,仅用于集合类型的数据模型
数据模型元素能够分为9类,以下:
cmi.core
: 核心数据,该组中元素属性LMS必须支持
要求全部的CMI系统都提供的信息,全部SCO在启动运行时都须要这些信息,子数据项有:.Student ID(学生学号)、.Student Name(学生姓名)、.Output Mechanism(输出机制)、.Lesson Location(课的位置)、.Credit(学分)、.Lesson Status(课的状态)、.Entry(入口)、.Information Store(信息存储)、.Score(分数)、.Total Time(总时间)、.Lesson Mode(课的模式);
1. cmi.core.total_time:
这个参数是指学习本sco用的总时间,只能读,不能写,它由平台自动累加,而在课程中只需上传每次学习sco的时间,即回话时间(cmi.core.session_time),便可。固然,在从平台读取数据时,仍是要取一次的。
var totalTime = doLMSGetValue(“cim.core.total_time”);
alert(“您目前这个单元的总学习时长时间是:” + totalTime);
2. cmi.core.score.raw;
这个参数是测试成绩,可读可写。若是不上传,则为空,在平台计算成绩时就不会计算在内。若是上传,则至少为0。有的平台,要求计算课程的平均得分,若sco中没有测试题,不用上传成绩,则最好去掉上传成绩的语句,不让会把整个课程的平均成绩拉下来的。
3. cmi.core.lesson_location;
这个参数是记录上次离开sco时的位置,课件读取后,可依次进入到上次离开的位置,固然,这要在课程中作相应的设置才行。
cmi.core.lesson_location的做用,总的来讲就只有一个定位,分开来讲有几种状况,这样比较好理解。
一、 收藏书签的功能
在一个SCO的学习中,系统能够提供一个书签按钮来保存他在这个学习过程当中所本身设定的位置。
二、 课程定位的功能
若是在一个SCO中有多个学习的页面或者内容,可使用cmi.core.lesson_location来进行设置位置在哪里,快速调用位置。与收藏的相似。
在同一个学习内容中,好比HTM中不少段落的文字,咱们能够利用“锚点”来进行位置的设定,达到学生进入时的内容定位。
若是客户端(也就是教材)没有对cmi.core.lesson_location读写操做的话,那这个cmi.core.lesson_location就是空的,定位就是靠exit和entry以及经过launch的动做来完成。
4. cmi.core.lesson_status;
记录sco的完成状况,包括not attempted(何尝试/未学习)、incomplete(未完成),completed(已完成)。在平台上,课程的进度其实是(已完成的sco数/sco总数)×100%。因此如果单sco的课程,就则只有两种,0%和100%。而sco内部的记录跟平台是没有关系的。
cmi.core.lesson_staus是专门形容SCO自己的学习状况,总共分为下面六种,而这些状态由SCO与LMS共同维护。
passed(经过) completed(已完成) browsed(浏览) incomplete(非完成) failed(失败) not attempted(何尝试)
当LMS发行SCO时,必须将学习状态值初始化为“not attempted”,接着将状态的控制权转移给SCO。至于SCO能够采用不一样的策略决定什么时候将学习状态值由“not attempted”转换至“incomplete”,例如:某教师认为当学习者进入SCO时,SCO就应转换至“incomplete”的状态,另外可能也有教师认为学习者必须符合某些条件或执行某些操做时,SCO才能转换至“incomplete”的状态,
这些彻底取决于教学设计者的考虑,并无任何使用上的限制。教学设计者能够在学习者完成此SCO的学习时,将学习状态值转换至“completed”,至于认定学习者完成学习的方式与做法,也是由教学设计者自行决定。并且SCO能够根据不一样的衡量方式将学习状态值转换至“passed”或者“failed”的状态。
虽然SCO能够设定学习状态值,可是SCORM并无强制规定SCO必须设定学习状态值,所以LMS必须采起下列对应的处理方式,维持学习状态值。
1). 当LMS启动SCO时,必须将状态初始化为“not attempted”。
2). 当LMS收到LMSFinish的命令,但lesson_status的状态不是“not attempted”或“incompleted”时,则必须从新检验其状态。
3). 当cmi.core.credit的值为“credit”,并且cmi.student_data.mastery_score与cmi.core.score均含有成绩时,比较二者的分数。若mastery_score大于score, 则更改lesson_status的值为“passed”,反之则更改成“failed”。
4). 当cmi.core.credit的值为“credit”,可是cmi.student_data.mastery_score没有成绩时,则维持lesson_status的值不变,也就是保留SCO设定的值。
5). 当cmi.core.credit的值为“no-credit”时,并且cmi.core.lesson_mode为 “browse”时,更改其值为“browsed”。
6). 当cmi.core.credit的值为“no-credit”时,可是cmi.core.lesson_mode不为“browse”或元素根本不存在时,维持lesson_status的值不变,也就是保留SCO设定的值。
5. cmi.core.exit
当非正常退出时,会设置为suspend(悬挂,即暂停的意思),
根据学习时间的判断sco的完成状态,利用学习者进入该sco学习过的学习时间与视频的时间长短来进行比较,从而达到来判断他学习时间是否是符合完成的状态判断,不然为未完成状态。
RTE中提供的元素未cmi.core.total_time。
var time=doLMSGetValue( "cmi.core.total_time"); arr=time.split(":"); hh=Number(arr[0]); mm=Number(arr[1]); ss=Number(arr[2]); hms=hh*3600+mm*60+ss + currentSeconds; alert(hms); if (hms>=60){ //这里设定的时间60秒,这个时间能够本身根据本节sco的视频学习时间需求进行更改。 result = doLMSSetValue("cmi.core.lesson_status", "completed"); } else{ result = doLMSSetValue("cmi.core.lesson_status", "imcomplete"); }
cmi.suspend_data: 暂存数据
存储内容对象在恢复时所需的特定数据。
在学生使用课程过程当中产生的信息,这些信息用于下一次继续学习,好比包含课重启所须要的信息;
cmi.launch_data: 内容对象运行时所需的数据
在SCO建立时产生的信息,对SCO启动运行要求的说明,SCO启动所需信息的提供,每次启动SCO时都须要它,一般在SCO交换数据中定义;
cmi.comments:
关于内容对象的评论数据,通常来自用户评论 。
教师设置的一些评语信息,在知足必定条件的时候,SCO将把这些信息呈现给学生;
cmi.comments_from_lms:
LMS平台对内容对象的评论信息
cmi.objectives:
针对内容对象的我的目标集合 。
描述学生对于SCO中每一个目标的完成状况,包括的子数据项有:.Id(目标编号)、.Score(目标得分)、.Status(目标状态);
cmi.student_data:
基于用户偏好的内容对象自定义信息,如运行时间限制 。
而学生数据是在学生开始课程之后和学习课程当中,CMI系统所了解的学生的状况。学生数据为学生在课程中的表现。包括的子数据项有:.Mastery Score(掌握得分)、.Max Time Allowed(最大容许时间)、.Time Limit Action(限时反应);
cmi.student_preference: 针对内容对象的用户偏好设置
SCO的参数与选项,可经过参数设置来调整SCO的表现与行为,包括的子数据项有:.Audio(音频)、.Language(语言)、.Speed(速度)、.Text(文本)、.Video(视频),e-Learning 教学设计:E-Learning成功保证;
cmi.interactions: 用户交互信息
学生经过计算机输入时产生的可记录与可识别的信息,它能够记录学习者与SCO每次交互的详细信息,.id(交互编号)、.objectives(交互目标)、.time(交互时间)、.type(交互类型)、.correct_responses(正确响应次数)、.weighting(交互的权重)、.student_response(学生响应)、.result(交互结果)、.latency(交互延迟)。
元素取值:
1) model类型:
list[0] = “normal”; //正常
list[1] = “review”; //回顾
list[2] = “browse”; //浏览
2) status类型:
list[0] = “passed”; //经过
list[1] = “completed”;//完成
list[2] = “failed”; //失败
list[3] = “incomplete”;//未完成
list[4] = “browsed”; //浏览
list[5] = “not attempted”;//未参加
3) Exit类型:
list[0] = “”; //空,多是强制退出或是未退出的状态
list[1] = “time-out”; //超时后退出
list[2] = “suspend”; //暂停(非正常退出时标识为“挂起”状态)
list[3] = “logout”; //正常退出
4) Credit类型:(学分)
list[0] = “credit”; //有学分
list[1] = “no-credit”;//无学分
5) Entry类型: (是否已进入)
list[0] = “”; //空(已完成) 有待讨论
list[1] = “ab-initio”; //中间
list[2] = “resume”; //从新开始
6) TimeLimitAction类型:时间界限
list[0] = “”; //空
list[1] = “exit,message”; //退出,反馈信息
list[2] = “exit,no message”; //退出,无反馈信息
list[3] = “continue,message”; //继续,反馈信息
list[4] = “continue,no message”;//继续,无反馈信息
7) Interaction类型:课件与平台产生的交互信息
list[0] = “true-false”; //true or false
list[1] = “choice”; //选择
list[2] = “fill-in”; //填写
list[3] = “matching”; //搭配
list[4] = “performance”;//性能
list[5] = “likert”; //?
list[6] = “sequencing”; //排序
list[7] = “numeric”; //数字
8) result类型:结果
list[0] = “correct”; //正确
list[1] = “wrong”; //错误
list[2] = “unanticipated”;//非正常
list[3] = “neutral”; //中立
数据类型
数据类型 描述
CMIBlank 空字符串
CMIBoolean bool字符串ture或false
CMIDecimal 带小数的数字
CMIFeedback 描述interaction属性中的内容的结构
CMIIdentifier 字母数字混合的字符串,不包含空格和非打印字符,不超过255
CMIInteger 整数(0, 65536)
CMISInteger 有符号整数(-32768, 32768)
CMIString255 ASCII字符串,不超过255
CMIString4096 ASCII字符串,不超过4096
CMITime 时间类型,HH:MM:SS.SS
CMITimespan 时间间隔,格式同上
CMIVocabulary 单词表,相似枚举类型
元素属性
cmi.core元素属性:
scorm标准的LMS在客户端的运行机制
对SCORM课件的学习跟踪是经过LMS和SCORM课件的交互来实现的。
1.在LMS服务器端:
(1)LMS首先决定哪个SCO将要运行,同时加载DataModel库;
(2)设定SCO的运行模式,包括预览模式、普通模式和复习模式,其中预览模式只是运行课件,而不进行学习跟踪;
(3)设定学员的学习状态,包括“ab-initio”(初次学习)、“resume”(再次学习)和“”(已完成)三种状态;
(4)加载并运行SCO;
(5)经过APIAdapter实现LMS与SCORM课件的交互,完成数据模型的读写操做。
2.在LMS客户端:
(1)运行SCORMAPIAdapter;
(2)调用API初始化函数;
(3)加载课件SCO初始化数据;
(4)获取DataModel中的用户ID和用户姓名;
(5)获取DataModel中cmi.core.lesson_status值,即当前用户对当前SCO的学习状态,包括Completed、Incomplete、Passed、Failed等七种状态;
(6)获取数据模型中的cmi.core.entry值,该值判断当前用户是否第一次学习当前SCO。若是值为“ab-initio”,则表示当前用户是首次学习;若是值为“resume”,则表示用户是再次学习当前SCO;
(7)获取数据模型中的cmi.core.lesson_mode值,该值判断当前用户访问当前SCO的方式,包括Browse(预览,不跟踪学习)、Normal(跟踪学习)、Review(复习)三种模式;
(8)获取数据模型中的cmi.core.score.raw值,该值用来存放每个学员在每个SCO的学习过程当中所累积的总成绩。若是当前SCO有评测就会记录当前用户的评测总成绩,没有就不记录。LMS可借此DataModel做学习者成绩分析。若是用户是初次学习当前SCO,系统就会初始化cmi.core.score.raw的值为“”(空值);
(9)获取数据模型中的cmi.core.lesson_location值。LMS借此DataModel记录每个用户最后一次学习哪个SCO,以便下一次从新进入该课程时能够直接跳转到上次学习位置继续学习,至关于书签的功能;
(10)用户开始学习当前SCO,在学习过程当中会记录一系列数据模型的值,用于学习跟踪。其中cmi.core.session_time用来记录每一个学员每次学习的时间,包括每一个用户进入每一个SCO的停留时间及访问的日期。在当前用户结束对当前SCO的学习时,LMS则会记录cmi.core.total_time的值,cmi.core.total_time表示当前用户对每一个SCO学习所花的总时间;
(11)执行LMSCommit(Parameter)接口函数。该函数主要是用来提交数据模型元素的值,LMSCommit发生在LMSfinish以前;
(12)执行LMSFinish()函数。当用户学习完并要离开一个SCO时,便会调用LMSFinish()。LMSFinish()主要负责将环境变量重设,并判断该SCO是否在结束以前己经调用LMSCommit()将全部记录存储到LMS。若还没有储存,则会自动调用LMSCommit()将当前用户在当前SCO的学习记录保存。
今天的文章SCORM标准应用编程接口(API)和数据模型(Data Model)学习及总结分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/84086.html