How to create SCORM teaching materials
2022.05.16
How to Create SCORM Educational Materials
This article provides examples of how to create teaching materials for learningBOX using SCORM 1.2.
Please note that some of the examples may not work outside of learningBOX (in such cases, a cautionary statement will be included).
Also, please note that this article has been verified with learningBOX 2.16.14, and older versions or future releases may not give identical results.
Click here for Table of Contents
What are SCORM materials in learningBOX?
Minimum SCORM materials [File Structure
Information that can be sent within the SCORM 1.2 specification
Unique extensions to learningBOX
Anti-patterns
What are SCORM teaching materials in learningBOX?
In learningBOX, SCORM 1.2 compliant teaching materials can be uploaded and used.
(*As of learningBOX 2.16.14, uploading SCORM archives (ZIP files) consisting of multiple SCOs is not supported. Also, please note that SCORM versions other than 1.2, such as SCORM 2004, are not supported.)
Minimum SCORM teaching materials [File Structure].
In learningBOX, if the startup file is index.html, the manifest file (imsmanifest.xml: a file showing the structure inside the ZIP file) is not necessary. Therefore, if only the index.html file is zipped, it can be used as SCORM material (however, almost all LMS require the imsmanifest.xml file; QuizGenerator, CardGenerator, etc. require the imsmanifest.xml file for compatibility). QuizGenerator, CardGenerator, etc. output imsmanifest.xml for compatibility).
Notes on creating a ZIP file
When compiling educational materials into a ZIP file, please select and compress the files as shown below.
As in the bad example, selecting a folder and compressing it may create an extra folder hierarchy and cause trouble.
Also, in the case of Mac, if you use the OS standard ZIP archive function, extra files will be saved, so unnecessary files will be mixed in the problem! Please compress with reference to "Be careful when compressing zip on Mac" etc.
Exploring the API
When the startup file (e.g. index.html) is loaded, the SCORM API is searched.
In SCORM 1.2, the name of the API is "API".
You can always find it by starting from the iframe or frame that contains the teaching material and working your way up the hierarchy.
In learningBOX 2.16 and later, the API is also provided in the preview screen of the teaching material, but the preview screen does not save the grades.
Code Example
The API is searched by onload, and the variable "API for teaching materials" is used to access the API.
If the API is found, API Found is displayed on the console; if not, API not Found is displayed on the console.
(Referenced by) gist URL
https://gist.github.com/ynishi2014/8d1d951966d12d49c1eee898b4bacc17
Execution example
When mounted on learningBOX, the SCORM API can be found, so the API found is displayed.
If you run it on a local drive, for example, the API cannot be found, so the message "API not found" is displayed.
LMSInitialize and LMSFinish
Once the API is found, LMSInitialize is executed.
Execute LMSFinish when the study is completed.
In QuizGenerator, LMSFinish is executed at the timing of displaying the grading results, but in most learning materials that can be created with learningBOX, LMSFinish is executed at the timing of onunloading the HTML of the learning materials.
Please note that grades cannot be sent before executing LMSInitialize or after executing LMSFinish.
Code Example
(Referenced by) gist URL
https://gist.github.com/ynishi2014/d44930df2eddaa2f4140aab078e5e86f
Execution example
When executed in learningBOX, the following is displayed.
However, since the learning status (cmi.core.lesson_status) is not updated, it appears that no grades are left on learningBOX.
This is because the grades with cmi.core.lesson_status browsed are treated as invalid grades in the learningBOX.
SCORM materials that only pass
In LMSSetValue, setting cmi.core.lesson_status to passed will result in a pass.
Code Example
(Reference) gist URL
https://gist.github.com/ynishi2014/4eb9a00dff3ff867d51192548471a919
Statuses that can be sent
The values that can be sent to cmi.core.lesson_status as grades include
incomplete: learning in progress
completed: completed
passed: Passed
failed: failed
failed: failed ・browsed: not displayed
Behavior when grades are not sent
If you do not send grades, the following will occur.
First time study: results will be "browsed" (will not be displayed)
Second and subsequent studies: The grades from the previous study are retained.
Therefore, you need to be careful about the behavior when you close the course before the grade is determined.
With QuizGenerator, since browsed is set in cmi.core.lesson_status at the beginning, if the lesson is closed before starting to answer, browsed will be recorded and it will appear that no grades are left.
To check the operation
It is best to check with the LMS you plan to use, but since learningBOX is available free of charge and indefinitely for up to 10 users, it may be easy to use it as an environment for developing SCORM teaching materials and checking its operation.
Visualizing API calls
Visualizing API calls can improve development efficiency.
Due to the size of the article, we will summarize this in another article.
Information that can be sent within the SCORM 1.2 specification
In addition to the status (cmi.core.lesson_status) mentioned earlier, the following grades can be sent.
By sending these, you can get detailed information on how learning is progressing, which can lead to analysis of the learning situation, appropriate feedback to the learner, and improvement of the teaching materials.
Score (cmi.core.score.raw)
This is a score.
In SCORM 1.2, it can be an integer between 0 and 100 in "string" format.
Example
API.LMSSetValue("cmi.core.score.raw", "100");
LMSSetValue("cmi.core.score.raw", score.toFixed(0));
Original Extension
In learningBOX, scores above 100 are allowed.
For example, 105 and 400 are accepted as valid scores.
However, please note that negative numbers and decimals are not accepted.
Also, in LMSs other than learningBOX, scores exceeding 100 will result in an error.
Time (cmi.core.session_time)
Learning time.
In the case of learningBOX, it is automatically measured when LMSInitialize and LMSFinish are executed.
If you want to measure more accurate learning time than the time between opening and closing the material, please measure it in the material and send it to us.
In QuizGenerator, only the time from when you start solving a question to when the results display screen appears, and in video materials, only the time when the video is playing is transmitted.
The following will give you 1 hour, 2 minutes, and 3 seconds.
Example
API.LMSSetValue("cmi.core.session_time", "01:02:03");
Information per question
This is a child item of cmi.interactions.n.
n must be specified in order starting from 0.
Starting from 1, skipping numbers, or going back to a smaller number is prohibited.
ID (cmi.interactions.n.id)
ID.
It is displayed in the grade details screen as shown in the red box in the screenshot below.
Please note, however, that negative numbers and decimals are not allowed.
If you plan to download and use grades via CSV or retrieve and use grades via API, you must specify the appropriate ID.
latency (cmi.interactions.n.latency)
The time required.
The following information is displayed in the grade details screen.
correct_responses (cmi.interactions.n.correct_responses.m.pattern)
This is an example of correct responses.
More than one can be specified, but only one seems to be set in most cases.
objectives (cmi.interactions.n.objectives.m.id)
The objective of each question, i.e., the purpose or goal to be achieved.
The value in the format s:xxx is used for section tags, and the value in the format q:xxx is used for question tags.
student_response (cmi.interactions.n.student_response)
The student's response.
It sends the input string, choice numbers, etc.
time (cmi.interactions.n.time)
Study time.
The time spent on the question is sent.
result (cmi.interactions.n.result)
Sends correct/wrong results.
Neutral and score can also be sent.
Unique extensions to learningBOX
Normally, cmi.interactions.n.student_response cannot send HTML.
Sending answers in HTML
Of course, you can send HTML tags, but the results screen will display the HTML tags you sent as is.
If you specify html in cmi.interactions.n.student_response_format, the values sent to cmi.interactions.n.student_response will be interpreted and displayed as HTML. However, JavaScript is restricted so that it cannot be executed.
Relaxation of character count limit
Start time / End time (to be supported in 2.18 or later)
This function is used to record the start time and end time of learning.
This function will be available in learningBOX 2.18 or later. (Scheduled for release in June 2022)
Anti-pattern [Excessive LMSCommit
When LMSCommit is executed, the value set in LMSSetValue is saved.
Many LMSs do not send data to the server at LMSSetValue, but send data to the server at the timing of LMSCommit.
This is because the process of sending data to the server takes a relatively long time, and if communication were to take place each time LMSSetValue is executed, processing would be time-consuming.
For example, if the number of questions is 100, the number of LMSSetValues per question is 6, and the communication delay is 10 ms, then 100 x 6 x 10 = 6000 ms, which means that it takes 6 seconds to send results.
If you are using the system from overseas, the communication delay can be 10 times or more, so LMSCommit should not be executed excessively.
When LMSCommit should be executed
It should be executed after sending cmi.core.lesson_status or after LMSSetValue of all grades is finished.
By sending "complete" to cmi.core.lesson_status and executing LMSCommit when learning has started, the grades seen by others (teachers, administrators, etc.) will change to "learning".
After the LMSSetValue of all grades has been completed, LMSCommit and LMSFinish should be executed in that order.
(*In learnngBOX, even if LMSCommit is not executed before LMSFinish, the process of sending grades is still executed, so LMSFinish alone is acceptable.)
Do not do LMSFinish
LMSFinish must be executed at the end of the process.
Since the SCORM specification stipulates that LMSFinish must be executed, there is no guarantee of behavior if LMSFinish is not executed.
LMSSetValue without checking the implementation
SCORM 1.2 compliant LMSs do not necessarily implement all the SCORM 1.2 specifications.
The SCORM 1.2 specification (API) contains a mixture of items that must be implemented and items that are allowed without implementation.
Therefore, before executing LMSSetValue, you should check whether the element you are trying to send is implemented.
If you have any problems
Please contact our support.
Related Articles
Let's make SCORM teaching materials!