| ||
![]() | ||
| ||
![]() | ||
如果你已經(jīng)下載了 ADL 所釋出的 Sample Run-Time nvironment,而且決定使用 Java 或 .Net 來實(shí)做你平臺(tái)的 SCORM 部份,你可能要花不少時(shí)間來讀懂它里面的三十多支 Java 程序,或者至少該知道這些程序該怎么用。 幾乎所有的 .java 程序,都為了存取 XML 而寫。如果你已經(jīng)熟讀SCORM RTE 的 Metadata,從檔名你就知道,幾乎是一個(gè) Metadata 就用一支 java 來 take care。從事 java 程序開發(fā)的朋友都知道,java 需要自帶 XML 的函式庫,它無法直接使用 OS 所提供的 XML API (如果有的話,例如 windows)。而這個(gè)函式庫又超大,因此 java 在 XML 這方面有點(diǎn)先天失利,不過這并非指 java 不適合開發(fā) SCORM,而是我 心目中有比用 java 更適合的對象-就是我在『技術(shù)』篇所提到的 SCORM 開發(fā)必備技能之二 - Jscript。 請注意我寫的是 Jscript,而非 Javascript。這是 Microsoft 版本的 Javascript,它是一個(gè)遵循 ECMA-Script 標(biāo)準(zhǔn)的 script language ,除了在 Microsoft IE 底下有完整的 XMLDOM 可用,即使客戶端使用 Mozilla/Netscape 等瀏覽器,Jscript 也可以用標(biāo)準(zhǔn)的 XMLDOM 來實(shí)作 SCORM Adapter。 在講到實(shí)作 Adapter 之前,我們先來看看 ADL 的 Sample 里的兩支重要的 Jscript : APIWrapper.js 與 SCOFunctions.js。 "APIWrapper.js" 是提供教材制作者,一個(gè)呼叫 Adapter API 的接口。教材制作者把這支程序與 Asset 合起來就構(gòu)成一個(gè)簡單的 SCO,只要在教材被 launch 時(shí),使用它的 findAPI() 去尋找 Adapter API,找到后就會(huì)有一個(gè) API 的對象可用,而這個(gè)對象會(huì) mapping 到 LMS 所實(shí)作的 Adapter 上,因此它就會(huì)有 RTE 所規(guī)范的八個(gè)方法 (method),開始供你的教材使用了。 "SCOFunctions.js" 則是提供一些函式,供 Adapter 或者 Content 來使用。這些函式大部份是有關(guān) SCO 在激活與結(jié)束時(shí),一些狀態(tài)屬性的 Metadata 偵測與設(shè)定。比如 "cmi.core.exit" 偵測這個(gè) SCO 是正常結(jié)束或異常結(jié)束;"cmi.core.lesson_mode" 是一般閱讀或是參觀者瀏覽;還有 "cmi.core.session_time" 是記錄這個(gè) SCO 從開始到結(jié)束的時(shí)間。哦!對了,SCORM 有個(gè)資料格式是 CMITimespan,這個(gè)是『時(shí)間長度』。它精確到小數(shù)點(diǎn)后兩位,但 Jscript 并沒有這樣的處理函式 (不知 Java 有沒有),所以必須自己寫個(gè)函式來處理這樣的時(shí)間加減。這支程序有三個(gè)函式:startTimer()、computeTime()、convertTotalSeconds() 可以幫你計(jì)算 session_time。它已經(jīng)被寫在 loadPage() 函式中了,所以你只要在 SCO 激活時(shí),在 findAPI() 找到 API 后,用 loadPage() 來呼叫 Adapter 的 LMSInitialize(),再使用 unloadPage() 呼叫 LMSCommit() 與 LMSFinish(),你就完成一個(gè) SCO 的最基本要求啰。 |