Tag Archives: SCO

Tin Can API

自分自身のシーケンシングを自分でやりたい

人々はシーケンシングを思い通りに動かしたいという問題を抱えています、というのは、コンテンツとLMSの間で相互運用性の問題があることを意味しています。コンテンツ制作者によって作られたシーケンシングがLMSにより間違って解釈される多くの余地が常にあります。

問題は、たとえ複数のSCOの使用から得たたくさんのレポートを無視してでも、多くのコンテンツ制作者が流れるようなユーザエクスペリエンスを持つために、複数のSCOをひとつのSCOにまとめることが十分に広がっていることです。

どのように解決すればよいでしょうか?。私たちは、複雑なシーケンシングの必要性を取り除きます。

Tin Can APIは、シーケンシングをコンテンツ/アクティビティに残しています。LRSがシーケンシングを間違って解釈する余地はありません、なぜなら、LRSは決してそれに触れないからなのです。コンテンツ/アクティビティは、適正なタイミングで、LRSにステートメントをレポートするだけです。


※ この記事は、CC BY 3.0のもと、Rustici Software 社の記事を翻訳したものです。
http://scorm.com/project-tin-can-phase-3-i-want-to-do-my-own-sequencing/

NoraUsagiメモ:
「複数のSCOをひとつのSCOにまとめることが十分に広がっている」とは、Flashのような、1SCOのコンテンツを指していると思います。複数SCOにすれば多くのトラッキング情報が得られますが、操作性を優先して、1SCOにすることで得られる情報はわずかしか残りません。LMSがSCO単位で、「学習完了」などのフラグを管理していることが原因で、TinCanは、SCO単位という概念をなくし、コンテンツ側に託してしまうという意味だと思います。そのなかでは、複数の「学習完了」のフラグを設けても別に良いわけです。そして、LMSのシーケンシングの誤動作も防げるので、一石二鳥という感じでしょうか。

SCORM1.2概要

SCORM1.2 SCOからAPIアダプタへの接続の概要

SCOはAPIアダプタのパスが分らない

APIアダプタは、SCOとサーバー側のLMSを結びつける、ブラウザ内で動作するLMSの一部です。APIアダプタは、JavaアプレットやJavaScript(AJAX)などで実装され、SCOからの要求を受け取り、サーバー側にデータを送信、サーバー側のデータをSCOに戻す役割を担っています。

APIアダプタには、LMSInitialize()などデータモデル要素を実行するメソッドが格納されています。SCOはJavaScriptを利用して、そのメソッドを実行します。

しかし、困ったことに、APIアダプタの位置は、必ず2つ上に存在するなどLMS共通として決まっていません。LMSによって配置場所が異なり、SCOからLMSInitialize()などを実行するパスが異なります。そのため、SCOは、パスが分からないためメソッドを実行することができません。

APIアダプタのパスを調べる

そこでAPIアダプタは、SCOにパスを取得しやすくするために、目印を作りました。これがAPIオブジェクトです。「API」とうい名称のオブジェクトで、APIアダプタと同じウインドウ階層にあります。つまりこのオブジェクトのパスが分れば、APIアダプタのメソッドが実行できるということです。

仕様書では、APIオブジェクトは、DOMオブジェクトであると記載されていますが、Windowオブジェクトと言った方が分かりやすいでしょう。Windowオブジェクトは、frameタグのname属性、JavaScriptのグローバル変数です。

LMSは、フレームで分割されていたり、複数ウインドウで構成されることがあります。APIオブジェクトは、ブラウザウインドウ内なら、どのウインドウでも良いという訳ではなく、必ずSCOからルートウインドウへ向かう親ウインドウに配置しなければなりません。SCOは、APIオブジェクトを見つけるために、親ウインドウ内に、APIオブジェクトが存在するか確認します。存在しなければ、さらに親のウインドウにないか、繰り上がり探していきます。

そして、SCOは、APIオブジェクトを探し出すと、パスを取得しデータモデル要素のメソッドを実行できるようになります。

こうした処理は、JavaScriptで自身でコーディングしていくか、ADLなどで配布されているライブラリを利用していきます。ライブラリを利用する場合、自動的に処理してくれるため、中でどう動いているのかは、概略を知っている程度で十分だと思います。