SCORM规范运用编程接口(API)和数据模型(Data Model)进修及总结

简介

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数据构造。

API供应了内容对象与LMS通信的接口,而DM则形貌了通信所运用的数据模子,API+DM使得内容对象在差别的LMS体系中具有了通用性。

更细致的引见请参考scorm百度百科SCORM维基百科

下面时自身查阅材料,归结整顿的SCORM规范中API接口和Data Model参数详解,以便列位偕行开辟时查阅运用,也是自身进修历程的总结纪录,不准确的地方请人人斧正。

运用编程接口(API)

在SCORM规范中,SCO(SharableContentObject)是LMS经由历程SCORMRTE(运转时刻环境)能够跟踪的最低粒度程度的进修资本,它们的通信由APIAdapter(适配器)来完成。

API定义了八个重要的function,分别是LMSInitilizeLMSFinishLMSSetValueLMSGetValueLMSCommitLMSGetLastErrorLMSGetErrorStringLMSGetDiagnostic,个中LMSGetValueLMSSetValue最为庞杂,也是跟踪中运用频次最高的,通信历程当中运用DataModel(数据模子)来纪录跟踪信息。

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的上课纪录回存。

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”。

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的作用,总的来讲就只要一个定位,离开来讲有几种状况,如许比较好明白。
1、 珍藏书签的功用
在一个SCO的进修中,体系能够供应一个书签按钮来保留他在这个进修历程当中所自身设定的位置。
2、 课程定位的功用
假如在一个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规范运用编程接口(API)和数据模型(Data Model)进修及总结》
《SCORM规范运用编程接口(API)和数据模型(Data Model)进修及总结》
《SCORM规范运用编程接口(API)和数据模型(Data Model)进修及总结》
《SCORM规范运用编程接口(API)和数据模型(Data Model)进修及总结》
《SCORM规范运用编程接口(API)和数据模型(Data Model)进修及总结》

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百度百科
SCORM维基百科
scorm规范的LMS在客户端的运转机制
Scorm规范进修——Scorm RTE API与数据模子
SCORM规范及支撑SCORM规范进修平台的设想
scorm规范中的cmi.core.lesson_location详解
scorm1.2规范中的datamodel详解

    原文作者:北堂棣
    原文地址: https://segmentfault.com/a/1190000013235835
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞