SCORM 1.2

This article or chapter is incomplete and its contents need further attention. Some information may be missing or may be wrong, spelling and grammar may have to be improved, use your judgment!

## Contents

* 1 Definition
* 2 Overview
* 3 The Run-Time Environment (RTE)
* 4 The Content Aggregation Model and Structure
* 4.1 Overview
* 4.2 SCORM Content Packs
* 4.3 The resource element and asset vs. SCO resource types
* 5 Sequencing and navigation
* 5.1 Items
* 5.2 Prerequisite scripting within the prerequisites element
* 5.3 Time elements
* 5.4 Mastery score with the adlcp:masteryscore element
* 6 A simple example
* 7 Trouble
* 7.1 XML errors
* 7.2 Using SCORM 1.2. with Moodle 2.x
* 8 Software
* 9 Links
* 10 References

## Definition[edit | edit source]

SCORM 1.2 is a so-called profile that defines a Web-based learning "Content Aggregation Model" and "Run-Time Environment" for learning objects.

In more understandable words, SCORM 1.2. is s standard that defines how to author e-learning contents.

See also:

* Learning object for a conceptual overview
* SCORM for an overview of ADL's Sharable Content Object Reference Models (SCORM)
* Standard for an overview of various learning objects-related standards

It is not obvious to find somewhat SCORM-conformant LMSs besides the list of SCORM certified products. Many open source system claim to be SCORM conformant, but DSchneider is not sure of this. I don't have time or even the will to test these systems, but I noticed that some choked on simple examples found on the web ...

## Overview[edit | edit source]

As an extention of IMS Content Packaging, SCORM 1.2 defines an e-learning standard that provides functionalities for contents (and user interactions upon) to communicate with a LMS.

With a simple picture by William Horton grabbed from a Moodle forum:

What needs to be communicated ?, by W. Horton, reproduced without special permission

A SCORM 1.2. compliant system must adopt the following specifications (which in turn adopt other specifications and standards):

* The Run-Time Environment (RTE) specifies how content should behave once it has been launched by the LMS. Includes: API, API Instance, Launch, Session methods, Data Transfer Methods, Support Methods, Temporal Model, Run-Time Data Model.
* The Content Aggregation Model (CAM) how content can be packaged so that it can be imported into an LMS. CAM deals with assembling, labeling and packaging of learning content, i.e. it is an extension of IMS Content Packaging.

In practical terms you need:

* A SCORM-compliant Learning management system (LMS), that can track the users' progress through the content.
* As in simple default IMS Content Packaging: Assets, i.e. any sort of web media such as HTML files, flash, images, videos, etc.
* Shareable Content Object (SCO), a SCORM-specific collection of resources that defined tracable learning squences. SCO's can be launched and tracked by the LMS. In order for SCO to works you have to do some ugly JavaScript (ECMAScript) coding (or find a generator).
* Content Aggregation, This refers the overal organization of learning sequences that make use of related simple assets and SCOs. This is not too difficult with a tool such as the Reload Editor, unless you need strong content-LMS interaction.

## The Run-Time Environment (RTE)[edit | edit source]

The API

According to Rustici (2004), a SCORM conformant LMS is required to implement an API, i.e. a ECMAScript object named "API" accessible through the DOM and that implements eight JavaScript functions.

Functions for execution state

LMSInitialize()
LMSFinish()

Functions for data transfer

LMSGetValue()
LMSSetValue()
LMSCommit()

Functions for error handling

LMSGetLastError()
LMSGetErrorString()
LMSGetDiagnostic()

'All' communication between the content and the LMS is handled by this adapter.

For minimal SCORM conformance, the only thing that a piece of content needs to do is call LMSInitialize() when it starts and then call LMSFinish() when it exits. This is not as simple as it sounds, because a simple ECMAScript line doing "LMSINitialize()" will not do the job (see below).

The CMI Data Model

SCORM adopts the "cmi" data model from AICC. It consists of data model elements which the content can read from and write to using this interface. Here is an example from Rustici (2004):

cmi.core.lesson_location is the data element that describes the user's location in the content.

When the content begins (after it has called LMSInitialize();), it may want to make this call to find out where the user left off and return him to that point:

strLastLocation = objAPI.LMSGetValue("cmi.core.lesson_location");

The Data Model describes several kinds of data. The following table lists some of these data types plus associated JavaScript objects and some possible system messages displayed to the user.

* Mode (cmi.core.lesson_mode), e.g. 'normal', 'review', 'browse'.
* Status (cmi.core.lesson_status and cmi.objectives.n.status), e.g 'completed', 'failed', 'passed', 'incomplete', 'browsed', 'not attempted'.
* Exit (cmi.core.exit), e.g. 'time-out', 'suspend', 'logout'
* Credit (cmi.core.credit), e.g. 'credit', 'no-credit'
* Entry (cmi.core.entry), e.g. 'resume', 'ab-initio'
* Interaction (cmi.interactions.n.type), e.g. 'choice', 'true-false', 'fill-in', 'matching', "performance", "likert", "sequencing", "numeric"
* Result (cmi.interactions.n.result), e.g. 'wrong','unanticipated', 'neutral', X.X (CMIDecimal)
* Time Limit Action (cmi.student_data.time_limit_action) 'exit,no message', 'exit,message', 'continue,message', 'continue,no message'

Here are a few more data types, this time with a short explanation of the purpose ):

cmi.core.student_id | Unique alpha-numeric code / identifier that refers to a single user of the LMS system.

|

cmi.core.lesson_location | This corresponds to the SCO exit point passed to the LMS system the last time the student experienced the SCO. This provides one mechanism to let the student return to a SCO at the same place he left it earlier. In other words, this element can identify the student's exit point and that exit point can be used by the SCO as an entry point the next time the student runs the SCO.
cmi.core.score.raw | Indication of the performance of the student during his last attempt on the SCO. This score may be determined and calculated in any manner that makes sense to the SCO designer.
cmi.interactions.n.type | Indication of which category of interaction is recorded. The type of interaction determines how the interaction response should be interpreted, e.g. "true-false", "choice", "fill-in", etc.

Please read the 40 pages of definitions in the The SCORM Run-Time Environment manual for real information. The examples above are here to give a feeling of CMI Data Model's expressive power.

Minimal authoring for the SCORM RTE part

In order for a SCORM CP to work, an author must at least call LMSInitialize() when an item starts and then call LMSFinish() when it ends. Before doing this, the API adapter "must be found".

E.g. the resource could look like this:

<html xmlns:fo="http://www.w3.org/1999/XSL/Format">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="SCORM1_2Generic.js" type="text/javascript"
language="JavaScript"></script>
<title>William Blake's Songs of Innocence and Experience</title>
</head>

<frameset rows="100%,*"
onload="LMSInitialize()"
onunload="LMSFinish()"
onbeforeunload=" LMSFinish()">
<frame name="cg_stage" src="index.htm">
<frame src="dummypage.htm">
</frameset>
</html>

* The SCORM1_2Generic.js is a library that will try to find the "API" JavaScript object from the "mother HTML page" provided by the LMS when a call is made to LMSInitialize() etc.

* The body of this HTML will then make sure that LMSInitialize and LMSFinish are called when the user enters and exits the item. The content itself is simple (not other communication to/from the LMS). It simply loads an index page into a frame and then the user can do other contents.

Just finding a library like SCORM1_2Generic.js and that is compatible with all modern browsers seems to be a major headache. Here are a few resources that may help:

* Claude Ostyn's whitepaper from which you can copy code.
* Use a SCORM compatible editor like exe and rip of the necessary code if you need to hand code the RTE part of your hand-made contents.
* Forio Broadcast's How to Make Your Simulation SCORM Compliant paper. Includes downloadable sample code.

## The Content Aggregation Model and Structure[edit | edit source]

Acknowledgment: This section is mostly a summary of the The SCORM 1.2 Content Aggregation Model Manual.

### Overview[edit | edit source]

The CAM model includes three standards:

* IMS Content Packaging (CP) with 'extensions', in particular the item element in the organization section. More formally speaking: "SCORM packaging adheres strictly to the IMS Content Packaging Specification but provides additional explicit implementation guidance for packaging digital learning resources (Assets, Sharable Content Objects and Content Aggregations)." (The SCORM Content Aggregation Model:2-101)

* IEEE Learning Object Metadata Standard). SCORM adds the requirement to

* Sharable Content Objects (SCOs). These are special kinds of resources used in an IMS content package (CP). The structure of the resource part of the CP is exactly the same as in a "simple" IMS content pack. However SCO's do communicate with the LMS, while an 'asset is a simple content that is just "played".

It is important to understand that The IMS Content Packaging allows for communities to use their own namespaced elements throughout the XML manifest. This may lead to a lot of confusion. E.g. if a vendor claims to export contents to IMS Content Package or even some more focused component like IMS Learning Design, it does not mean that these contents then can be played by a minimal IMS CP compatible LMS. It will just happily ignore items that it can't understand. In turn, it also is allow to extend the SCORM extensions (but with the same caveat).

SCORM Content Aggregation with Assets and SCO, picture taken from a SCORM manual, reproduced without special permission.

According to the The SCORM Content Aggregation Model manual, "The purpose of content structure is to provide the content developer with the means to author collections of learning resources into a cohesive unit of instruction, apply structure and associate specific behaviors that can be uniformly reproduced across LMS environments. The content structure can be considered the map used to sequence/navigate through the learning resources defined in the content package. The content structure contains not only the structure of the learning resources, but also all behaviors to be applied to the learning experience."

### SCORM Content Packs[edit | edit source]

SCORM extends the simple IMS Content Pack default organization inclusion not only with SCOs, but also with a subset of additional vocabulary to define learning sequences and that are derived from the Aviation Industry Computer-Based Training Committee (AICC) Computer Managed Instruction.

Roughly, a SCORM Manifest looks like this:

<manifest identifier=Manifest" version="1.1"
xmlns="http://www.imsproject.org/xsd/imscp_rootv1p1p2"
xmlns:adlcp="http://www.adlnet.org/xsd/adl_cp_rootv1p1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.imsproject.org/xsd/imscp_rootv1p1p2
imscp_rootv1p1p2.xsd
http://www.imsproject.org/xsd/imsmd_rootv1p2
ims_md_rootv1p1.xsd
http://www.adlnet.org/xsd/adl_cp_rootv1p1
adl_cp_rootv1p1.xsd">

<metadata>
<schema>ADL SCORM</schema>
<schemaversion>1.2</schemaversion>
<imsmd:lom>
<imsmd:general>
<imsmd:title>
<imsmd:langstring xml:lang="en-US">Example Manifest</imsmd:langstring>
</imsmd:title>
</imsmd:general>
</imsmd:lom>
</metadata>

<organizations default="TOC1">
<organization identifier="TOC1" structure="hierarchical">
<title>default</title>
<item identifier="ITEM1" identifierref="RESOURCE1" isvisible="true">
<title>Lesson 1</title>
<item identifier="ITEM2" identifierref="RESOURCE2" isvisible="true">
<title>Introduction 1</title>
</item>
<item identifier="ITEM3" identifierref="RESOURCE3" isvisible="true">
<title>Content 1</title>
</item>
<item identifier="ITEM4" identifierref="RESOURCE4" isvisible="true">
<title>Summary 1</title>
</item>
</item>
<item identifier="ITEM5" identifierref="RESOURCE5" isvisible="false">
....
</organization>
</organizations>

<resources>
<resource identifier="RESOURCE1"
<file href="lesson1.htm"/>
</resource>
<resource identifier="RESOURCE2"
<file href="intro1.htm"/>
</resource>
...
</resources>

</manifest>

### The resource element and asset vs. SCO resource types[edit | edit source]

The resource element can contain the following components:

<metadata>
<file>
<dependency>  (this is a SCORM extension of IMS CP)

SCORM defines a special attribute to distinguish between SCOs and assets as shown in the following examples:

A SCO resource:

<resource identifier="R_A2" type="webcontent" adlcp:scormtype='sco' href="sco1.html">
<file href="sco1.html"/>
<file href="sco2.html"/>
<file href="sco3.html"/>
</resource>

An asset resource:

<resource identifier="R_A5" type="webcontent" adlcp:scormtype='asset' href="pics\distress_sigs_add.jpg">
<file href="pics\distress_sigs_add.jpg"/>
</resource>

It is important the the href attribute of the resource element points to the main resource that has to played. If the resource and the associated element is supposed to be SCO, then it's within this file that one makes the appropriate RTE calls.

## Sequencing and navigation[edit | edit source]

Acknowledgment: This section is mostly a summary of the The SCORM 1.2 Content Aggregation Model Manual.

Sequencing and navigation behavior refers to the rules that an LMS must follow in order to present a specific learning experience. These rules encoded in the organization section of  Content Packaging. The main difference with the default IMS Content Pack lies in the definition of the item element. An item is a pedagogical sequence or sub-sequence.

### Items[edit | edit source]

Formally speaking, an <item> element describes a node within the organization structure. These item elements also can be nested.

IMS Content Packaging elements overview

An item' can contain the following elements:

<title>
<item>
<metadata>

A minimal item must look like this:

<item identifier="ITEM3">
<title>Content 1</title>
</item>

More typically, an item refers to a resource using the identifierref attribute. The resource is either a simple asset or a SCO.

<item identifier="ITEM3" identifierref="RESOURCE3" isvisible="true">
<title>Content 1</title>
</item>

SCORM extensions

SCORM defines the following five AICC/CMI inspired extensions for the item element: Prerequisites, Max time allowed, Time Limit Action, Data from LMS, Mastery Score:

<adlcp:prerequisites>
<adlcp:maxtimeallowed>
<adlcp:timelimitaction>
<adlcp:datafromlms>
<adlcp:masteryscore>

In technical terms it means that a SCORM editor should provide support for generating these elements, or that you should learn how to do this semi-manually with a tool like the Reload Editor.

### Prerequisite scripting within the prerequisites element[edit | edit source]

This element defines what other parts of the learning content must have been completed before starting the <item>. This allows an LMS to compute multiple paths through the learning content.

An item can contain SCORM extensions that define operators of a prerequisite scripting language called aicc_script. These are based on the AICC CMI001 Guidelines for Interoperability.

An example: The following means that in order to access item I3, the learner must pass items I1 and I2.

<item identifier='I0'>
<item identifier='I1' identifierref='R_I1'>
<item identifier='I2' identifierref='R_I2'>
<item identifier='I3' identifierref='R_I3'>
<adlcp:prerequisites type='aicc_script'> I1&I2</adlcp:prerequisites>
</item>
</item>

Operators

(see page 2-109 of the manual)

### Time elements[edit | edit source]

The following elements can define time allowed for a sequence (item) and what happens if the student doesn't respect this. The item element must be of SCO type !

<adlcp:maxtimeallowed>
<adlcp:timelimitaction>

The following piece of code states that the learner has 30 minutes for an item identified as "ITEM3".

<item identifier="ITEM3" identifierref="RESOURCE3" isvisible="true">
<title>Content 1</title>
<adlcp:maxtimeallowed>00:30:00</adlcp:maxtimeallowed>
</item>

The following piece defines that the LMS must terminate the sequence without message.

<item identifier="ITEM3" identifierref="RESOURCE3" isvisible="true">
<title>Content 1</title>
<adlcp:timelimitaction>exit,no message</adlcp:timelimitaction>
</item>

### Mastery score with the adlcp:masteryscore element[edit | edit source]

This element establishes the passing score for the item. This mastery score should be a value between 0 and 100.

Example:

<item identifier="ITEM3" identifierref="RESOURCE3" isvisible="true">
<title>Content 1</title>
<adlcp:masteryscore>90</adlcp:masteryscore>
</item>

## A simple example[edit | edit source]

(ToDo)

## Trouble[edit | edit source]

### XML errors[edit | edit source]

The package may include XML errors. You can try to fix the package, but this requires some XML and XML Schema skills.

The best path, probably is to:

* Download the Reload Editor from the Reload Tools page
* open the `imsmanifest.xml` file
* Click on the validate button and repair errors.

Alternatively, you also could buy a good XML-Editor.

The XML namespace problem

If the SCORM package doesn't validate it can be due to some well-spread misunderstanding of the XML namespace that probably was triggered as a workaround of bugs in a well-known XML editor at the time. Official SCORM 1.2 XML Schema files (XSD) include deliberate mistakes in order to fix software bugs (yes, that is a kind of ultimate sloppyness...). In particular, you should: You can try to fix the package, but, again, this requires some XML and XML Schema skills.

* remove all `xmlns:xml...` declarations in all the *.xsd files (probably optional)
* In file `imscp_rootv1p1p2.xsd`, replace:

<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="ims_xml.xsd"/>

<xsd:import namespace="http://www.w3.org/XML/1998/namespace" schemaLocation="http://www.w3.org/2001/03/xml.xsd"/>

* Alternatively, you also could try substituting the contents of `ims_xml.xsd` by the contents of http://www.w3.org/2001/03/xml.xsd (not tested)

### Using SCORM 1.2. with Moodle 2.x[edit | edit source]

Moodle > 2.0 handles SCORM 1.2 packages quite nicely. However, just to be clear: as of April 2014 it neither supports SCORM 2004 nor the more recent TLA/Experience API (Tincan).

Nevertheless SCORM 1.2 packages can fail for various reasons, for example:

* You got something else in the zip file (Open the zip and check if there are files called `imsmanifest.xml` and `adlcp_rootv1p2.xsd `). Check if the package is in some subdirectory and rezip the one.
* Your content package is badly made. Try to open it with Reload Editor and check ! See also above. Typically, the `imsmanifest.xml` may have syntax errors. The file name itself can be misspelled (e.g. capital letters), some XML tags are used but left empty (See also the section above!). In your authoring tool, make sure to fill in all meta information. E.g. this can fix problems with Articulate products....
* There might be a little Moodle bug that affects some of the playing. Upgrade to Moodle 2.3 or better.
* JavaScript is disabled or you got a really old browser, e.g. IE9
* Instead of just uploading the zipped package, you uploaded the zip file first and then unzipped it.. In Moodle 2.x the package must remain zipped.
* Your Moodle is badly installed, e.g. the zip library is missing.

Read also:

* SCORM FAQ (at Moodle)
* SCORM doesn’t work in Moodle?
* Managing SCORM content in Moodle 2 (if you plan to use packages in a non-standard way, e.g. from other file locations).

## Software[edit | edit source]

See Database of Tools, Comments, and Ratings (adlCommmunity).

Free Editors

* Reload Editor can help to assemble contents (but won't help you to define SCOs)
* exe (tested, recommended,. Make sure to upgrade frequently!)
* Xerte, Xerte is an xml editor and run time engine that makes it easy to create and deploy interactive learning objects that are highly accessible and SCORM compliant.

* MOS Solo is a Windows application to create SCORM compliant learning courses, presentations, assessments and surveys. (Maybe the interface only french ?). Free closed-source, WinXP (requires email registration)

* DocBook2SCORM Word to Open Office to DocBook to Scorm filter (not tested)

Free server-based editors

* Docendo (install within a Tomcat or other Java server)

Free addons to commercial tools

* For the Dreamweaver HTML editor, you can get the free e-Learning Course Development Kit extension.

* Learning essentials for Microsoft Office (includes SCORM tools ?. cf. also THESIS

Commercial Editors (none tested)

* ReadyGo webcourse builder: allows the creation of html/javascript interactive SCORM contents.

* E-Doceo E-learning maker. This tool allows you to build interactive contents in Shockwave or Flash that can be exported as SCORM packages.

* Lectora (Price ?)

* Advanced SCORM Editor (DeltaLearn) Multiplatform. Price is $59. See also the Freshmeat entry

* Udutu Through the web editor. Free authoring, $1/published screen.

* Thesis. A suite of ELearning tools which takes advantage of the SCORM 1.2 and 2004 standards and are integrated with Microsoft Office.

LMS that allow SCORM 1.2 authoring and export

* Some LMS can export Scorm 1.2 (need a few example here).

Converters

* DocBook to SCORM Converter. Free tool for DocBook

## Links[edit | edit source]

Consortia

* IMS Global Learning Consortium
* ADL (SCORM profiles)
* AICC Aviation Industry CBT Committee
* IEEE Learning Technology Standards Committee (LTSC)

Tutorials, example code

* RUSTICI Software (tutorials, scorm 2004 reference poster, free tool)

## References[edit | edit source]

Specifications and "official" overviews

* AICC/CMI CMI001 Guidelines for Interoperability Version 3.4. October 23, 2000. Includes: AICC Course Structure Format, AICC CMI Data Model. PDF. Available at: http://www.aicc.org/. (try the the download index for all publications)

* Advanced Distributed Learning (ADL), The SCORM Content Aggregation Model, Sharable Content Object Reference Model (SCORM)® Version 1.2. Available at: http://www.adlnet.gov/ (you must find the zip file for the whole documentation suite somewhere).

Tutorials

* Claude Ostyn, Cooking up a SCORM, A SCORM 1.2 Content Cookbook for Developers, Version 1.2 - Draft 0.8, Learning Standards Strategist Click2learn, Inc. PDF. Really useful reading for those who plan to learn SCORM. Includes enough example code to get going too., retrieved 19:26, 21 December 2006 (MET)

* Forio Broadcast's How to Make Your Simulation SCORM Compliant paper. Includes downloadable sample code. Best short tutorial I found., retrieved 19:26, 21 December 2006 (MET)

* Docebo.org, Scorm tutorial and samples HTML. Includes both HTML and Flash example (including RTE code), retrieved 19:26, 21 December 2006 (MET)

* Reusable Learning, Scorm Primer, HTML, retrieved 19:26, 21 December 2006 (MET)