Implementing cmi5 in our white label learning management system - Part 2 - Content Packaging

Learning Management Systems  / E-Learning

We have recently been enhancing the xAPI (formerly tin can API) content player in our white label learning management system (LMS) by implementing cmi5. These are some of our observations about the implementation. This part is about importing e-learning content into the learning management system.

E-learning content typically consists of a bunch of web browser accessible assets; e.g. some html web pages and some media files - images and videos, etc. Content producers need a mechanism to transfer these assets to the learning management system (LMS) and to tell the LMS what to do with them. This is typically referred to as content packaging.

External content

With xAPI and cmi5 it is possible to use e-learning content that is not hosted in the LMS itself - but could be hosted anywhere on the internet. To keep things simple we will ignore this case for the moment.

Content Producers and LMS vendors have been achieving this for many years with SCORM. The SCORM way of doing this was to put all of the assets into a zip file and include an additional xml manifest file which explained the structure. By and large this has worked well although in SCORM the structure of the e-learning content could get quite complex (SCORM 1.2 has a 180 page specification document dealing with the rules for its’ content packaging). Both xAPI and cmi5 have kept with this same basic approach - zip file + xml manifest file; but thankfully the structures have been simplified. In reality all a content packaging mechanism needs to do - is to define the available launchable e-learning activities within the zip file. The LMS can provide tools to combine these launchable items into sensible course structures.

The native xAPI content specification could be as simple as:

<?xml version="1.0" encoding="utf-8" ?>
<tincan xmlns="">
        <activity id="">
            <name>Some E-learning content</name>
            <description lang="en-US">Really engaging e-learning content.</description>
            <launch lang="en-us">index.html</launch>

The activity element can repeat allowing for multiple launchable activities to be uploaded at once.

Manifests in cmi5 can be simple (taken from

<?xml version="1.0" encoding="utf-8"?>
<courseStructure xmlns="">
  <course id="">
      <langstring lang="en-US">Introduction to Geology</langstring>
      <langstring lang="en-US">
        This course will introduce you into the basics of geology. This includes subjects such as
        plate tectonics, geological materials and the history of the Earth.
  <au id="">
      <langstring lang="en-US">Introduction to Geology</langstring>
      <langstring lang="en-US">
        This course will introduce you into the basics of geology. This includes subjects such as
        plate tectonics, geological materials and the history of the Earth.

but can also be quite complex (see the example at

As an LMS developer this complexity can be quite frustrating. It takes a lot of time and effort to support the complex structures. Sometimes the structures don’t fit into the learning structures of the LMS in question. We like to have the LMS administrators have control over course structures - so for manifests that define course structure - less is more.

For our implementation we concentrate on the elements - the assignable units. The assignable units have some interesting attributes that prove very useful in understanding how both content and the LMS should behave:


Can take the values OwnWindow or AnyWindow (which is the default). Like it sounds if set to OwnWindow the LMS should open the content in it's own dedicated window (i.e. flying solo without any LMS "chrome" surrounding it). AnyWindow means that the LMS can use any window - in reality this probably means the content will be shown in an Iframe with the LMS "chrome" surrounding it.

For years e-learning content has been unclear about what to do when it finishes - and usually feels obliged to try and close a parent window or two. Could this help tell the content what to do when it finishes - we'll look at this in a later part.


The pass mark if the content contains an assessment or test.

Although SCORM contained a mastery score - the cmi5 one has become scaled and is a decimal number between 0 and 1, e.g. 0.85 - meaning 85%


SCORM managed to create a great deal of confusion about how learning content informed the LMS that it had finished (maybe even passed or failed if there was an assessment or test). moveOn is an attempt to clear things up whilst maintaining flexibility. The allowable values are:

  • Passed
  • Completed
  • CompletedAndPassed
  • CompletedOrPassed
  • NotApplicable
The moveOn value essentially tells the LMS the conditions under which the content can be considered finished. The value "Passed" means the LMS should wait to hear a passed verb from the content. “CompletedAndPassed” means the LMS should wait to hear both a completed and a passed verb from the content before considering the content finished. “NotApplicable” is an interesting one - suggesting the LMS should decide.

Next time we will look at launching elearning content.

Previous posts:
Part 1 - CMI5 Introduction

SkillsLogic develops affordable bespoke learning management systems for training organisations that want to deliver high quality e-learning.

Talk to us today and find out how we can help you reach more learners.

Contact Us

Contact Us

SkillsLogic Ltd,
Cooper Buildings,
Sheffield Technology Park,
Arundel Street,
S1 2NS

+44 (0)114 383 0093

Follow us on Twitter: