Advanced Distributed Learning Initiative

The SCORM Run-Time Environment

Sharable Content Object Reference Model (SCORM™) Version 1.2

Version1.2 OriginalOctober 1, 2001 Translation日本語訳
日本語訳・全文
本ドキュメントは ADL Initiative 発行の SCORM 1.2「The Run-Time Environment」(October 1, 2001) を日本語に翻訳したものです。規格用語(API 関数名、データモデル要素名、エラーコード、語彙値、データ型)は原文どおり英語表記を維持し、説明文を技術者向けに翻訳しています。

SECTION 3.1Run-Time Environment 概要

SCORM™ の目標の一つは、学習リソースを複数の Learning Management System (LMS) 間で再利用可能かつ相互運用可能にすることである。これを実現するためには、学習リソースを起動するための共通の方法、学習リソースが LMS と通信するための共通の仕組み、そしてその通信の基礎となる事前定義された言語ないし語彙が必要となる。図 3.1a に示すように、Run-Time Environment のこれら 3 つの側面が、Launch、Application Program Interface (API)、Data Model である。

Learning Management System (LMS) LMS Server Server Side Client Side Browser SCO Asset JavaScript API Adapter Launch Data Model SCO と LMS の間で 実際にやり取りされる データ API (SCO と LMS 間の 通信リンク)
図 3.1a: SCORM Run-Time Environment における Launch、API、Data Model

Launch の仕組みは、LMS が Web ベースの学習リソースを起動するための共通の方法を定義する。この仕組みは、配信される学習リソースと LMS との間で通信を確立するための手順と責務を規定する。通信プロトコルは共通の API を通じて標準化される。

API は、学習リソースの状態(initialized、finished、エラー状態など)を LMS に通知するための通信メカニズムであり、LMS と Sharable Content Object (SCO) との間でデータ(スコア、制限時間など)の取得・設定を行うために使用される。

Data Model は、学習リソースのステータスなど通信される情報を定義するための、データ要素の標準セットである。最も単純な形では、Data Model は LMS と SCO の双方が「知っている」べき要素を定義する。LMS はセッションをまたいで必須データ要素の状態を保持しなければならず、複数システム間での再利用を成立させるためには、学習コンテンツはこれら事前定義されたデータ要素のみを使用する必要がある。

SECTION 3.2Launch

共通の Launch スキームを採用することで、LMS の内部実装を規定することなく、複数の LMS 間で学習リソースの配信動作の一貫性を担保できる。なお本節における「LMS」とは、学習リソースの配信を管理する機能を含むシステムを指す用語として用いている。この Launch スキームは、学習体験の文脈において、SCO および Asset の形式で配信される Web ベース学習リソースを対象とする。

3.2.1 学習リソースの起動

Content Aggregation Model に記述されているとおり、SCORM Content Model は次の 3 つのコンポーネントから構成される:

  • Asset
  • SCO
  • Content Aggregation

LMS が起動できる SCORM Content Model のコンポーネントは、Asset と SCO の 2 つである。起動する学習リソースの種類によって、起動時の要件は異なる。Launch メカニズムは、LMS が学習リソースを起動するための共通の方法を定義する。配信された学習リソースと LMS との間で通信を確立するための手順と責務は、起動する SCORM 学習リソースの種類によって異なる。

content package で定義された content structure に基づき、学習リソース間の sequencing および navigation を管理することは LMS の責務である。LMS は、学習リソースに定義された前提条件の達成状況に基づいて、シーケンスを適応的に決定してもよい。特定の学習体験を構成する学習リソースの進行は、LMS の能力に応じて、シーケンシャル、非シーケンシャル、ユーザー主導、またはアダプティブのいずれかとなる。現時点では、SCORM は学習リソース間の sequencing と navigation の標準化を扱わない。したがって、sequencing に関連するビジュアルコンポーネントの look and feel についてもガイドラインを定めていない。これらは SCORM の将来のバージョンで取り扱う予定である。

たとえば、LMS は content aggregation 内をユーザー主導で navigation できるメニューをレンダリングしてもよい。このメニューは、メニュー内に表示される各学習リソースの起動位置(launch location)をターゲットとするハイパーリンクの一覧として表示できる。

あるいは、LMS は学習者のパフォーマンスに基づいて学習リソースの起動順序を適応的に決定する、サーバーサイドの配信メカニズムを備える、または利用するという形でもよい。この場合、配信を担当するサーバーサイドコンポーネントは、該当する学習リソースに指定された launch location に基づき、直接または間接にその学習リソースを提供することになる。

何らかのイベントを契機として、起動すべき学習リソースを決定するのは LMS(またはその配信コンポーネント/サービス)の責務である。LMS は、content structure で定義されたシーケンス内の次の学習リソースを起動してもよいし、ユーザーが選択した SCO を起動してもよいし、学習者のパフォーマンスに基づいて起動する SCO をアダプティブに決定してもよい。起動すべき学習リソースが決まったら、LMS は content package で定義された launch location の URL を用いて、その URL へ遷移するか、または現在表示されている学習リソースを launch location 上の学習リソースに置き換える。

LMS は Launch を任意の方法で実装してよく、必要に応じて実際の起動責務を LMS のクライアント側またはサーバー側のいずれかに委ねてもよい。ただし、実際の起動は HTTP プロトコルを用いて行わなければならない。最終的に、content package 内の launch location で識別される学習リソースが起動され、クライアントブラウザに配信される。

3.2.1.1 Asset

Asset を表す学習リソースの場合、SCORM の Launch モデルが要求するのは、LMS が HTTP プロトコルで Asset を起動することのみである。Asset は API および Data Model を介して LMS と通信する必要がないため、LMS が提供する API Adapter を Asset 側で探索する必要はない。

3.2.1.2 Sharable Content Object (SCO)

SCO を表す学習リソースの場合、SCORM の Launch モデルは、LMS が同時に 1 つの SCO のみを起動し、同時にアクティブな SCO も 1 つだけであることを要求する。さらに、SCO を起動できるのは LMS のみであり、SCO が別の SCO を起動することはできない。

LMS は、API Adapter を Document Object Model (DOM)27 オブジェクトとして公開している LMS ウィンドウの子ウィンドウまたは子フレームとなるブラウザウィンドウで、SCO を起動しなければならない。API Adapter は LMS が提供しなければならない。

API Adapter が見つかるまで、親ウィンドウおよび/または opener ウィンドウの階層を再帰的に探索することは SCO の責務である。API Adapter が見つかれば、SCO は LMS との通信を開始できる。

SECTION 3.3Application Program Interface (API)

3.3.1 API 概要

SCORM は、AICC の CMI001 Guidelines for Interoperability4 文書で定義された Run-Time Environment 機能を直接ベースとしている。ADL は AICC のメンバーおよび参加者と協力して、共通の Launch および API 仕様を策定するとともに、Web ベースのデータ要素を採用した。以下では、SCORM に関連する AICC API 仕様の主要な要素について概説する。

3.3.2 SCO–LMS 通信 API の概説

共通の API を採用することで、相互運用性と再利用性に関する SCORM の上位要件の多くが満たされる。API は、SCO が LMS と通信するための標準化された手段を提供しつつ、特定の通信実装の詳細をコンテンツ開発者から隠蔽する。最も単純に言えば、API とは「SCO が利用可能であることを前提にできる、事前定義された関数の集合」にすぎない。API は実装の詳細を SCO から隠蔽することで、再利用性と相互運用性を促進する。

API Adapter とは、API が定める関数を実装し公開する機能ソフトウェアである。コンテンツ開発者にとって API Adapter の内部実装は、同一の public interface を介してアクセスする限り問題にならない。LMS が提供する必要があるのは、API の機能を実装し、そのインタフェースをクライアント SCO に公開する API Adapter のみである。

API の重要な性質は、SCO が LMS と通信できるようにする通信メカニズムである、という点にある。SCO がいったん起動された後は、LMS との間で情報を get / set できることが前提となる。API Adapter と SCO 間のすべての通信は SCO 側から開始される。LMS 側から SCO に実装された関数の呼び出しを開始する仕組みは、現時点ではサポートされていない。API Adapter オブジェクトの関数の役割は、次の 3 つに大別される。

  • Execution State

    API 関数のうち LMSInitialize("")LMSFinish("") の 2 つが、実行状態を扱う。

  • State Management

    エラーを扱うために 3 つの関数が用意されている。LMSGetLastError()LMSGetErrorString(errornumber)LMSGetDiagnostic(parameter) である。
    ※ 原文では State Management の見出しの下にエラー処理関数が列挙されているが、これは原文のまま訳出している。

  • Data Transfer

    残りの 3 つの API 関数は、LMS との間でデータを転送するために使用される。LMSGetValue(data model element)LMSSetValue(data model element, value)LMSCommit("")。なお、API は外部の Data Model によって個別に定義されたデータ値の取得・設定を行うように設計されている。AICC 仕様はそのような Data Model の一つとして「cmi」を定義しているが、本 API とともに用いる Data Model を別途開発・利用することも可能である。

3.3.2.1 SCO–LMS 通信 API 詳細仕様

SCO–LMS 通信 API の詳細を以下に示す。

Execution State

LMSInitialize Execution State
Description

SCO が LMS と通信を開始することを API Adapter に通知する関数。これにより LMS は LMS 固有の初期化処理を行うことができる。SCO は、他のいかなる API 関数を呼び出すよりも前に、本関数を呼び出すことが必須である。

Syntax

LMSInitialize(parameter)

Parameter

"" 本標準に準拠するためには、空文字列を渡さなければならない。"" 以外の値は将来の拡張のために予約されている。

Return Value

boolean を表す文字列。

  • "true"LMSInitialize("") が成功したことを示す
  • "false"LMSInitialize("") が失敗したことを示す

"false" が返された場合、これは「LMS が不明な状態にあり、以降の API 呼び出しが LMS 側で処理されない」ことを SCO に対して示す。

Example
var result = LMSInitialize("")
if (result == "false")
{
    // エラー処理
}
else
{
    // SCO の実行を継続
}

SCO は API Adapter に対して、コンテンツが LMS との通信を確立したい旨を伝える。典型的な戻り値は "true" である。

LMSFinish Execution State
Description

過去のいずれかの時点で LMSInitialize の呼び出しに成功した SCO が、これ以上 LMS との通信を必要としないと判断した場合に、本関数を呼び出さなければならない。本呼び出しは次の 2 つを意味する。

  1. LMSSetValue() で設定した任意のデータが、LMS によって永続化されたことを SCO に保証する。
  2. SCO が LMS との通信を終了したことを示す。
Syntax

LMSFinish(parameter)

Parameter

"" 本標準に準拠するためには、空文字列を渡さなければならない。"" 以外の値は将来の拡張のために予約されている。

Return Value

boolean を表す文字列。

  • "true"LMSFinish("") が成功したことを示す
  • "false"LMSFinish("") が失敗したことを示す

"true" が返された場合、SCO はそれ以降、他のいかなる API 関数も呼び出してはならない。

"false" が返された場合、これは「LMS が不明な状態にあり、以降の API 呼び出しが LMS 側で処理される保証がない」ことを SCO に対して示す。

Example
var result = LMSFinish("");

Data Transfer

LMSGetValue Data Transfer
Description

SCO が LMS から情報を取得するための関数。次の用途で使用する:

  • data model 内の各種カテゴリ(グループ)および要素の値
  • サポートされている data model のバージョン
  • 特定のカテゴリまたは要素がサポートされているかどうか
  • 配列または要素リスト内の現在の項目数

完全なデータ要素名およびキーワードをパラメータとして渡す。要求された data model パラメータの現在の値が返される。1 回の呼び出しで返される値は常に文字列 1 つだけである。

Syntax

LMSGetValue(parameter)

Parameter

datamodel.group.element
指定された要素の値を返す。

datamodel._version
_version キーワード。LMS がサポートする data model のバージョンを取得するために使用する。

datamodel.element._count
_count キーワード。配列内の現在の要素数を取得するために使用する。返されるのは配列の要素総数であり、配列の最終位置のインデックス番号ではない。

datamodel.element._children
_children キーワード。LMS がサポートしているグループまたはカテゴリ内のすべての要素を取得するために使用する。

Return Value

すべての戻り値は文字列である。

LMSGetValue(datamodel.group.element)
要求された要素またはグループの現在の値を表す文字列を返す。

LMSGetValue(datamodel._version)
LMS がサポートする data model のバージョンを表す文字列を返す。

LMSGetValue(datamodel.group._children)
指定したグループまたはカテゴリ内で LMS がサポートしているすべての要素名を、カンマ区切りリストで返す。要素に子要素はないがサポートされている場合は、空文字列 ("") を返す。要素自体がサポートされていない場合も空文字列 ("") を返す。続けて LMSGetLastError() を呼び出すことで、要素がサポートされていないかどうかを判別できる。エラー 401 - Not implemented error は、要素がサポートされていないことを示す。

LMSGetValue(datamodel.group._count)
要素リストまたは配列内の現在の項目数を示す整数を返す。

Examples
var value = LMSGetValue("cmi.core.student_name")

典型的な戻り値の例:"Hyde, Jackson"

var value = LMSGetValue("cmi.core.lesson_status")

典型的な戻り値の例:"incomplete"

var value = LMSGetValue("cmi._version")

CMI data model を定義する IEEE ドキュメントの現行ドラフト規格は Draft Standard for Computer Managed Instruction と題され、ID は P1484.11.2、バージョン番号は 3.4 である。本呼び出しはこの IEEE ドキュメントのバージョン番号 3.4 を返す。

var value = LMSGetValue("cmi.student_preferences._children")

これはカテゴリのサポート情報を求めるリクエストである。典型的な戻り値の例は "audio,speed,text"。空文字列 ("") が返された場合、student_preferences はサポートされていない。続けて API 呼び出しでエラーを確認することで、これを検証できる。

LMSSetValue Data Transfer
Description

SCO が LMS に情報を送信するための関数。API Adapter は、情報を即座に LMS に転送するように設計されることもあれば、別の方式で情報を転送するように設計されることもある。

本関数は、data model 内の各種カテゴリ(グループ)および要素の現在値を設定するために使用する。

第 1 パラメータでデータ要素名とそのグループを指定し、第 2 パラメータで設定したい新しい値を渡す。1 回の呼び出しで送信される値は 1 つのみである。

Syntax

LMSSetValue(parameter, value)

Parameter

data model で定義された完全修飾要素の名前。引数は大文字小文字を区別する。引数は引用符で囲まれた文字列として渡す。

このパラメータが取り得る形式の例:

datamodel.element
Data Model で定義されたカテゴリまたはグループの名前。例:"cmi.comments"

datamodel.group.element
Data Model で定義された要素の名前。例:"cmi.core.lesson_status"

datamodel.group.n.element
要素配列の n 番目(0 ベースインデックスで n−1 番目のメンバー)におけるサブ要素の値。

Value:第 1 パラメータで指定したデータ要素について、本標準で定義されたデータ型に変換可能な文字列でなければならない。

Return Value

boolean を表す文字列。

  • "true"LMSSetValue() が成功したことを示す
  • "false"LMSSetValue() が失敗したことを示す
Examples
var result = LMSSetValue("cmi.core.score.raw", "95");

cmi.core.score.raw"95" に設定する。続けて LMSGetValue("cmi.core.score.raw") を呼び出すと、"95" が返されなければならない。

LMSCommit Data Transfer
Description

API Adapter が LMSSetValue() 経由で SCO から受信した値をキャッシュしている場合、本呼び出しは LMS によってまだ永続化されていない値の永続化を要求する。

実装によっては、API Adapter は受信した設定値を即座に永続化し、クライアント上にキャッシュしないこともある。そのような実装では本 API 呼び出しは冗長であり、API Adapter は追加の動作を行わない。本呼び出しは、LMSSetValue() 経由で送信されたデータが、LMSCommit() の完了時点で LMS により永続化されることを SCO に対して保証する。

Syntax

LMSCommit(parameter)

Parameter

"" 本標準に準拠するためには、空文字列を渡さなければならない。"" 以外の値は将来の拡張のために予約されている。

Return Value

boolean を表す文字列。

  • "true"LMSCommit("") が成功したことを示す
  • "false"LMSCommit("") が失敗したことを示す

"false" が返された場合、これは「LMS が不明な状態にあり、以降の API 呼び出しが LMS 側で処理される保証がない」ことを SCO に対して示す。

Examples
var result = LMSCommit("");

SCO が以前に LMSSetValue() で設定したものの、LMS によってまだ永続化されていないキャッシュ値の永続化を要求する。

State Management

LMSGetLastError State Management
Description

SCO は、与えられた API 呼び出しが成功したかどうか、また成功しなかった場合は何が問題だったかを判別する手段を持たなければならない。本関数は、直前の API 呼び出しに起因するエラーステータスコードを返す。LMSGetLastErrorLMSGetErrorStringLMSGetDiagnostic の 3 つのエラー関数を除く API 関数が呼ばれるたびに、エラーコードはリセットされる。SCO はエラー関数を何度でも呼び出してエラーコードを取得できるが、コードは次の API 呼び出しが行われるまで変化しない。

Syntax

LMSGetLastError()

Parameter

なし

Return Value

戻り値は文字列で、整数に変換するとエラーが次のいずれのカテゴリに分類されるかを識別できる:

  • 100 番台:一般エラー(General errors)
  • 200 番台:構文エラー(Syntax errors)
  • 300 番台:LMS エラー(LMS errors)
  • 400 番台:data model エラー(Data model errors)

エラーメッセージとして利用可能なコードは次のとおり:

  • 0 — No error
  • 101 — General exception
  • 201 — Invalid argument error
  • 202 — Element cannot have children
  • 203 — Element not an array — cannot have count
  • 301 — Not initialized
  • 401 — Not implemented error
  • 402 — Invalid set value, element is a keyword
  • 403 — Element is read only
  • 404 — Element is write only
  • 405 — Incorrect Data Type

追加コードは TBD。

Examples
var errorCode = LMSGetLastError();
LMSGetErrorString State Management
Description

本関数により、コンテンツはエラーコード番号で表されるエラーのテキスト記述を取得できる。

Syntax

LMSGetErrorString(errornumber)

Parameter

エラーコードを表す整数値。

Return Value

エラーの文章的記述を表す文字列。

Examples
var errorString = LMSGetErrorString("403");

errorString には "Element is read only" が格納される。

LMSGetDiagnostic State Management
Description

本関数により、ベンダー固有のエラー記述を実装し、コンテンツから取得できる。通常は、エラーに関する追加の詳細情報を提供する。

Syntax

LMSGetDiagnostic(parameter)

Parameter

パラメータは次の 2 つの形式のいずれかを取る:

  • エラーコードを表す整数値。指定されたエラーコードに関する追加情報を要求する。
  • ""(空文字列)。直前に発生したエラーに関する追加情報を要求する。
Return Value

戻り値は、要求されたエラーまたは直前のエラーに関するベンダー固有の追加情報を表す文字列である。

Examples
var moreInfo = LMSGetDiagnostic("403");

moreInfo には、"Element is read only" エラーに関するベンダー固有の追加情報が格納される可能性がある。

3.3.2.2 SCO–LMS 通信 API Adapter の状態遷移

SCO–LMS 通信 API Adapter は、SCO の特定のインスタンスに対して、実行時に複数の状態を遷移する(図 3.3.2.2a)。API Adapter の状態は、特定の入力イベントに対する API Adapter の応答を規定する。各状態において SCO が行いうる活動は異なる。API が経由する状態は Not InitializedInitializedFinished の 3 つである。

SCO Launched By LMS Not Initialized LMSInitialize("") Initialized LMSFinish("") Finished SCO の責務: API を探索し LMSInitialize を呼び出す SCO が呼び出せる関数: ・LMSGetValue ・LMSSetValue ・LMSGetLastError ・LMSGetErrorString ・LMSGetDiagnostic ・LMSCommit ・LMSFinish LMSFinish が false を 返した場合に限り SCO が呼び出せる関数: ・LMSGetLastError ・LMSGetErrorString ・LMSGetDiagnostic Not Initialized Initialized Finished
図 3.3.2.2a: API Adapter の状態遷移

Not Initialized:SCO が実際に起動された後、SCO が LMSInitialize("") API 関数を呼び出すまでの間の状態。この状態の間、LMS が提供する API Adapter を探索することは SCO の責務である。SCO が API Adapter を見つけたら、SCO は次の API 関数を呼び出すことが許可される:

  • LMSInitialize("")
  • LMSGetLastError()
  • LMSGetErrorString()
  • LMSGetDiagnostic()

Initialized:SCO が LMSInitialize("") API 関数を呼び出した後、LMSFinish("") API 関数を呼び出すまでの間の状態。SCO が Initialized 状態にあるとき、LMSInitialize("") を除くすべての API 関数を呼び出すことが許可される。

Finished:SCO が LMSFinish("") API 関数を呼び出した後の状態。LMSFinish("") の呼び出しに対して API Adapter が "false" を返した場合、SCO は次の API 関数を呼び出すことが許可される:

  • LMSGetLastError()
  • LMSGetErrorString()
  • LMSGetDiagnostic()

LMS API Adapter が "false" を返した場合、それ以降の API 関数呼び出しに対して LMS API Adapter が適切に応答する保証はない。

3.3.3 API エラーコードの使用法

SCO は、与えられた API 関数呼び出しが成功したかどうか、また成功しなかった場合は何が問題だったかを判別する手段を持たなければならない。LMSGetLastError() 関数は、直前の API 関数呼び出しによって発生したエラーの種類を判別するためのエラーコードを返す。

SyntaxLMSGetLastError()
Parameters:なし
Return Type:String — 値は次表に示す整数に変換可能である。

Code Description Usage
"0" No error

エラーなし。API 呼び出しは成功。

"101" General Exception

一般的な例外を示すために使用する。

"201" Invalid argument error

存在しない SCORM Run-Time Environment データモデル要素への呼び出しが行われた場合に使用する。

API 経由で無効な引数が渡された場合に使用する。

例:LMSGetValue("cmi.core.zip_code")

"cmi.core.zip_code" は有効な CMI Data Model 要素ではない。

例:LMSInitialize("init")

LMSInitialize("") は空文字列引数を期待する。

"202" Element cannot have children

_children をサポートしないデータモデルカテゴリまたは要素に対して LMSGetValue() が呼ばれた場合に使用する。

例:LMSGetValue("cmi.student_id._children")
"203" Element not an array. Cannot have count.

_count をサポートしないデータモデルカテゴリまたは要素に対して LMSGetValue() が呼ばれた場合に使用する。

例:LMSGetValue("cmi.core._count")
"301" Not initialized

LMSInitialize("") が呼ばれる前に他の API 関数呼び出しが行われた場合に使用する。

"401" Not implemented error

LMS がサポートしていない Data Model 要素への呼び出しが行われた場合、または SCORM Run-Time Environment Data Model 以外の Data Model が使用された場合に使用する。

例:LMSGetValue("cmi.objectives.0.id")

"cmi.objectives.0.id" は任意(オプション)要素である。LMS がこの要素をサポートしていない場合、LMS は空文字列 ("") を返し、エラーコードを 401 に設定すべきである。

例:LMSGetValue("xyz.score.result")

"xyz.score.result" は有効な SCORM Run-Time Environment Data Model 要素ではない。有効なデータモデル要素ではない("xyz""cmi")ため、LMS はエラーコードを "401" に設定し、空文字列を返すべきである。

"402" Invalid set value, element is a keyword

キーワードに対して LMSSetValue() 呼び出しが行われた場合に使用する。

例:LMSSetValue("cmi.core._children", "student_id,student_name")

"cmi.core._children" はキーワードである。

"403" Element is read only.

読み取り専用要素に対して LMSSetValue() 呼び出しが行われた場合に使用する。

例:LMSSetValue("cmi.core.student_id", "JoeStudent")

"cmi.core.student_id" は読み取り専用の CMI 要素である。

"404" Element is write only

書き込み専用要素に対して LMSGetValue() 呼び出しが行われた場合に使用する。

例:LMSGetValue("cmi.core.exit")

"cmi.core.exit" は書き込み専用の CMI 要素である。

"405" Incorrect Data Type

誤ったデータ型で要素を設定しようとした場合に使用する。

例:LMSSetValue("cmi.core.score.raw", "eighty five")

"eighty five""cmi.core.score.raw" の正しいデータ型ではない。正しいデータ型は CMIDecimal(例:"85")または CMIBlank(例:"")である。

例:LMSSetValue("cmi.core.lesson_status", "Not Attempted")

"Not Attempted"cmi.core.lesson_status 要素の有効な語彙値ではない。語彙は大文字小文字を区別し、完全に一致しなければならない。

3.3.4 API 一般ルール

以下に API 使用上の一般的なルールを示す:

  • 関数名はすべて大文字小文字を区別し、常に表示どおりに正確に記述しなければならない。
  • 関数のパラメータまたは引数は大文字小文字を区別する。すべてのパラメータは小文字である。
  • エラーハンドリング関数を除く API 関数の各呼び出しは、エラーコードをリセットする。

3.3.5 LMS 責務

3.3.5.1 API Adapter

SCORM は、前節で説明した必須の API 機能を実装した API Adapter を LMS が提供することを要求する。この Adapter は、Adapter 固有の実装の詳細から SCO を隔離しなければならない。これにより SCO は、基盤となる通信インフラの知識を持つ必要がなく、標準化された LMS Application Program Interface の存在のみに依拠できる。API Adapter の使用に関する要件は次のとおり:

  • LMS は、API Adapter を含む LMS ウィンドウの子ウィンドウまたは子フレームとなるブラウザウィンドウで SCO を起動しなければならない。
  • API Adapter は LMS が提供しなければならない。
  • SCO からの API インタラクションがサポートされる唯一のメカニズムは、ECMAScript (JavaScript) の呼び出しである。
  • API Adapter は、DOM27 経由で "API" という名前のオブジェクトとしてアクセス可能でなければならない。

例として、API Adapter は次のようなシグネチャを持つ Java アプレットとして実装できる:

public class API extends Applet
{
    public String LMSInitialize( String parameter )
    { . . . }
    public String LMSGetValue( String element )
    { . . . }
    public String LMSSetValue( String element, String value )
    { . . . }
    public String LMSCommit( String parameter )
    { . . . }
    public String LMSFinish( String parameter )
    { . . . }
    public String LMSGetLastError()
    { . . . }
    public String LMSGetErrorString( String errorCode )
    { . . . }
    public String LMSGetDiagnostic( String errorCode )
    { . . . }
}

なお、API Adapter は C++ などの他のプログラミング言語で実装することもでき、たとえばブラウザプラグインとして読み込むこともできる。API Adapter の実装は LMS 固有のものとなる。上記のコード片はあくまで一例であり、LMS API Adapter の実装方法はさまざまである。

3.3.6 SCO 責務

3.3.6.1 Find API

SCO は、最低限 LMSInitialize("") および LMSFinish("") の API 呼び出しを発行する責務を負う。これを行うためには、コンテンツが LMS から提示される API Adapter を見つけられなければならない。LMS は、SCO が親ウィンドウおよび/または opener ウィンドウの階層を再帰的に探索して API を見つけられるよう、DOM ウィンドウ階層に API Adapter を配置する責務を負う。LMS の API Adapter を見つけて通信を確立するのはコンテンツの責務である。SCO がこれをどのように行うかは SCORM では規定しない。

以下のコード例は、SCO が LMS の API Adapter を見つけるために使用できるアルゴリズムを示す。これらの関数の使用は SCORM が課す要件ではなく、SCO は他の方法で LMS の API Adapter を見つけてもよい。

<SCRIPT LANGUAGE=JAVASCRIPT>
var findAPITries = 0;

function findAPI(win)
{
    // win に API が含まれているかをチェックする。
    // win に API が含まれず、かつ win に親ウィンドウがあり、
    // 親ウィンドウが win 自身と異なる場合にループを継続する。
    while ( (win.API == null) &&
            (win.parent != null) &&
            (win.parent != win) )
    {
        // 探索回数をインクリメント
        findAPITries++;

        // 注:7 は任意の値だが、十分すぎるはず
        if (findAPITries > 7)
        {
            alert("Error finding API -- too deeply nested.");
            return null;
        }

        // 探索対象のウィンドウを現ウィンドウの親に切り替えて再探索
        win = win.parent;
    }
    return win.API;
}

function getAPI()
{
    // まず現在のウィンドウから API を探す
    var theAPI = findAPI(window);
    // API が見つからず(現ウィンドウに無く)、
    // 現ウィンドウに opener が存在する場合
    if ( (theAPI == null) &&
            (window.opener != null) &&
            (typeof(window.opener) != "undefined") )
    {
        // 現ウィンドウの opener から API を探索
        theAPI = findAPI(window.opener);
    }
    // API がまだ見つからない場合
    if (theAPI == null)
    {
        // API Adapter が見つからない旨をユーザに通知
        alert("Unable to find an API adapter");
    }
    return theAPI;
}
</SCRIPT>

SECTION 3.4Data Model

3.4.1 Data Model 概要

共通の Data Model を確立する目的は、SCO に関する所定の情報セットを、異なる LMS 環境間で追跡できるようにすることにある。たとえば、学習者のスコアを追跡することが一般的な要件として求められる場合、コンテンツが LMS にスコアを報告するための共通の方法を確立する必要がある。SCO が独自のスコア表現を使用すると、LMS はその情報をどのように受信・保存・処理すべきかを判断できない可能性がある。

各種コミュニティおよび標準化団体において、複数の Data Model の開発が進められている。これらのドラフト Data Model 仕様は、SCO と LMS 環境の間で交換される情報セットを機能的にグルーピングしようとするものである。例として、学習者プロファイル情報、設問・テストインタラクション、状態情報、評価などが挙げられる。本バージョンの SCORM のリリース時点では、これらのドラフト Data Model セットはまだ開発途上にあり、広範な実装やテストは行われていない。

3.4.1.1 SCORM Run-Time Environment Data Model

本節で定義する Data Model は、AICC CMI Guidelines for Interoperability4 に記述された AICC CMI Data Model から直接派生したもので、SCORM Run-Time Environment Data Model として定義される。AICC CMI Data Model が SCORM に採用されたのは、定義が明確で、過去に実装実績があるためである。将来的には新しい Data Model セットが採用され、SCORM に組み込まれることが想定されている。本バージョンの SCORM で定義されたデータ要素は、新しい Data Model セットが定義・採用された際にマッピング可能であると想定される。現行の Data Model から新しい要素へのマッピングは、将来の Data Model への移行を比較的スムーズにするはずである。

使用中の Data Model を識別するため、本節で記述するすべての要素名は "cmi" で始まる。これは実装者に対して、これらの要素が AICC CMI Data Model の一部であることを示すシグナルとなる。今後開発される代替 Data Model は、異なる識別子で始まることになる(例:cmi.elementName ではなく adl.elementName)。

SCORM のテストおよび評価フェーズで、AICC および IEEE のメンバーは、AICC CMI Data Model の要素数を大幅に削減することを決定した。これは、開発中の新 Data Model への移行を容易にするためと、削除された要素の多くがほとんどの実装者によって実際には実装されていなかったためである。SCORM Version 1.0 に含まれていた AICC CMI Data Model から削除された要素のリストは Appendix C に要約されている。本書に含まれる SCORM Run-Time Environment Data Model は、削減後の AICC CMI Data Model セットと一致する。

3.4.1.2 Data Model 一般ルール

以下に Data Model の一般的な使用ルールを示す:

  • データ要素名の最初のシンボルが、その Data Model を識別する。例:"cmi" は AICC CMI Data Model を示す。これにより同一 API を他の Data Model でも利用できるよう機能を拡張している。
  • 予約キーワードが 3 つある。いずれもすべて小文字で、アンダースコアで始まる:
    • _version:LMS がサポートする Data Model のバージョンを取得するキーワード
    • _children:LMS がサポートする Data Model 要素を取得するキーワード
    • _count:リスト内の現在の要素数を取得するキーワード
  • すべての配列は 0 ベースの配列である。要素は配列内に順次配置されるべきである。
  • Data Model の要素名は大文字小文字を区別する。
  • Data Model は SCO 単位で実装される。あるSCO が他の SCO のデータ要素にアクセスすることはできない。

3.4.2 Data Model 要素

Data Model 要素は次の 2 つのカテゴリに分けられる:必須(mandatory)と任意(optional)。AICC CMI001 Guidelines for Interoperability4 文書は、LMS による必須実装が要求される要素と、任意で実装する要素を規定している。

必須 Data Model 要素はすべて LMS によってサポートされなければならない。LMS 環境は、任意 Data Model 要素のすべて、または一部のサポートを実装してもよい。

SCO による Data 要素の使用は、すべて任意である。SCO に必須なのは API 関数 LMSInitialize("") および LMSFinish("") の使用のみであり、LMSSetValue()LMSGetValue() の使用は要求されない。SCO は非常に小さく、詳細な追跡を想定しない設計でも構わない。ただし、追跡を行う場合は、複数 LMS 環境間での再利用性を確保するため、共通の Data Model に準拠しなければならない。

3.4.3 リストの取り扱い

リストまたは配列として現れるデータ要素がいくつかある。例として「objectives」がある。コンテンツ内で扱われる目標は複数あり得るし、学習者が同じ目標を複数回経験することも許される場合がある。

リスト内の値を取得・設定するには、インデックス番号を使用する。インデックス番号を省略できるのは、リストにメンバーが 1 つしかない場合のみである。インデックス番号付けは 0 から始まる。リストに値を追記する場合、SCO は最後に使用したインデックス番号を把握していなければならない。配列要素はすべて順次的に追加されなければならない。SCO は配列値のリストを構築する際に配列番号をスキップしたり、配列要素を空のままにしたりしてはならない。リスト内の現在のレコード数を取得するには _count キーワードを使用する。たとえば、現在保存されている objective レコード数を取得するには、次の API 呼び出しを使用する:

var numOfObjectives = LMSGetValue("cmi.objective._count");

SCO が objective レコードの数を把握していない場合、現在の学習者カウントを 0 から開始することもできる。これは、最初のインデックス位置に保存されている objective に関する情報を上書きすることになる。上書きするか追記するかは、SCO 作成者が SCO を作成する際に判断する。

リスト内の要素はドット番号表記(.n で表す)で参照する。たとえば、SCO 内の最初の objective の status 要素の値は "cmi.objective.0.status" として参照される。4 番目の objective の status 要素は "cmi.objective.3.status" として参照される。

※ 訳注原文中の例 cmi.objective._countcmi.objective.0.statuscmi.objective.3.status はいずれもタイポであり、正しくは複数形の cmi.objectives._countcmi.objectives.0.statuscmi.objectives.3.status である(3.4.4 の Data Model 表で正しく定義されている)。本翻訳は原文の表記を維持するが、実装時は複数形を使用すること。

3.4.4 SCORM Run-Time Environment Data Model

以下、各データ要素の詳細仕様を示す。各要素ブロックには、データ型・必須/任意の別・SCO のアクセス権・対応 API 呼び出しを併記する。

cmi.core 系列

すべての LMS が必須でサポートしなければならない情報。SCO が起動時に依拠できる情報。

cmi.core の子要素student_idstudent_namelesson_locationcreditlesson_statusentryscoretotal_timelesson_modeexitsession_time

cmi.core._children
必須 CMIString255 Read Only
対応 API: LMSGetValue()
Definition

_children キーワードは、LMS がサポートする core カテゴリ内のすべての要素を取得するために使用する。子を持たないがサポートされている要素については、空文字列が返される。要素自体がサポートされていない場合も空文字列が返される。続けて last error を要求することで、その要素がサポートされていないかどうかを確認できる。

Usage

LMS がどの cmi.core データ要素をサポートしているかを判定するために使用する。

Format

戻り値は、LMS がサポートする core カテゴリ内のすべての要素名のカンマ区切りリスト。

LMS Behavior
  • Initialization: このグループのサポート対象子要素のセットを初期化する。LMSGetValue() 要求に対して適切なリストを返せるようにする。
  • LMSGetValue(): サポートされている要素のカンマ区切りリストを返す。
    • API 呼び出し例:LMSGetValue("cmi.core._children")
    • 典型的な戻り値:"student_id,student_name,lesson_location,credit,lesson_status,entry,score,total_time,exit,session_time"
    • Error Code:401 — Not implemented error。本要素は必須なので LMS がサポートしなければならない。
  • LMSSetValue(): 本要素はキーワードのため、設定不可。402(Invalid set value, element is a keyword)を返す。
SCO Usage Example
var coreChildren = LMSGetValue("cmi.core._children");
if (coreChildren.indexOf("student_name") != -1)
{
    studentName = LMSGetValue("cmi.core.student_name");
}
cmi.core.student_id
必須 CMIIdentifier Read Only
対応 API: LMSGetValue()
Definition

LMS の単一ユーザーを参照する一意な英数字コード/識別子。

Usage

学習者を一意に識別するために使用する。

Format

スペースを含まない最大 255 文字の英数字。ハイフンとアンダースコアは使用可。ピリオドは使用不可。大文字小文字は区別しない。

LMS Behavior
  • Initialization: 学習者登録に基づき LMS が責任を持つ。
  • LMSGetValue(): LMS が学習者について保持する現在値を返す。
    • 戻り値の例:"Joe_Student1""JS-2000""joe2000-3"
    • Error Code:401 — Not implemented error(必須要素のためサポート必須)
  • LMSSetValue(): 読み取り専用。403(Element is read only)を返す。
SCO Usage Example
var coreStudentID = LMSGetValue("cmi.core.student_id");
cmi.core.student_name
必須 CMIString255 Read Only
対応 API: LMSGetValue()
Definition

通常はコース名簿で使用される学習者の正式名。ファーストネームのみではなく完全な名前。

Usage

学習者の正式名を表すために使用する。

Format

姓、名、ミドルイニシャルの順。姓と名はカンマで区切る。名前内のスペースは保持される。

LMS Behavior
  • Initialization: 学習者登録に基づき LMS が責任を持つ。
  • LMSGetValue(): LMS が保持する現在値を返す。
    • 戻り値の例:"Student, Joseph A.""Student, Mike A. Jr."
  • LMSSetValue(): 読み取り専用。403 を返す。
SCO Usage Example
var coreStudentName = LMSGetValue("cmi.core.student_name");
cmi.core.lesson_location
必須 CMIString255 Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

学習者が前回 SCO を経験した際に LMS に渡された SCO の出口点に対応する。学習者が以前に離脱した位置から SCO に戻れるようにする 1 つの仕組みとなる。すなわち、本要素は学習者の出口点を識別でき、その出口点を SCO は次回起動時の入り口点として利用できる。

Usage

学習者が SCO 内で最後にどこにいたかを表す。SCO がセッション中に「ブックマーク」として保存する用途に使える。SCO が中断され後で再開された場合、SCO は lesson_location を使って学習者を離脱位置に戻すことができる。

Format

実装依存。LMS は本データを保持し、学習者が再入する際に SCO が要求すれば返す。SCO が LMS に渡したものがそのまま返される。フォーマットは SCO が期待する形式(SCO 自身が作成する)。SCO への初回入場時、または推奨開始位置がない場合、lesson_location は空文字列 ("") でよい。

LMS Behavior
  • Initialization: LMS は空文字列に設定すべき。SCO が任意で値を設定し、SCO 再入時に取得できる。
  • LMSGetValue(): LMS が保持する現在値を返す。Error Code 401。
  • LMSSetValue(): 渡された値でデータモデル要素を設定する。値はデータ型に一致しなければならない。Error Code:405(Incorrect Data Type)、401。
SCO Usage Example
// HTML のアンカーを使う SCO の例(onLoad で呼び出す関数)
var coreSCOLocation = LMSGetValue("cmi.core.lesson_location");
if (LMSGetLastError() == "0")
{
    // coreSCOLocation には HTML 内のアンカー名が入っている
    // 学習者を前回離脱位置から再開させる
    window.location.hash = coreSCOLocation;
}
else
{
    // エラー処理
}
cmi.core.credit
必須 CMIVocabulary (Credit) Read Only
対応 API: LMSGetValue()
Definition

学習者がこの SCO のパフォーマンス(合否やスコア)に基づき LMS によって credit(評価)を付与されるかどうかを示す。

Usage

学習者が SCO を credit 対象として受講しているかどうかを LMS が示すために使用する。cmi.core.creditlesson_mode と組み合わせて使用される。詳細は cmi.core.lesson_mode を参照。cmi.core.creditlesson_status の決定にも使用される。詳細は cmi.core.lesson_status を参照。

Format

定義済み語彙のいずれか:

  • "credit":学習者は SCO を credit 対象として受講している。SCO が LMS にデータを送信した場合、LMS は学習者にそれを credit する。
  • "no-credit":学習者は SCO を no-credit で受講している。現在の credit(たとえばスコア 80 で passed)は、この SCO のパフォーマンスによって変更されない。
LMS Behavior
  • Initialization: 学習者がコースを credit/no-credit のどちらで受講しているかは LMS が決定する。SCORM では credit/no-credit の指定方法を定義していないため、実装は LMS 固有となる。
  • LMSGetValue(): 現在値("credit" または "no-credit")を返す。Error Code 401。
  • LMSSetValue(): 読み取り専用。403。
SCO Usage Example
var creditFlag = LMSGetValue("cmi.core.credit")
if (creditFlag == "credit")
{
    // credit 対象。それに応じた処理
}
else
{
    // no-credit 対象。それに応じた処理
}
cmi.core.lesson_status
必須 CMIVocabulary (Status) Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

LMS が判定する現在の学習者ステータス。可能な値は 6 つ。

Usage

通常、SCO 自身がステータスを決定し LMS に渡す。次の挙動に注意:

  1. cmi.core.credit"credit" で、manifest に adlcp:masteryscore がある場合、LMS は学習者のスコアと mastery score の比較に応じて、ステータスを "passed" または "failed" に変更できる。
  2. manifest に mastery score がない場合、LMS は SCO が決定したステータスを上書きできない。
  3. 学習者が SCO を no-credit で受講している場合、lesson_status は変更されない。ただし例外として、lesson_mode"browse" の場合、no-credit であっても lesson_status"browsed" に変更されることがある。
Format

定義済み語彙のいずれか:

  • "passed":必要数の objective に習熟した、または必要なスコアを達成した。SCO 完了かつ合格。
  • "completed":合格/不合格に関わらず、SCO 内のすべての要素を経験した。たとえば、合格判定が LMS 側のスコアに依存し、SCO は素点しか把握していない場合に使う。
  • "failed":SCO に合格しなかった。すべての要素を完了していない場合もある。SCO 完了かつ不合格。
  • "incomplete":SCO を開始したが完了していない。
  • "browsed":初回試行時、LMS モード「Browse」で SCO を起動した。
  • "not attempted":SCO を開始すらしていない(目次や概要のみを見て、まだ準備ができないと判断した等)。"not attempted" から "incomplete" への移行判定アルゴリズムは SCO 内で任意に決定できる。
LMS Behavior
  • Initialization: 初回試行時、LMS は "not attempted" を初期値として設定する。SCO が cmi.core.lesson_status を設定しない場合の追加要件:
    • 初回起動時、LMS は cmi.core.lesson_status"not attempted" に設定する。
    • LMSFinish() を受信、または学習者が画面遷移した場合、LMS は cmi.core.lesson_status"completed" に設定する。
    • "completed" 設定後、LMS は cmi.student_data.mastery_score(サポートされていれば)または manifest に mastery score が指定されているかチェックする。指定があり SCO が cmi.core.score.raw を設定していれば、LMS は raw スコアと mastery score を比較して "passed" または "failed" に設定する。指定がなければ "completed" のままとする。
  • LMSGetValue(): データモデルに保存された値を返す。値は定義済み語彙のいずれか。Error Code 401。
  • LMSSetValue(): 値はデータ型に一致しなければならない。Error Code 405、401。
SCO Usage
  • "passed":SCO を credit で受講する場合に使用
  • "failed":SCO を credit で受講する場合に使用
  • "completed":SCO を no-credit で受講する場合に使用
  • "incomplete":SCO が passed/failed/completed を判定する前に終了した場合(credit/no-credit 共通)
  • "browsed"lesson_modebrowse の場合に使用
  • "not attempted":SCO が設定すべきではない(学習者が SCO を初回試行する際に LMS が初期化する)
SCO Usage Example
var lessonStatus = LMSGetValue("cmi.core.lesson_status");
if (lessonStatus == "failed")
{
    // 学習者が不合格。それに応じた処理
}
else
{
    // それ以外。それに応じた処理
}
cmi.core.entry
必須 CMIVocabulary (Entry) Read Only
対応 API: LMSGetValue()
Definition

学習者が当該 SCO に過去にいたかどうかを示す。

Usage

学習者が初回入場の場合、LMS は "ab-initio" に設定すべき。中断状態から再入する場合は "resume" に設定すべき。

Format
  • "ab-initio":SCO への初回入場。pre-test で全 objective に合格した場合など、"not attempted" でない状態で SCO を初めて見ることもありうるため、"not attempted" は信頼できる初回判定の指標にならない。
  • "resume":学習者が以前 SCO 内にいた。中断状態から再開している。
  • "":初回(ab-initio)でも中断からの再開(resume)でもない入場。たとえば SCO が完了済みで、後にレビュー目的で読み込まれた場合などに使う。
LMS Behavior
  • Initialization: 初回起動時、LMS は "ab-initio" に初期化する。次回起動時の値は、SCO が前回設定した cmi.core.exit によって決まる。exit="suspend" なら entry="resume"、それ以外なら entry=""
  • LMSGetValue(): データモデル値を返す。Error Code 401。
  • LMSSetValue(): 読み取り専用。403、401。
SCO Usage Example
var entryStatus = LMSGetValue("cmi.core.entry")
if (LMSGetLastError() == "0")
{
    if (entryStatus == "resume")
    {
        // SCO 再開中
    }
    else
    {
        // SCO への初回入場
    }
}

cmi.core.score 系列

学習者のパフォーマンスを示す情報。子要素:rawminmax

cmi.core.score._children
必須 CMIString255 Read Only
対応 API: LMSGetValue()
Definition

_children キーワードは、LMS がサポートする score カテゴリ内のすべての要素を取得するために使用する。

Usage

LMS がどの cmi.core.score 子要素をサポートしているかを判定する。raw のみ必須でサポートされなければならない。

Format

戻り値はカンマ区切りリスト。例:"raw"(最低限)、"raw,min,max""raw,min"

LMS Behavior
  • LMSGetValue(): サポート要素のカンマ区切りリストを返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
SCO Usage Example
var scoreChildren = LMSGetValue("cmi.core.score._children");
if (scoreChildren.indexOf("min") != -1)
{
    LMSSetValue("cmi.core.score.min", "10");
}
cmi.core.score.raw
必須 CMIDecimal / CMIBlank Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

SCO の前回試行における学習者のパフォーマンス指標。SCO 設計者が任意に算出方式を決められる(達成 objective の割合、選択式テストの素点、埋め込み問題への正解数など)。cmi.core.score.raw は 0〜100 の範囲で正規化された値でなければならない。

Usage

学習者が SCO に初回試行している間は空文字列 ("") に設定すべき。追加試行では、前回試行で記録された値を反映する。SCO 内でセットされていない状態で取得が要求された場合、空文字列を返す。

Format

小数値または空文字列。

LMS Behavior
  • Initialization: SCO 起動時に空文字列で初期化。値の設定責務は SCO にある。
  • LMSGetValue(): CMIDecimal または CMIBlank を返す。例:LMSGetValue("cmi.core.score.raw")。Error Code 401。
  • LMSSetValue(): 値はデータ型に一致しなければならない。例:LMSSetValue("cmi.core.score.raw", "85.7")。Error Code 405、401。
SCO Usage Example
LMSSetValue("cmi.core.score.raw", "85");
cmi.core.score.max
任意 CMIDecimal / CMIBlank Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

学習者が達成し得た最大スコアまたは合計値。0〜100 の範囲で正規化された値でなければならない。

Usage

学習者が達成し得た最大スコアを示す。

Format

小数値または空文字列。

LMS Behavior
  • Initialization: 空文字列で初期化。SCO が値を設定する責務を持つ。
  • LMSGetValue(): CMIDecimal または CMIBlank を返す。Error Code 401。
  • LMSSetValue(): 値はデータ型に一致しなければならない。Error Code 405、401。
cmi.core.score.min
任意 CMIDecimal / CMIBlank Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

学習者が達成し得た最小スコア。0〜100 の範囲で正規化された値でなければならない。

Usage

学習者が達成し得た最低スコアを示す。

Format

小数値または空文字列。

LMS Behavior
  • Initialization: 空文字列で初期化。SCO が値を設定する責務を持つ。
  • LMSGetValue(): CMIDecimal または CMIBlank を返す。Error Code 401。
  • LMSSetValue(): 値はデータ型に一致しなければならない。Error Code 405、401。
cmi.core.total_time
必須 CMITimespan Read Only
対応 API: LMSGetValue()
Definition

当該 SCO における学習者の全セッション時間の累積。

Usage

SCO の全セッション時間を学習者単位で追跡する。LMS は SCO 起動時にデフォルト値で初期化し、SCO が報告する session_time を加算して累計を維持する。

Format

時:分:秒 をコロン区切り。HHHH:MM:SS.SS。時は最小 2 桁・最大 4 桁、分はちょうど 2 桁、秒は 2 桁+オプションで小数点と 1〜2 桁。

LMS Behavior
  • Initialization: SCO 起動時に "0000:00:00.00" で初期化。LMSFinish() または学習者の画面遷移時に、SCO が最後に設定した session_time(設定があれば)を total_time に加算する。session_time への複数回の LMSSetValue() は加算せず、最新値で上書きする。
  • LMSGetValue(): CMITimespan を返す。例:"00:29:00""01:27:45.5"。Error Code 401。
  • LMSSetValue(): 読み取り専用。403、401。
cmi.core.lesson_mode
任意 CMIVocabulary (Mode) Read Only
対応 API: LMSGetValue()
Definition

SCO 起動後に望まれる SCO 動作を識別する。多くの SCO は単一の動作だが、講師や設計者の判断によって、提示する情報量・順序・トレーニング哲学を変えられる SCO も存在する。本標準は、SCO の動作に影響しうる 3 つのパラメータの伝達をサポートする。

Usage

SCO がどのモードで起動されたかを表す。lesson_status と組み合わせて使用する。

Format
  • "browse":学習者は教材をプレビューしたいが、必ずしも評価対象として SCO に挑戦したいわけではない。
  • "normal":学習者が学習に対する credit を得るために設計どおりに動作すべきことを示す。
  • "review":学習者は教材を一度以上経験し、評価済みである。

認識できない/想定外の lesson_mode を受信した場合、SCO は normal を仮定する。

LMS Behavior
  • Initialization: SCO の起動モードを LMS が決定する(SCORM では指定方法を未定義のため LMS 固有実装)。
  • LMSGetValue(): 定義済み語彙のいずれかを返す。Error Code 401。
  • LMSSetValue(): 読み取り専用。403、401。
SCO Usage Example
var mode = LMSGetValue("cmi.core.lesson_mode");
if (LMSGetLastError() == "0")
{
    if (mode == "browse")         { /* ブラウズ中 */ }
    else if (mode == "review")   { /* レビュー中(既に評価済み) */ }
    else                          { /* normal モードで起動 */ }
}
cmi.core.exit
必須 CMIVocabulary (Exit) Write Only
対応 API: LMSSetValue()
Definition

学習者が SCO を離脱した方法または理由を示す。

Usage

SCO が最後に終了した理由を示すために使用する。

Format
  • "time-out":時間が超過した、または max_time_allowed を超えたために SCO が終了した(max_time_allowed は manifest の adlcp:maxtimeallowed)。
  • "suspend":学習者は離脱位置から後で戻る意図で SCO を離脱した。
  • "logout":LMS に戻ってログアウトするのではなく、SCO 内からログアウトした。SCO は LMS に制御を渡し、LMS は適切なデータモデル要素を更新した上で、コースから自動ログアウトする。
  • "":通常の終了状態を表す。
LMS Behavior
  • Initialization: 初期化不要。LMSGetValue() は呼ばれない。SCO が制御する。SCO が設定した値に基づき、次回起動時の cmi.core.entry が決まる:
    • exit="time-out" または "logout" または未設定 → 次回 entry=""
    • exit="suspend" → 次回 entry="resume"
    • exit="" → 次回 entry=""
    • 加えて exit="logout" の場合、LMS は LMSFinish() 時または画面遷移時にコースから学習者をログアウトする。
  • LMSGetValue(): 書き込み専用のため、SCO が呼ぶと 404 を返し空文字列を返す。Error Code 401、404。
  • LMSSetValue(): 値はデータ型に一致しなければならない。Error Code 405、401。
SCO Usage Example
LMSSetValue("cmi.core.exit", "time-out")
cmi.core.session_time
必須 CMITimespan Write Only
対応 API: LMSSetValue()
Definition

学習者が SCO を離脱した時点までに、当該 SCO 内で過ごした時間(時:分:秒)。すなわち、本セッションの開始から SCO の単一利用の終了までの時間を表す。

Usage

1 セッション中の SCO 滞在時間を追跡する。LMS は本値を使って cmi.core.total_time を算定する。

Format

HHHH:MM:SS.SS。時は最小 2 桁・最大 4 桁、分はちょうど 2 桁、秒は 2 桁+オプションで小数点と 1〜2 桁。

LMS Behavior
  • Initialization: 初期化不要。SCO が制御。SCO は単一実行中に複数回 session_time を設定可能。LMSFinish() または画面遷移時、LMS は SCO が最後に設定した session_time(あれば)を total_time に加算する。複数回の LMSSetValue() は加算せず最新値で上書きする。
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 値はデータ型に一致しなければならない。例:LMSSetValue("cmi.core.session_time", "0010:34:34.56")。Error Code 405、401。
SCO Usage Example
LMSSetValue("cmi.core.session_time", "0000:12:30")
cmi.suspend_data
必須 CMIString4096 Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

SCO の過去の利用時に生成された一意な情報で、現在の利用にも必要となるもの。起動中の SCO に固有の情報であり、通常は SCO の再起動情報として使用される。SCO が作成し、LMS が保存して、次回 SCO 実行時に SCO に返す。LMS は SCO ごと・学習者ごとに、本グループ用の領域を確保しなければならない。学習者がコース内にいる間、本データは保持される。

Usage

SCO の再開時にのみ利用可能。SCO 完了前に学習者が離脱した場合に値を設定し、再開時にこの情報を利用できる。

Format

SCO 固有。制約は次の 2 点のみ:

  1. データは ASCII 形式で送受信されなければならない。SCO は必要な形式に変換できる。
  2. LMS の負担を避けるため、本要素は 4096 バイトに制限すべきである。
LMS Behavior
  • Initialization: 空文字列で初期化。SCO が値を設定する責務を持つ。
  • LMSGetValue(): データモデル値を返す。Error Code 401。
  • LMSSetValue(): データ型に一致した値で設定。Error Code 405、401。
SCO Usage Example
// SCO 再起動時に suspend_data を取得
var suspendData = LMSGetValue("cmi.suspend_data")
if (LMSGetLastError() == "0")
{
    // suspend_data を利用
}
cmi.launch_data
必須 CMIString4096 Read Only
対応 API: LMSGetValue()
Definition

SCO の作成時に生成され、起動のたびに必要となる一意な情報。これがないと SCO は実行できないことがある。

Usage

cmi.launch_data は SCO の起動を補助するために SCO に提供される。所与の SCO に対して常に同じ値となる。

Format

テキストフィールド。SCO が良好に機能するためにシステム固有の必要情報を含む。本フィールドは 4096 文字に制限される。

LMS Behavior
  • Initialization: manifest(adlcp:datafromlms 要素)から値を取得して初期化。manifest に launch data がない場合は空文字列にする。
  • LMSGetValue(): データモデル値を返す。Error Code 401。
  • LMSSetValue(): 読み取り専用。403、401。
SCO Usage Example
var launchData = LMSGetValue("cmi.launch_data")
if (LMSGetLastError() == "0")
{
    // launch_data を利用
}

cmi.comments / cmi.comments_from_lms

SCO とのコメント収集・配布の仕組み。cmi.comments は SCO がコメントを get/set する能力を表し、cmi.comments_from_lms は SCO にコメントを提供する能力(SCO 視点では読み取り専用)を表す。

cmi.comments
任意 CMIString4096 Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

SCO からの自由形式フィードバック。たとえば、学習者が SCO 内の任意の地点でコメントを残したり、SCO 終了時にコメントを求められたりする。コメントには SCO 内で作成された場所や時刻を埋め込むこともできる。

Usage

SCO が SCO に関するコメントを LMS に送信する用途。学習者が入力したコメントの収集に使える。

Format

自由形式の英数字テキストおよび特殊文字。

LMS Behavior
  • Initialization: 空文字列で初期化。値の設定責務は SCO にある。
  • LMSGetValue(): データモデル値を返す。コメント未提供なら空文字列。Error Code 401。
  • LMSSetValue(): 値を設定する。コメントは連結されるべきである。Error Code 401、405。
SCO Usage Example
var comments = LMSGetValue("cmi.comments")
if (LMSGetLastError() == "0") { /* コメントを利用 */ }
cmi.comments_from_lms
任意 CMIString4096 Read Only
対応 API: LMSGetValue()
Definition

LMS 由来のコメントを表す。たとえば講師コメントなど、学習者向けのコメントとして SCO が必要に応じて表示できる。

Usage

SCO に関連する LMS 起源のコメントを SCO が参照する用途。

Format

特定の形式は指定なし。

LMS Behavior
  • Initialization: 提供されていれば LMS が初期化。
  • LMSGetValue(): データモデル値を返す。コメントなしなら空文字列。Error Code 401。
  • LMSSetValue(): 読み取り専用。403、401。
SCO Usage Example
var commentsFromLMS = LMSGetValue("cmi.comments_from_lms");
if (LMSGetLastError() == "0") { /* LMS からのコメントを利用 */ }

cmi.objectives 系列

SCO 内で扱われる個別 objective に対する学習者のパフォーマンスを示す。子要素:idscorestatus

cmi.objectives._children
任意 CMIString255 Read Only
対応 API: LMSGetValue()
Definition

LMS がサポートする cmi.objectives カテゴリ内の全要素を取得するキーワード。

Usage

LMS がサポートする要素を判定する。シミュレーションなどの複雑なシナリオで、学習者のパフォーマンスについてどの詳細情報を収集できるかを示す。

Format

カンマ区切りリスト。例:"id,score""id,status"

LMS Behavior
  • LMSGetValue(): サポート要素のカンマ区切りリストを返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
cmi.objectives._count
任意 CMIInteger Read Only
対応 API: LMSGetValue()
Definition

cmi.objectives リスト内の現在のレコード数を取得するキーワード。

Usage

LMS が保存している objective 数を判定する。SCO はこの値から、どの objective レコードを取得・設定するかを決定できる("3" が返れば 0〜2 のレコードが存在)。

Format

整数値。

LMS Behavior
  • Initialization: SCO 起動時に 0 で初期化。
  • LMSGetValue(): objective レコード総数を返す。例:"0""4"。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
SCO Usage Example
var totalObj = LMSGetValue("cmi.objectives._count")
// 0 ベースなので -1 して新規 objective の id を設定
var request = "cmi.objectives." + (totalObj - 1) + ".id"
LMSSetValue(request, "Obj1_110")
cmi.objectives.n.id
任意 CMIIdentifier Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

objective を識別するための、開発者が定義する SCO 固有の内部識別子。

Usage

objective を識別する手段。

Format

内部スペースのない英数字文字列。

LMS Behavior
  • Initialization: 空文字列で初期化。値の設定責務は SCO にある。
  • LMSGetValue(): 保存された objective id を返す。Error Code 401。
  • LMSSetValue(): 値はデータ型に一致しなければならない。例:LMSSetValue("cmi.objectives.0.id", "Obj1")。Error Code 405、401。
cmi.objectives.n.score 系列

各 objective には関連スコアを保持できる。子要素:rawminmax

cmi.objectives.n.score._children
任意 CMIString255 Read Only
対応 API: LMSGetValue()
Definition

LMS がサポートする cmi.objectives.n.score カテゴリ内の全要素を取得するキーワード。

Format

カンマ区切りリスト。例:"raw,min,max""raw"""

LMS Behavior
  • LMSGetValue(): サポート要素のカンマ区切りリストを返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
cmi.objectives.n.score.raw
任意 CMIDecimal / CMIBlank Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

各試行後の objective に対する学習者パフォーマンスの数値表現。0〜100 で正規化された値。

Format

小数値または空文字列。

LMS Behavior
  • Initialization: 空文字列で初期化。
  • LMSGetValue(): objective の raw スコアを返す。Error Code 401。
  • LMSSetValue(): 例:LMSSetValue("cmi.objectives.0.score.raw", "5")。Error Code 405、401。
cmi.objectives.n.score.max
任意 CMIDecimal / CMIBlank Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

各 objective で達成し得た最大スコア。0〜100 で正規化された値。

LMS Behavior
  • Initialization: 空文字列で初期化。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): Error Code 405、401。
cmi.objectives.n.score.min
任意 CMIDecimal / CMIBlank Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

各 objective で達成し得た最小スコア。0〜100 で正規化された値。

LMS Behavior
  • Initialization: 空文字列で初期化。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): Error Code 405、401。
cmi.objectives.n.status
任意 CMIVocabulary (Status) Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

各試行後の objective に対するステータス。cmi.core.lesson_status と同じ 6 種類の語彙:"passed""completed""failed""incomplete""browsed""not attempted"

LMS Behavior
  • Initialization: SCO が制御。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): 例:LMSSetValue("cmi.objectives.0.status", "failed")。Error Code 405、401。

cmi.student_data 系列

学習者のパフォーマンスに基づく SCO のカスタマイズを支援する情報。子要素:mastery_scoremax_time_allowedtime_limit_action

cmi.student_data._children
任意 CMIString255 Read Only
対応 API: LMSGetValue()
Definition

LMS がサポートする student_data カテゴリ内の全要素を取得するキーワード。

Format

カンマ区切りリスト。例:"mastery_score,time_limit_action,max_time_allowed"

LMS Behavior
  • LMSGetValue(): サポート要素のカンマ区切りリストを返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
cmi.student_data.mastery_score
任意 CMIDecimal Read Only
対応 API: LMSGetValue()
Definition

合格スコア。SCO 外で決定される。SCO のスコアが mastery score 以上のとき、学習者はコンテンツに合格/習熟したとみなされる。SCO によっては、合格スコアが LMS により決定されるため、SCO 自身ではこれを把握しない場合がある。

Usage

LMS が mastery_score をサポートするには、SCO から渡されたスコアに基づいて lesson_status を変更できる必要がある。SCO に mastery_score を渡すだけでは、本機能の完全サポートにはならない。

Format

小数値。

LMS Behavior
  • Initialization: manifest の adlcp:masteryscore から値を取得。
  • LMSGetValue(): 現在値を返す。例:"75""100""5"。Error Code 401。
  • LMSSetValue(): 読み取り専用。403、401。
cmi.student_data.max_time_allowed
任意 CMITimespan Read Only
対応 API: LMSGetValue()
Definition

当該 SCO の現在の試行において、学習者が利用可能な最大時間。制限超過時の SCO の挙動は time_limit_action を参照。

Format

HHHH:MM:SS.SS。例:"00:14:30""02:03:00"

LMS Behavior
  • Initialization: manifest の adlcp:maxtimeallowed から値を取得。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): 読み取り専用。403、401。
cmi.student_data.time_limit_action
任意 CMIVocabulary (Time Limit Action) Read Only
対応 API: LMSGetValue()
Definition

max_time_allowed 超過時に SCO が取るべき動作を指示する。SCO が「終了するか継続するか」「学習者にメッセージを表示するか」の 2 軸で指定する。

Format

定義済み語彙のいずれか:

  • "exit,message"
  • "exit,no message"
  • "continue,message"
  • "continue,no message"
LMS Behavior
  • Initialization: manifest の adlcp:timelimitaction から値を取得。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): 読み取り専用。403、401。

cmi.student_preference 系列

後続の SCO に適用すべき学習者選好情報。子要素:audiolanguagespeedtext

cmi.student_preference._children
任意 CMIString255 Read Only
対応 API: LMSGetValue()
Definition

LMS がサポートする student_preference カテゴリ内の全要素を取得するキーワード。

Format

カンマ区切りリスト。例:"audio,language,speed"

LMS Behavior
  • LMSGetValue(): サポート要素のカンマ区切りリストを返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
cmi.student_preference.audio
任意 CMISInteger Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

音声のオン/オフおよび音量レベルを示す。

Format

−1 から 100 までの整数:

  • −1:オフ(負数すべてオフを意味する)
  • 0:変更なし(SCO のデフォルト、または前 SCO のステータス継続)
  • 1〜100:音量(1 が最弱、100 が最大)
LMS Behavior
  • Initialization: サポート時は 0 で初期化。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): Error Code 405、401。
cmi.student_preference.language
任意 CMIString255 Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

多言語対応 SCO の場合、配信言語を識別する。

Format

空白を含み得る英字文字列。例:"English""French"

LMS Behavior
  • Initialization: 空文字列で初期化。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): Error Code 405、401。
cmi.student_preference.speed
任意 CMISInteger Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

SCO のコンテンツ配信速度を制御する。

Format

−100 から 100 までの整数:

  • −100:システム上の最も遅い速度
  • 0:変更なし(SCO のデフォルト、通常速度)
  • 100:システム上の最大速度
LMS Behavior
  • Initialization: 0 で初期化。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): Error Code 405、401。
cmi.student_preference.text
任意 CMISInteger Read / Write
対応 API: LMSGetValue() / LMSSetValue()
Definition

音声向けに設計された SCO で、音声テキストを画面に表示するかを示す(音声のみ/テキスト併記/テキスト消し)。

Format

3 値整数:

  • −1:テキスト非表示
  • 0:変更なし(デフォルト)
  • 1:テキスト表示
LMS Behavior
  • Initialization: 0 で初期化。
  • LMSGetValue(): Error Code 401。
  • LMSSetValue(): Error Code 405、401。

cmi.interactions 系列

学習者がコンピュータに対して行う、認識・記録可能な単一またはグループの入力に関する情報。本カテゴリは、SCO 受講中の各インタラクションについて詳細な情報を収集する。子要素:idobjectivestimetypecorrect_responsesweightingstudent_responseresultlatency

※ 訳注原文 PDF では本系列の LMSSetValue() エラーコード欄に 205 と記載されているが、これはタイポであり、正しくは 405 - Incorrect Data Type である。SCORM 1.2 Addendums の Addendum 4 で訂正済み。本翻訳では原文の表記をそのまま再現するが、実装時は 405 を返すこと。

cmi.interactions._children
任意 CMIString255 Read Only
対応 API: LMSGetValue()
Definition

LMS がサポートする cmi.interactions カテゴリ内の全要素を取得するキーワード。

Format

カンマ区切りリスト。例:"id,time,type,correct_responses,student_response"

LMS Behavior
  • LMSGetValue(): サポート要素のカンマ区切りリストを返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
cmi.interactions._count
任意 CMIInteger Read Only
対応 API: LMSGetValue()
Definition

cmi.interactions リスト内の現在のレコード数を取得するキーワード。

Usage

SCO はこの値から、次に設定するインタラクションレコードのインデックスを判定できる。"3" が返れば 0〜2 が使用済み、次の利用可能インデックスは 3。

LMS Behavior
  • Initialization: SCO 起動時に 0 で初期化。
  • LMSGetValue(): 整数を返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
cmi.interactions.n.id
任意 CMIIdentifier Write Only
対応 API: LMSSetValue()
Definition

インタラクションの一意識別子。

Format

内部スペースのない英数字文字列。

LMS Behavior
  • Initialization: SCO が制御。
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例:LMSSetValue("cmi.interactions.0.id", "I_001")。Error Code 205、401。
cmi.interactions.n.objectives 系列
cmi.interactions.n.objectives._count
任意 CMIInteger Read Only
対応 API: LMSGetValue()
Definition

あるインタラクションに紐づく objective id リストの現在のレコード数を取得するキーワード。

LMS Behavior
  • Initialization: SCO 起動時に 0 で初期化。
  • LMSGetValue(): 整数を返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
cmi.interactions.n.objectives.n.id
任意 CMIIdentifier Write Only
対応 API: LMSSetValue()
Definition

インタラクションが紐づく objective を識別するための、開発者が定義した識別子。

Format

内部スペースのない英数字文字列。

LMS Behavior
  • Initialization: SCO が制御。
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例:LMSSetValue("cmi.interactions.0.objectives.0.id", "A1333")。Error Code 205、401。
cmi.interactions.n.time
任意 CMITime Write Only
対応 API: LMSSetValue()
Definition

学習者インタラクションが完了した時刻の識別。

Format

24 時間制の時刻:HH:MM:SS.S。時・分はちょうど 2 桁、秒は 2 桁+オプションで小数点と 1〜2 桁。

LMS Behavior
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例:LMSSetValue("cmi.interactions.0.time", "12:33:35.5")。Error Code 205、401。
cmi.interactions.n.type
任意 CMIVocabulary (Interaction) Write Only
対応 API: LMSSetValue()
Definition

記録されるインタラクションのカテゴリ。インタラクションのタイプによって、応答の解釈方法が決まる。

Format

定義済み語彙のいずれか:

  • "true-false":応答が 2 種類のみの設問
  • "choice":限られた事前定義の応答から学習者が選ぶ設問。各応答に番号や文字を割り当てる。1 つ以上が正解になり得る
  • "fill-in":単純な数語の回答が必要な設問。応答は事前定義されず、学習者が作成する
  • "matching":1 つまたは 2 つの集合の項目を組み合わせる設問
  • "performance":選択式と似ているが、書かれた応答を選ぶ代わりにタスクや動作を実行する
  • "sequencing":リストのメンバーを論理的順序に並べる設問
  • "likert":連続体上の選択肢を提示する設問。意見・態度に基づく
  • "numeric":1 つの数値で答える設問。正解は数値範囲内の単一値となる場合もある
LMS Behavior
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例:LMSSetValue("cmi.interactions.0.type", "choice")。Error Code 205、401。
cmi.interactions.n.correct_responses._count
任意 CMIInteger Read Only
対応 API: LMSGetValue()
Definition

あるインタラクションの正答リストの現在のレコード数を取得するキーワード。

LMS Behavior
  • Initialization: SCO 起動時に 0 で初期化。
  • LMSGetValue(): 整数を返す。Error Code 401。
  • LMSSetValue(): キーワードのため設定不可。402、401。
cmi.interactions.n.correct_responses.n.pattern
任意 CMIFeedback Write Only
対応 API: LMSSetValue()
Definition

インタラクションに対するあり得る応答のうち、正答とみなされるものを記述する。複数の正答があり得るし、より正解に近い応答もあり得る。

Format

cmi.interactions.n.type によりフォーマットが異なる:

  • true-false:単一文字/数字。0,1,t,f が有効。0 は false。完全な単語(例:"true")の場合、最初の 1 文字のみ意味を持つ。
  • choice:カンマ区切りで 1 つ以上の文字。整数 (0–9) または英字 (a–z) を使用。各応答は 1 文字に制限。可能性が 26 を超える場合は performance 型を使用。
  • fill-in:英数字文字列。最初の印字可能文字以降のスペースは有意。
  • numeric:単一の数値。小数点はあってもなくてもよい。
  • likert:likert に正答はない。空白でよい。
  • matching:ピリオドで区切られた識別子のペア。各マッチング候補はソースとターゲットからなる。
  • performance:255 文字以下の英数字フィールド。
  • sequencing:任意の順序で識別された要素群。最終的な配置位置で正誤を判定する。
LMS Behavior
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例(matching の場合):LMSSetValue("cmi.interactions.0.correct_responses.0.pattern", "1.c,2.b,3.a,4.d")。Error Code 205、401。
cmi.interactions.n.weighting
任意 CMIDecimal Write Only
対応 API: LMSSetValue()
Definition

インタラクションの相対的重要度を識別する係数。たとえば 1 つ目に重み 15、2 つ目に重み 25 を付ければ、重み付け合計スコアは 2 つ目により強く影響される。すべて同じ重要度なら同じ重みを付ける。重み 0 は重み付け最終スコアにカウントしないことを示す。

Format

単一の浮動小数点数。小数点はオプション。

LMS Behavior
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例:LMSSetValue("cmi.interactions.0.weighting", "0.66")。Error Code 205、401。
cmi.interactions.n.student_response
任意 CMIFeedback Write Only
対応 API: LMSSetValue()
Definition

学習者の実際の応答。correct_responses.n.pattern と比較できる。

Format

correct_responses.n.pattern と同じ形式(cmi.interactions.n.type に応じる)。

LMS Behavior
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例:LMSSetValue("cmi.interactions.0.student_response", "f")。Error Code 205、401。
cmi.interactions.n.result
任意 CMIVocabulary (Result) Write Only
対応 API: LMSSetValue()
Definition

システムが応答をどう判定したか。

Format

定義済み語彙のいずれか:

  • "correct"
  • "wrong"
  • "unanticipated"
  • "neutral"
  • "x.x"CMIDecimal
LMS Behavior
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例:LMSSetValue("cmi.interactions.0.result", "correct")。Error Code 205、401。
cmi.interactions.n.latency
任意 CMITimespan Write Only
対応 API: LMSSetValue()
Definition

刺激の提示から測定可能な応答の完了までの時間。

Format

HHHH:MM:SS.SS。時は最小 2・最大 4 桁、分は 2 桁、秒は 2 桁+オプション小数点 1〜2 桁。

LMS Behavior
  • LMSGetValue(): 書き込み専用。404、401。
  • LMSSetValue(): 例:LMSSetValue("cmi.interactions.0.latency", "00:20:00")。Error Code 205、401。

3.4.5 データ型と制御語彙

AICC CMI Data Model4 の各要素には、データ型の定義が存在する。以下では、データモデル要素に指定された各データ型の詳細を示す。これらの定義はさらに、API およびデータモデルがどのように実装されなければならないかを規定する。

各データ型の定義は次のとおり。すべて "CMI" で始まる名前を持ち、AICC CMI Data Model4 に固有の型であることを明示している。

データ型 説明
CMIBlank

空文字列 ("")。

CMIBoolean

2 語の語彙。"true" または "false"

CMIDecimal

小数点を含み得る数値。マイナス符号なしなら正の数とみなす。例:"2""2.2""-2.2"

CMIFeedback

インタラクションにおける学習者の応答を構造化して記述する。構造と内容はインタラクションのタイプに依存する:

true-false:単一文字 "0""1""t""f" のいずれか。

choice:カンマ区切りで 1 つ以上の単一文字(0–9a–z)。すべての文字を選んだ場合に正解とみなすなら、リスト全体を中括弧 { } で囲む。

fill-in:最大 255 文字の英数字。最初の文字以降のスペースは有意。

numericCMIDecimal

likert:単一文字(0–9a–z)。

matching:識別子のペアを 1 つ以上。各識別子は単一の英数字文字。ペアはピリオドで区切り、ペア間はカンマで区切る。すべて正解で正答とみなすなら全体を { } で囲む。

performance:255 文字以下の英数字文字列。

sequencing:カンマ区切りの単一文字列。文字の順序が正誤を決める。

CMIIdentifier

空白や非印字文字を含まない英数字グループ。最大 255 文字。

CMIInteger

0 から 65536 までの整数。

CMISInteger

−32768 から +32768 までの符号付き整数。

CMIString255

最大 255 文字の ASCII 文字列。

CMIString4096

最大 4096 文字の ASCII 文字列。

CMITime

24 時間制の時刻:HH:MM:SS.SS。時・分はちょうど 2 桁、秒は 2 桁+オプションで小数点と 1〜2 桁。

CMITimespan

時間長:HHHH:MM:SS.SS。時は最小 2・最大 4 桁、分はちょうど 2 桁、秒は 2 桁+オプションで小数点と 1〜2 桁。

CMIVocabulary

スキーマ内の特定コンテキストに、特定の語彙を関連付けるために使用する。語彙は完全一致でなければならない。略語や単一文字は API 通信で使用してはならない。語彙の一覧は次表を参照。

データ型に加えて、いくつかのデータモデル要素は取り得る値の語彙が限定されている。次表に、要素ごとの語彙タイプと値を示す(AICC CMI001 Guidelines for Interoperability4 による)。

語彙タイプ 語彙値
Mode
cmi.core.lesson_mode

"normal""review""browse"

Status
cmi.core.lesson_status
cmi.objectives.n.status

"passed""completed""failed""incomplete""browsed""not attempted"

Exit
cmi.core.exit

"time-out""suspend""logout"""(空文字列)

Credit
cmi.core.credit

"credit""no-credit"

Entry
cmi.core.entry

"ab-initio""resume"""(空文字列)

Interaction
cmi.interactions.n.type

"true-false""choice""fill-in""matching""performance""likert""sequencing""numeric"

Result
cmi.interactions.n.result

"correct""wrong""unanticipated""neutral"X.XCMIDecimal

Time Limit Action
cmi.student_data.time_limit_action

"exit,message""exit,no message""continue,message""continue,no message"

SECTION 3.5Run-Time Environment 動作

以下の図は、LMS と Sharable Content Object の間で起こりうる run-time 通信シナリオの一例を示す。LMS と SCO が示しうる典型的な run-time 動作を表したもので、必須の実装ではなくあくまで一例である。

Learning Management System Sharable Content Object (SCO) 1. 起動する SCO の決定: ・ ユーザーが選択 ・ アダプティブ方式(前提条件)による自動決定 ・ シーケンシャル順 content package で定義された Content Structure の情報に基づいて決定する。 起動する SCO がなければ、finish または exit。 2. SCO の cmi.core.lesson_mode   決定し初期化する。 a. LMS はユーザーが選択可能なモードを   サポートしているか? b. lesson_mode="normal" かつ credit="no-credit"   なら lesson_mode を "browse" に変更。 3. SCO の cmi.core.entry を決定・初期化する。 lesson_status="browsed" or "not attempted" なら entry="ab-initio"、それ以外は "resume" に設定。 4. SCO を起動 Launch 4. SCO からの API 呼び出しに応答 LMSInitialize("") LMSGetValue(element) LMSSetValue(element, value) LMSGetLastError() LMSGetErrorString(errorCode) LMSGetDiagnostic(errorCode) LMSCommit("") LMSFinish("") API と Data Model 5. SCO の content structure に mastery score  が定義されている場合、LMS は   cmi.core.score.raw と mastery score を比較し、   lesson_status を "passed" / "failed" に変更可。  mastery score が未定義の場合、LMS は SCO が  設定した lesson_status を上書きできない。   credit="no-credit" なら、LMS は lesson_status を  変更してはならない。ただし SCO の   lesson_mode="browse" の場合に限り、LMS は   lesson_status="browsed" に設定してよい。 1. API Adapter オブジェクトを探索 2. API.LMSInitialize("") を呼び出し 3. SCO 固有の実装動作 (すべて任意) 3a. API.LMSGetValue("cmi.launch_data")   を呼び出し(SCO が利用する場合) 3b. API.LMSGetValue("cmi.core.entry")   を呼び出し。entry が "resume" なら   lesson_location, suspend_data を取得し   SCO 内の適切な位置から再開 3c. API.LMSGetValue   ("cmi.core.lesson_mode") を呼び出し、   モードに応じた動作を行う 3e. API.LMSSetValue を呼び出し、   必要に応じて任意情報を記録   (スコア、状態、目標、インタラクション   など) 3f. API.LMSCommit("") を呼び出し 学習者と SCO のインタラクション 4. API.LMSFinish("") を呼び出し ※ 終了後、LMS は次の SCO を決定するために 1. に戻る
図 3.5: LMS と SCO の間で起こりうる典型的な run-time 通信シナリオ

APPENDIX A略語一覧

略語 原語
ADLAdvanced Distributed Learning
AICCAviation Industry CBT Committee
APIApplication Program Interface
ARIADNEAlliance of Remote Instructional Authoring & Distribution Networks for Europe
ASCIIAmerican Standard Code for Information Interchange
AUAssignable Unit
AWTAbstract Window Toolkit
CBIComputer-Based Instruction
CBTComputer-Based Training
CDATACharacter Data
CMIComputer Managed Instructions
COTSCommercial Off-The-Shelf
CSFContent Structure Format
DCDublin Core
DoDDepartment of Defense
DOLDepartment of Labor
DTDDocument Type Definition
HTMLHyperText Markup Language
HTTPHypertext Transfer Protocol
IDAInstitute for Defense Analyses
IEEEInstitute of Electrical and Electronics Engineers
ISOInternational Organization for Standardization
ITSIntelligent Tutoring Systems
LMSLearning Management System
LOMLearning Objects Metadata
LTSCLearning Technology Standards Committee
MIMEMultipurpose Internet Mail Extensions
NGBNational Guard Bureau
OSTPOffice of Science and Technology Policy
PCDATAParsable Character Data
SCOSharable Content Object
SCORMSharable Content Object Reference Model
URIUniversal Resource Identifier
URLUniversal Resource Locator
W3CWorld Wide Web Consortium
WWWWorld Wide Web
XMLeXtensible Markup Language

APPENDIX B参考文献

  1. Aviation Industry CBT (Computer-Based Training) Committee. http://www.aicc.org/
  2. Institute of Electrical and Electronics Engineers (IEEE) Learning Technology Standards Committee (LTSC). http://ltsc.ieee.org/
  3. IMS Global Learning Consortium, Inc. http://www.imsglobal.org/
  4. AICC/CMI CMI001 Guidelines for Interoperability Version 3.4. October 23, 2000. AICC Course Structure Format、AICC CMI Data Model を含む。http://www.aicc.org/
  5. ADL Co-Laboratories. http://www.adlnet.org/
  6. Institute for Defense Analyses (IDA). http://www.ida.org/
  7. Executive Order 13111: Using Technology To Improve Training Opportunities for Federal Government Employees.
  8. Gettinger, M. (1984) "Individual differences in time needed for learning: A review of the literature." Educational Psychologist, 19, 15-29.
  9. Graesser, A. C., & Person, N. K. (1994). "Question asking during tutoring." American Educational Research Journal, 31, 104-137.
  10. Bloom, B.S. (1984). "The 2 sigma problem: The search for methods of group instruction as effective as one-to-one tutoring." Educational Researcher, 13, 4-16.
  11. Fletcher, J. D. (2001) "Evidence for Learning from Technology-Assisted Instruction." In H. F. O'Neil Jr. and R. Perez (Eds.) Technology Applications in Education: A Learning View. Hillsdale, NJ: Lawrence Erlbaum Associates.
  12. Alliance of Remote Instructional Authoring and Distribution Networks for Europe (ARIADNE). http://www.ariadne-eu.org/
  13. Gibbons, A.S. & Fairweather, P.G. "Computer-based Instruction." (2000) In, S. Tobias and J.D. Fletcher (Eds.), Training and Retraining: A Handbook for Business, Industry, Government, and the Military. New York: Macmillan Gale Group.
  14. Suppes, P. (1964) "Modern learning theory and the elementary-school curriculum." American Educational Research Journal, 1, 79-93.
  15. Carbonell, J. R. (1970) "AI in CAI: An Artificial Intelligence Approach to Computer-Assisted Instruction." IEEE Transactions on Man-Machine Systems, Vol. 11, pp. 190-202.
  16. Sleeman, D, & Brown, J. S. (Eds.) (1982) Intelligent Tutoring Systems. New York, NY: Academic Press.
  17. Woolf, B.P., & Regian, J.W. (2000). "Knowledge-based training systems and the engineering of instruction." In S. Tobias and J. D. Fletcher (Eds.), Training and retraining: A handbook for business, industry, government, and the military (339-356). New York: Macmillan Reference.
  18. Gibbons, A.S. & Fairweather, P.G. (1998) Computer-based Instruction: Design and Development. Englewood-Cliffs, NJ: Educational Technology Publications.
  19. Gibbons, A.S. & Fairweather, P.G. (2000) op. cit.
  20. IMS Content Packaging Specification Version 1.1.2. http://www.imsglobal.org/
  21. IEEE Information Technology — Learning Technology — Learning Objects Metadata LOM: Working Draft 6.1 (2001-04-18). IMS Learning Resource Meta-data Specification Version 1.2 から参照。http://ltsc.ieee.org/
  22. IMS Learning Resource Meta-data Specification Version 1.2. Information Model、XML Binding、Best Practice and Implementation Guide を含む。http://www.imsglobal.org/
  23. ISO 639:言語表記の国際標準。Version 1 は 2 文字言語コード(例:'en'=英語、'fr'=フランス語、'nl'=オランダ語)を使用。これらは IETF の RFC 1766: "Tags for the identification of languages" の言語タグレジストリの基礎となっている。http://www.iso.ch/
  24. ISO 3166:国名表記の国際標準(例:'BE'=ベルギー、'CA'=カナダ、'FR'=フランス、'GB'=英国、'US'=米国 など)。http://www.iso.ch/
  25. vCard:個人・組織の連絡先情報の表現方法を定める標準。http://www.imc.org/pdi/
  26. ISO 8601:日付と時刻の数値表現を規定する国際標準。http://www.iso.ch/
  27. World Wide Web Consortium (W3C). http://www.w3c.org/
    URL、URI、XML 1.0、DOM 仕様などを含む。
  28. Dublin Core Metadata Initiative. http://www.dublincore.org/

APPENDIX C改訂履歴

SCORM Version リリース日 変更内容の説明
1.1 2001 年 1 月 16 日

Run-Time Environment セクションの各サブセクション(Launch、API、Data Model)に詳細を追加。

Launch の変更:SCO 起動の記述に詳細を追加。

API の変更

  • LMSInitialize("")LMSFinish("")LMSCommit("") はすべて空文字列をパラメータに取るよう変更。
  • LMSInitialize("")LMSFinish("")LMSCommit("")LMSSetValue()CMIBoolean"true" または "false")に変換可能な文字列を返すよう変更。
  • 各 API 呼び出しの説明をより詳細化。
  • API エラーコード使用法のセクションを追加。エラーコードを使用する場面を定義。新たなエラーコードを追加。
  • findAPI() アルゴリズムを変更し、兄弟フレームを探索しないようにした。

Data Model の変更

  • すべてのデータモデル要素を詳細に記述する新しい表を追加。
  • 要素の変更は表 C-1a を参照。
  • データ型の変更は表 C-1b を参照。
  • 語彙の変更は表 C-1c を参照。
1.2 2001 年 10 月 1 日

図 3.1a を変更し、SCO と Asset の双方が起動可能であることを示すようにした。

Launch セクションに詳細を追加し、SCO 以外の起動も記述。

SCO–LMS 通信 API 状態遷移図と説明を追加。

API エラーコード使用法の表に詳細を追加し、特定のエラーコードを使用すべき場面を示した。

以下のデータモデル要素に明確化を追加:

  • cmi.core.lesson_status
  • cmi.core.entry
  • cmi.core.exit
  • cmi.core.session_time

スコア要素(cmi.core.score.rawcmi.core.score.mincmi.core.score.maxcmi.objectives.n.score.rawcmi.objectives.n.score.mincmi.objectives.n.score.max)について、より具体的な定義を追加:「0〜100 で正規化された値でなければならない」。

表のフォーマットを全般的に整理。

3.5 Run-Time Environment Behavior セクションを追加。

文法的な整理を全般的に実施。

表 C-1a: Run-Time Environment Data Model 要素の変更

Data Model 要素 SCORM 1.0 からの変更
cmi.core._children

データ型を CMIString256 から CMIString255 に変更

cmi.core.student_id

変更なし

cmi.core.student_name

データ型を CMIString256 から CMIString255 に変更

cmi.core.lesson_location

データ型を CMIString256 から CMIString255 に変更

cmi.core.credit

変更なし

cmi.core.lesson_status

変更なし

cmi.core.entry

変更なし

cmi.core.score._children

データ型を CMIString256 から CMIString255 に変更

cmi.core.score.raw / min / max

変更なし

cmi.core.total_time

変更なし

cmi.core.lesson_mode / exit / session_time

変更なし

cmi.suspend_data / launch_data

変更なし

cmi.comments

SCO/学習者からのコメントを保持する要素となった。SCO は本要素に対して LMSGetValue() および LMSSetValue() を呼び出せるようになった。

cmi.comments_from_lms

新規追加。LMS や講師からのコメントを SCO で利用できる場所として追加された。

cmi.objectives._count

変更なし

cmi.objectives._children

データ型を CMIString256 から CMIString255 に変更

cmi.objectives.n.id

変更なし

cmi.objectives.n.score._children

scoresscore に名称変更。データ型を CMIString256 から CMIString255 に変更。

cmi.objectives.n.score._count

削除。objective に対する複数 score のリストサポートを廃止。

cmi.objectives.n.score.raw / min / max

score のリストサポートを廃止。各 objective は 1 つの score のみを持つ。scoresscore に名称変更。

cmi.objectives.n.status

score のリストサポートを廃止。scoresscore に名称変更。

cmi.objectives.n.mastery_time

削除

cmi.evaluation.* 系列

すべて削除(course_idcommentsinteractionsobjectives_statuspathsperformancelesson_iddate など)

cmi.interactions._children / _count

追加

cmi.interactions.n.id

データ型を CMIString256 から CMIString255 に変更

cmi.interactions.n.objectives._count

追加

cmi.interactions.n.objectives.n.id

データ型を CMIString256 から CMIString255 に変更

cmi.interactions.n.time / type / weighting / student_response / result / latency

変更なし

cmi.interactions.n.correct_responses._count

追加

cmi.interactions.n.correct_responses.n.pattern

変更なし

cmi.student_data._children

データ型を CMIString256 から CMIString255 に変更

cmi.student_data.attempt_number

削除

cmi.student_data.mastery_score / max_time_allowed / time_limit_action

変更なし

cmi.student_data.attempt_records.* 系列

すべて削除

cmi.student_data.tries.* 系列

すべて削除

cmi.student_demographics.* 系列

すべて削除(cityclasscompanycountryexperiencefamiliar_nameinstructor_nametitlenative_languagestatestreet_addresstelephoneyears_experience など)

cmi.student_preference._children

データ型を CMIString256 から CMIString255 に変更

cmi.student_preference.audio

変更なし

cmi.student_preference.language

データ型を CMIString256 から CMIString255 に変更

cmi.student_preference.lesson_type

削除

cmi.student_preference.speed / text

変更なし

cmi.student_preference.text_color / text_location / text_size / video / windows.n

すべて削除

cmi.paths.* 系列

すべて削除(location_idtimestatuswhy_lefttime_in_element

表 C-1b: Run-Time Environment データ型の変更

データ型 変更
CMIDate

削除

CMIBoolean

すべて小文字("true""false")に変更

CMIFeedback

CMIFeedback データ型の使用法を定義する情報を追加

CMILocale

削除

CMISIdentifier

削除

CMIString255

CMIString255 に変更(最大 255 文字)

CMITime

小数点以下の桁数を最大 2 桁までに変更(例:34.43

CMITimespan

小数点以下の桁数を最大 2 桁までに変更(例:34.43

表 C-1c: Run-Time Environment CMIVocabulary の変更

語彙タイプ 変更
Exit

""(空文字列)の語彙を追加

Why Left

削除

Credit

"no credit""no-credit" に変更

Entry

""(空文字列)の語彙を追加

Time Limit Action

すべての語彙選択肢を変更

Interaction

"multiple choice""choice" に変更
"fill in the blank""fill-in" に変更
"simple performance""performance" に変更