SCORM is certainly a challenge. I cannot help you with implementation specifics since even Rustici Software, the industry leader and publisher of scorm.com, estimates that
[...t]he time it takes to become SCORM conformant is generally measured in “developer years”.
To get you started, then, I'll attempt to answer your first question. There are better resources than StackOverflow for implementation specifics. I've linked some at the bottom of the post.
What features of the LMS make it SCORM compliant?
"SCORM compliance" is a misnomer used colloquially to indicate that an LMS supports creating, playing, or tracking SCORM content. In reality, there are levels of implementation that each LMS may find acceptable for its target demographic.
The official measurement of compliance is SCORM Certification through the ADL Initiative, the government program responsible for the SCORM standard. There are three testable levels of testing typically available (note that testing is not available at the time of posting):
SCORM® Conformance – the only criteria for claiming SCORM® conformance (to a specific version of SCORM®, i.e. SCORM® version 1.2) is to pass the corresponding test within the ADL Conformance Test Suite of the corresponding SCORM® version. The Conformance Test Suite is a free download from ADLnet.gov. This test is done on the honor system and requires no ADL Initiative involvement.
SCORM® Adopter – the next level up from being SCORM® conformance is for a product to be a SCORM® adopter. A product must be SCORM® conformant before it can be considered to be a SCORM® adopter. The logs that result from a passing test in the ADL Conformance Test Suite are submitted to ADL Initiative (see the SCORM® Adopters page for more information) and if found to be correct, the product is labeled as a SCORM® adopter in the SCORM® Adopter Product List (for a particular version of SCORM®).
SCORM® Certification – The final level of SCORM® conformance is SCORM® certification. Certified products are those products that have been tested by independent ADL Certification Testing Centers to meet the requirements as described by the corresponding version of the SCORM® Conformance requirements document and verified by the Conformance Test Suite (see the SCORM® Certification page for more information). Once this process is completed, the product is SCORM® Certified and is added to the SCORM® Certified Product List. The product is also then compliant to SCORM® Certification.
More casually, an LMS claiming to be "SCORM compliant" likely meets the following criteria:
1. Supports the SCORM JavaScript API
A SCORM package will attempt to locate the LMS-provided API at startup by following a well-established discovery algorithm. Essentially, it will look for an object called API
(SCORM 1.1, SCORM 1.2) or API_1484_11
(SCORM 2004) starting at its parent window
and searching upward until a match is found or the allowed number of navigations is exceeded.
This API object should implement eight standard functions and the data model object. Consult the full runtime reference for more information.
SCORM 1.1, 1.2 |
SCORM 2004 |
Parameter(s) |
Returns |
Description |
LMSInitialize |
Initialize |
Empty string |
boolean |
Initializes runtime and assumes control from the LMS |
LMSCommit |
Commit |
Empty string |
boolean |
Requests that the LMS persist the current data model |
LMSGetValue |
GetValue |
CMIElement |
string |
Gets the value of the specified element from the current data model |
LMSSetValue |
SetValue |
CMIElement, any |
string |
Sets the value of the specified element in the current data model |
LMSGetLastError |
GetLastError |
|
CMIErrorCode |
Gets the result of the last call to one of these methods |
LMSGetErrorString |
GetErrorString |
CMIErrorCode |
string |
Gets the string equivalent of the specified error code |
LMSGetDiagnostic |
GetDiagnostic |
CMIErrorCode |
string |
Gets additional information about the specific error that caused the specified error code |
LMSFinish |
Terminate |
Empty string |
bool |
Exits runtime and returns control to the LMS |
2. Persists runtime data across sessions
SCORM packages are usually stateless, but can be returned to a state if provided with a previously committed data model. There are different ways to implement states in SCORM packages, but common in-runtime approaches include:
- Storing a token, path, or state in
cmi.suspend_data
before exiting, then using that information to resume to a specific location upon reentering the package
- Storing answered questions/user actions in
cmi.interactions
between sessions
Additionally, some packages may communicate to external resources or may use browser features like cookies or the Web Storage API to persist data. This is less desirable from the perspective of the LMS because it is harder to account for when aggregating and persisting data in the LMS.
Generally, when a package calls LMSCommit
, it is sufficient to store the current data model for the current learner/student. This may be accomplished with any common persistence layer (Redis, Web Storage API, SQL, etc) so long as the information can be retrieved and made available when the learner/student wishes to continue interacting with the SCORM package.
3. Provides reports and tracking information about sessions
The goal of an LMS is to facilitate and enhance learning and one of the ways an LMS may accomplish this goal is by allowing for reporting on the actions its users take, the scores they achieve, and the trends they follow.
Reporting goals will vary based on the nature of the content in your SCORM packages and the specific learning objectives your LMS aims to provide for your users.
So where next?