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參數詳解,以便各位同行開發時查閱使用,也是本身學習過程的總結記錄,不正確之處請你們指正。服務器
在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
得到針對當前錯誤的診斷信息,參數爲錯誤碼。
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(課的模式);
這個參數是指學習本sco用的總時間,只能讀,不能寫,它由平臺自動累加,而在課程中只需上傳每次學習sco的時間,即回話時間(cmi.core.session_time),便可。固然,在從平臺讀取數據時,仍是要取一次的。
var totalTime = doLMSGetValue("cim.core.total_time");
alert("您目前這個單元的總學習時長時間是:" + totalTime);
這個參數是測試成績,可讀可寫。若是不上傳,則爲空,在平臺計算成績時就不會計算在內。若是上傳,則至少爲0。有的平臺,要求計算課程的平均得分,若sco中沒有測試題,不用上傳成績,則最好去掉上傳成績的語句,不讓會把整個課程的平均成績拉下來的。
這個參數是記錄上次離開sco時的位置,課件讀取後,可依次進入到上次離開的位置,固然,這要在課程中作相應的設置才行。
cmi.core.lesson_location的做用,總的來講就只有一個定位,分開來講有幾種狀況,這樣比較好理解。
一、 收藏書籤的功能
在一個SCO的學習中,系統能夠提供一個書籤按鈕來保存他在這個學習過程當中所本身設定的位置。
二、 課程定位的功能
若是在一個SCO中有多個學習的頁面或者內容,可使用cmi.core.lesson_location來進行設置位置在哪裏,快速調用位置。與收藏的相似。
在同一個學習內容中,好比HTM中不少段落的文字,咱們能夠利用「錨點」來進行位置的設定,達到學生進入時的內容定位。
若是客戶端(也就是教材)沒有對cmi.core.lesson_location讀寫操做的話,那這個cmi.core.lesson_location就是空的,定位就是靠exit和entry以及經過launch的動做來完成。
記錄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設定的值。
當非正常退出時,會設置爲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"); }
存儲內容對象在恢復時所需的特定數據。
在學生使用課程過程當中產生的信息,這些信息用於下一次繼續學習,好比包含課重啓所須要的信息;
在SCO建立時產生的信息,對SCO啓動運行要求的說明,SCO啓動所需信息的提供,每次啓動SCO時都須要它,一般在SCO交換數據中定義;
關於內容對象的評論數據,通常來自用戶評論 。
教師設置的一些評語信息,在知足必定條件的時候,SCO將把這些信息呈現給學生;
LMS平臺對內容對象的評論信息
針對內容對象的我的目標集合 。
描述學生對於SCO中每一個目標的完成狀況,包括的子數據項有:.Id(目標編號)、.Score(目標得分)、.Status(目標狀態);
基於用戶偏好的內容對象自定義信息,如運行時間限制 。
而學生數據是在學生開始課程之後和學習課程當中,CMI系統所瞭解的學生的狀況。學生數據爲學生在課程中的表現。包括的子數據項有:.Mastery Score(掌握得分)、.Max Time Allowed(最大容許時間)、.Time Limit Action(限時反應);
SCO的參數與選項,可經過參數設置來調整SCO的表現與行爲,包括的子數據項有:.Audio(音頻)、.Language(語言)、.Speed(速度)、.Text(文本)、.Video(視頻),e-Learning 教學設計:E-Learning成功保證;
學生經過計算機輸入時產生的可記錄與可識別的信息,它能夠記錄學習者與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課件的交互來實現的。
(1)LMS首先決定哪個SCO將要運行,同時加載DataModel庫;
(2)設定SCO的運行模式,包括預覽模式、普通模式和複習模式,其中預覽模式只是運行課件,而不進行學習跟蹤;
(3)設定學員的學習狀態,包括「ab-initio」(初次學習)、「resume」(再次學習)和「」(已完成)三種狀態;
(4)加載並運行SCO;
(5)經過APIAdapter實現LMS與SCORM課件的交互,完成數據模型的讀寫操做。
(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詳解