SCORM content in learning management system

Getting SCORM content into your LMS

With the first and second days of our SCORM series complete, we're ready to dig into the good stuff. At this point, you'll understand how to create a great SCORM compliant course with an authoring tool. And you've also learned how to export the course as a SCORM package. So we've now SCORM-ified our hard work and the content is ready to be delivered to learners. In today's post, we'll analyze the SCORM zip file, so hold onto your hats!

When you export your course to a SCORM format, two important things happen:

  1. Your authoring tool creates a SCORM zip file. That zip contains all of the media files that enable learners to view and navigate your course online, including text, imagery, video, CSS, and quiz content. If your authoring tool has done its job correctly, the contents of the zip will be neatly separated into folders and files that reflect the content of your course.
  2. While you now have a zip file, two things in particular define it as a 'SCORM' zip:

Here's a screenshot of typical zip contents that have been opened for viewing:

Day 3. Getting SCORM content into your LMS

Three takeaways from this screenshot:

  1. The screenshot shows the imsmanifest.xml file sitting in the root of the SCORM package zip.
  2. This is an accurate but simple example of the folders and structure of a SCORM zip. Complex courses could contain many folders and additional folders within this hierarchy.
  3. In this simple example of a SCORM course, the screenshot shows the contents of a “Playing” folder – marked 2 in the screenshot. As you can see, there’s nothing particularly ‘SCORM’ about it. It’s just a folder containing html, images, and javascript files,which means it contains online content that can play in a browser to be viewed by learners. As those with experience of SCORM and the Rustici Golf course will know, the “shared” folder contains all the SCORM API magic that allows the course to communicate with an LMS when it’s launched. The imsmanifest.xml coupled with that “SCORM API magic” is what makes this zip a SCORM package. You can download the zip file for this sample course here and explore as you need! This particular SCORM package was copied from the Rustici Golf example you can find here. And you can find a number of other examples here.

The manifest

Remember that the zip file contains an imsmanifest.xml file. One important point to note is that the manifest must exist in the root of the zip file, and nowhere else! When your LMS tries to import SCORM content, it will look for the manifest in the root of the zip file. If the manifest isn’t there, the file goes against SCORM specifications. That can cause a lot of confusion for SCORM creators as an LMS won't import the zip files.

As the imsmanifest.xml name suggests, the file is in XML format. The XML file will look something like the example below. The file contains key information for your LMS to interpret. While we’ll discuss some of these now, it’s worth noting that this is a basic example. It contains just a single module and enough sample files to illustrate our discussion points. In reality, a course could contain hundreds of entries in the manifest.

SCORM course content and your LMS

Six takeaways about the manifest:

  1. Schema: The manifest should contain this information to record which “SCORM schema” is being used. This will typically be ADL SCORM.
  2. Schemaversion: This tells us which version of the SCORM specification the course is compliant with. In this example, the relevant version is 1.2 but the schemaversion could also specify 2004 2nd Edition, or 2004 3rd Edition, etc.
  3. Items: These are effectively the modules for your SCORM. While SCORMs can contain multiple modules, one is most common. In the above example, I’ve drawn an arrow from point 3 to point 6. That’s to illustrate that the indentifierref is important. In this case, “launch_page” links to a resource. In other words, the item has a resource, which it’s linked to by the id launch_page. That resource defines what type of item it is and where the content for the module is located. I’ll describe that in detail a little later.
  4. Title: This defines the title of the module. In our example, that’s “LearnUpon – SCORM Series, Day 3”. In real world examples, you’ll often encounter multiple items, each with their own titles.
  5. Masteryscore: This element defines a passing score for the module. If your module includes a quiz, you may have set a passing score - but not every SCORM course includes a quiz and not every quiz has a passing score. Knowledge checks and practice quizzes typically won't have a masteryscore, for example.
  6. Resource: One important type of resource (as explained in point 3) is a “sco”, defined by the attribute adlcp:scormtype. A “sco” is what’s called a launchable resource. That means it’s a module learners can launch, view and complete in a browser. You’ll note that this resource has an href attribute, of “module1/start.html”. That tells your LMS - "When a learner launches this module, open the page module1/start.html for them". In other words, it's how the starting page of your module is defined.

What could possibly go wrong?!

While a manifest file looks simple once you break it down into its various parts, things do go wrong. Common issues include:

  1. Some authoring tools don’t “XML Escape” files correctly. If your course title contains a symbol like “&”, that can cause breakages in some authoring tools, especially in older versions.
  2. The manifest doesn’t state the SCORM version. For example, the manifest might specify a SCORM 2004 course, while your LMS reads the content as a 1.2. Or the manifest could define a SCORM 1.2 course and your LMS might not support that version of the specification. That’s why it’s essential to ask your LMS provider which versions of the SCORM specification they support before exporting course content to a SCORM package!
  3. If your course has no adlcp:scormtype defined, then your LMS can't determine which page to launch, as your course has no starting point.
  4. If your course includes a quiz but has no mastery score defined, then the pass/fail determination can also break. (More on that in day four of this series.)
  5. One serious issue could be that your zip file doesn't have a manifest. Or the manifest may be located somewhere outside of the root, possibly embedded deep in the zip file or located in a folder a level deeper into the zip.

Importing SCORM content to an LMS

While importing SCORM content is often a laborious process, it should be simple. To import a SCORM course into your LMS, you will usually:

  1. Upload the SCORM zip file, via your browser or LMS administrator UI. For example, to add a SCORM module to a course in LearnUpon, you simply click a button.
  2. Your LMS will then attempt to find the manifest file and import its contents, preparing it for use by learners. A good LMS will attempt to validate the manifest and flag potential issues. For example, if no manifest file was found, the LMS would notify you of the specific issue rather than saying something vague like: “Failed to upload your file, please contact your administrator”!

With day three now complete, I hope you have a better understanding of what a SCORM package looks like.


On day four, we’ll look at the magic that happens when a learner launches a course and examine how the SCORM API works with your LMS to bookmark data and track results.


Catch up on day two: how to use SCORM compliant authoring tools.