SCORM学习交互开发
本文仅作为个人SCORM开发入门参考,理解均基于SCORM文档,如有不对的地方欢迎指正。
名词解释:
LMS:用户学习管理系统,所有用户学习相关数据均在系统中,如A平台需要增加SCORM学习功能,那么A平台即为LMS。SCORM的交互均基于LMS。
SCORM:SCORM (Sharable Content Ob-ject Reference Model)是由ADL(高级分布式学习)计划开发的,该计划最初由美国国防部于1997年启动,是关于共享课件的创建、管理和使用的标准。SCORM主要由内容集合模型(Content Aggregation Model)和运行环境(Run-Time Environment)构成。内容集合模型规定了单独的学习内容如何描述、内容如何组成可共享和交互的课件。运行时环境规定了资源包同LMS(Learning Man-agement System)接口的应用程序编程接口(API)和数据模式,这里的包类似一个ZIP文件,其中包含了同课程/子课程内容相关的所有的文件:内容、关于内容的元数据描述信息、关于课程的元数据以及课程结构信息等。
更多信息可参考 文档
版本:
SCORM目前主要分为两个版本:1.2 和2004
差异主要体现在API和CMI对象属性上。
API
SCORM 1.2 LMSInitialize( "" ) : bool LMSFinish( "" ) : bool LMSGetValue( element : CMIElement ) : string LMSSetValue( element : CMIElement, value : string) : string LMSCommit( "" ) : bool LMSGetLastError() : CMIErrorCode LMSGetErrorString( errorCode : CMIErrorCode ) : string LMSGetDiagnostic( errocCode : CMIErrorCode ) : string
SCORM 2004 Initialize( "" ) : bool Terminate( "" ) : bool GetValue( element : CMIElement ) : string SetValue( element : CMIElement, value : string) : string Commit( "" ) : bool GetLastError() : CMIErrorCode GetErrorString( errorCode : CMIErrorCode ) : string GetDiagnostic( errocCode : CMIErrorCode ) : string
Initialize / LMSInitialize
SCORM初始化函数,SCORM启动后必先调用此API,LMS提供此API返回一个布尔值,一般为trueTerminate / LMSFinish
SCORM终止函数,SCORM执行正常退出行为(正常关闭SCORM窗口而非API实例所在的窗口)必调此函数,表示本次LMS与SCORM交互结束。LMS可在此接口中执行数据同步到数据库,并返回布尔值通知SCORM数据保存结果。GetValue / LMSGetValue
SCORM从LMS中读取数据,一般是读取CMI中定义数据模型中的数据。SetValue / LMSSetValue
SCORM将交互的数据值更新到LMS CMI数据对象中,API需要返回布尔值表示成功或者失败。Commit / LMSCommit
SCORM在更新数据后,会调用commit函数通知LMS数据更新已经提交,LMS放可以在考虑接收到提交通知后进行相关操作,如将数据持久化到数据库或缓存等GetLastError / LMSGetLastError
返回API调用异常码GetErrorString / LMSGetErrorString
返回API调用异常信息GetDiagnostic / LMSGetDiagnostic
返回诊断信息数据模型
SCORM运行时存储的数据对象,通过API 的get/set方法读取和更新。1.2 & 1.1版本的数据模型与 2004版本有部分差异。
常用的数据元素:
cmi.completion_status和cmi.success_status(cmi.core.lesson_status):SCORM课程完成状态
cmi.score.scaled(cmi.core.score.raw):学习得分
cmi.session_time(cmi.core.session_time):SCORM学习时长
cmi.location(cmi.core.lesson_location):学习位置
cmi.exit(cmi.core.exit):用户退出SCORM方式,“suspend”,则下次启动时不会重置数据,“”则下次启动时会重置素有数据。
更完整的数据模型可参考 文档
流程说明:
关于SCORM的开发和交互应该完全按照标准和规范进行。开发伊始,可以先通过SCORM运行环境 相关说明,对SCORM的运行机制进行了解。
SCORM与LMS间的数据交互均基于JS API进行,LMS提供 JS API 给SCORM进行调用(基于SCORM标准),LMS可对标准的API进行拓展,加入对应的逻辑维护SCORM数据与数据库交互。
API查找
API对象应位于SCORM的父级窗口中(可通过iframe嵌套),SCORM启动时会查找可用的JS API实例,逐级向上查找,直至找到顶级窗口对象。
不同版本的SCORM,API命名不同,在SCORM 1.1和SCORM 1.2中,API对象命名为“ API”,在SCORM 2004中,该对象名为“ API_1484_11”。LMS应该在SCORM启动初始化前在系统内注册API实例,如
window.API = new ScormAPI(); //ScormAPI中包含需提供的API接口,1.2版本
SCORM API发现的代码如图
SCORM 1.1 & 1.2版本
SCORM 2004版本
API使用
SCORM找到API后,即可基于API与LMS进行数据交互,LMS仅负责提供API,所有交互均有SCORM主动发起,LMS只负责接收并响应调用。相关API功能参API部分,LMS开发者在LMS API被调用时确定哪些数据需要持久化,需要在哪个阶段进行持久化,基于API和数据模型,基本可以完成所有LMS与 SCORM的交互。
开发:
简要架构图
SCORM资源创建、交互
SCORM资源可以是一个zip包,包含所需的各种资源文件,可通过 imsmanifest.xml解析文件内容。可在上传时解析文件,读取文件项目结构,生成对应的资源url。
用户学习课件时,将SCORM API实例化,SCORM学习链接可在API页面内通过iframe嵌入,如果需要对用户的学习数据进行初始化,可以在实例API后,在SCORM初始化前,将用户学习数据写入CMI数据模型中,SCORM会根据数据进行初始化,展示对应的学习状态。需要注意的是,如果SCORM初始化完成再设置数据则无效。
网上有一些已经完成的API实例代码开源,可以参考,如 https://github.com/gabrieldoty/simplify-scorm,感谢原作者
代码已经完成了API提供的部分 ,并提供了一些方法可以便于开发,比如各种API的调用监听、数据模型值变更的监听等,按照文档对api进行初始化之后即可使用。
一个基础的SCORM学习,只需要在代码中增加 数据模型初始化,数据提交同步、持久化的相关逻辑基本就可以了。
附:
开源版本API github:simplify-scorm
https://github.com/gabrieldoty/simplify-scorm
SCORM学习交互开发相关推荐
- java web开发初学_2018年学习Web开发的绝对初学者指南
java web开发初学 This post was originally published on Coder-Coder.com. 该帖子最初发布在Coder-Coder.com上 . If yo ...
- 新手篇——学习网页开发需要多长时间就能找到工作
2019独角兽企业重金招聘Python工程师标准>>> 近几年Web前端框架层出不穷,比如 React, Vue, AngulaJS等吸引了大量的注意力,前端技术发展势头迅猛,各大互 ...
- 前端开发框架_2019年应该如何学习前端开发?
近两年来,前端开发工程师越来越火了,2019年已经到来了,很多准备入行前端开发工程师的小伙伴们,不知道准备得怎么样了呢? 有的朋友在想方设法的学习,争取在年后的金三银四能靠实力找到一份满意的工作!有的 ...
- web开发 学习_是否想学习Web开发但不知道从哪里开始?
web开发 学习 by Rick West 由里克·韦斯特(Rick West) 是否想学习Web开发但不知道从哪里开始? (Want to learn web development but don ...
- 我是小白0基础,现在我想学习前端开发,该如何系统的学习?
以下纯属个人观点和建议,肯定是有局限性的,但是也希望能给你带来一些帮助. 开始 我们俨然能感受到前端岗位现在已经发展成了最重要的研发岗位之一,所以多我们提出的要求也就越来越高了.所以我们需要的也就不仅 ...
- 零基础如何学习 iOS 开发?
我创建了一个 CS193P - SwiftUI 和 iOS 开发的学习群组,有兴趣可以加入,群内学习者以北美为主,因此聊天请使用英语,谢谢.加入 Slack 群组 正文: 建议从 SwiftUI 开始 ...
- 博通Broadcom SDK源码学习与开发1——SDK源码探究与Cable Modem 系统编译
声明:原创作品,严禁用于商业目的. 本系列文章将全面剖析以Bcm33xxx芯片开发Cablemodem产品的SDK源码为例,从编译系统到各个功能模块进行分析与探讨. 文章目录 0.写在前篇 1. 博通 ...
- 0基础学习前端开发,高职web前端开发技能大赛
零基础学web前端开发要怎么去学? 首先要学习的就是基础知识:html.css和JavaScript.HTML是内容,CSS是表现,JavaScript是行为.前端开发的门槛其实非常低,与服务器端语言 ...
- 怎样学习嵌入式软件开发
怎样学习嵌入式开发 在嵌入式软件方面最重要的课程包括: (1) 嵌入式微处理器结构与应用:这是一门嵌入式硬件基础课程,我们说过,嵌入式是软硬件结合的技术,搞嵌入式软件的人应对ARM处理器工作原理和接口 ...
最新文章
- Matlab与线性代数 -- 矩阵的水平连接和垂直连接
- 博士毕业后,去哪儿?
- 记录:自制的小说推荐程序(一)
- 考前自学系列·计算机组成原理·中央处理器知识点
- 水题 ZOJ 3875 Lunch Time
- js事件冒泡与捕捉解析
- 在MacOSX上重新安装Python (10.8) python 自然语言处理的前戏
- 【Python】如何选择赋值和拷贝
- android按键事件响应函数,android 响应按键按下的onKeyDown()函数?
- 联信高效的数据传输机制
- python中的mul函数_Sympy:“Mul”对象没有分层函数的“cos”属性
- AssetBundle解析工具——AssetStudio
- qq音乐android升级版,QQ音乐Android 4.8更新 温暖私享正版无损好音乐
- PCB 18种特殊走线的画法与技巧!
- linux socket 阻塞服务端 非阻塞客户端,Linux socket非阻塞connect方法
- 【Unity2D】制作游戏主菜单MainMenu
- xshell远程连接不到服务器,Xshell远程连接服务器失败解决方法。
- echarts的饼图制作分析
- Django項目部署到Ubuntu服務器
- (转)日语汉字音便规则