Copyright © 2012-2015 ADL, All rights reserved
- 1.0 Overview
- 3.0 Definitions
- 4.0 Conformance
- 5.0 Conceptual Model: Informative
- 6.0 LMS Requirements
- 7.0 Course Structure Data Requirements
- 8.0 Course Package
- 9.0 Bibliography
## Disclaimer PLEASE NOTE: This is a developer release and is subject to change. ## Revision History __Sandstone - 1st Edition (May 15, 2015):__
- Developer release
0.1 Convert Working Draft to Markdown in GitHub (Feb 20, 2013):
- Converted existing working draft to markdown format from Microsoft Word. All previous work from 2012 discarded.
| Name: | Organization: |
|---|---|
| Ed Cohen | AICC Infrastructure Subcommittee Chair |
| Aaron Silvers | ADL |
| Jonathan Poltrack | ADL |
| Andy Johnson | ADL |
| Tom Creighton | ADL |
| Nik Hruska | ADL |
| Avron Barr | The LETSI Foundation |
| Mike Rustici | Rustici Software |
| Ben Clark | Rustici Software |
| Megan Bowe | Rustici Software |
| Andrew Downes | Rustici Software |
| Jacques Talvard | Airbus |
| William A. McDonald | Boeing |
| Ray Lowery | Pratt & Whitney |
| John Kleeman | Questionmark |
| Kris Rockwell | Hybrid Learning Systems |
| Paul Roberts | Questionmark |
| Christopher Reynolds | Pelesys |
| Mingrui Zheng | Pelesys |
| Chris Sawwa | Meridian Knowledge Systems |
| Michael Roberts | VTraining Room |
| Thomas Person | (Formerly of Adobe) |
| Art Werkenthin | RISC,Inc |
| Severin Neumann | die eLearning AG |
| David Pesce | Exputo Inc. |
| Henry Ryng | inXsol |
| Chris Handorf | Pearson |
| Jamie Burns | Virtual College |
# 1.0 Overview
This specification describes the course structure interchange format for Learning Management Systems (LMS).
## 1.1 ScopeThe scope of this specification is limited to the following:
- LMS Course Structure Import/Export
- LMS Course Definition as it pertains to runtime data used by AUs.
The following referenced documents are indispensable for the application of this specification.
- RFC 2396, "Uniform Resource Identifiers (URI): Generic Syntax," August 1998.
https://www.ietf.org/rfc/rfc2396.txt - "Experience API", current specification, ADL, 2012-2013
https://github.com/adlnet/xAPI-Spec/blob/master/xAPI.md - cmi5 Runtime Environment, Sandstone 1st Edition
https://github.com/AICC/CMI-5_Spec_Current/blob/master/cmi5_runtime.md
For purposes of this specification, the following terms and definitions apply:
-
Administrator: The administrative user who manages the LMS and related systems. This user performs tasks such as learner enrollment, course structure definition, and report management.
-
Assignable Unit (AU): A learning content presentation launched from an LMS. The AU is the unit of tracking and management. The AU collects data on the learner and sends it to the LMS.
-
Course: A collection of assignable units, in a logical grouping, of learning content. A course is typically an internal data structure. Courses are often assigned to learners and tracked by the LMS.
-
Course Structure: A list of assignable units and launch parameters, with an implied sequence, representing a course.
-
Experience API (xAPI): A runtime data communication specification for learning content (AU) to send and receive data to a Learning Record Store (LRS). The xAPI specification is referenced by this document is used to define the data transport and the data model.
-
Internationalized Resource Identifier (IRI): A unique identifier according to RFC 3987. The IRI may be an IRL. All IRIs SHOULD be a full, absolute IRI that includes a scheme. Relative IRIs SHOULD NOT be used. IRLs SHOULD be defined within a domain controlled by the person creating the IRL.
-
Internationalized Resource Locator (IRL): According to the xAPI specification, an IRL is an IRI that, when translated into a URI (according to the IRI to URI rules), is a URL. Some communities of practice simply use "URL" even if they use IRIs, which is not as technically correct within the xAPI.
-
Learner: The end user viewing/using the learning content (AUs).
-
Learning Management System (LMS): A computer system that may include the capabilities to register learners, launch learning presentations, analyze and report learner performance, and track learners progress. LMS launching, reporting, and tracking roles are the focus of the cmi5 specification. The LMS MUST have an LRS as part of its implementation.
-
Learning Records Store (LRS): Defined in the xAPI specification. In this specification, the LMS MUST implement an LRS with the additional requirements specified in this document.
-
MUST / SHOULD / MAY: The three levels of obligation with regards to conformance to the cmi5 specification. A system that fails to implement a MUST (or a MUST NOT) requirement is not in conformance. Failing to meet a SHOULD requirement is not a violation of conformity, but it goes against best practices. MAY indicates an option, which is to be decided by the developer, with no consequences for lack of conformity.
## 3.1 Abbreviations and Acronyms
ADL: Advanced Distributed Learning
AICC: Aviation Industry Computer-Based Training Committee
API: Application Programming Interface
LMS: Learning Management System
LRS: Learning Record Store
PII: Personally Identifiable Information
URI: Uniform Resource Identifier
URL: Uniform Resource Locator
URN: Uniform Resource Name
XAPI: Experience API
Conformance to this specification is defined in this section.
In this specification:
- "MUST" is to be interpreted as a requirement on an implementation.
- "MUST NOT" is to be interpreted as a prohibition.
- "SHOULD" is to be interpreted as a recommendation for implementation.
- "SHOULD NOT" is to be interpreted as the converse of "SHOULD".
- "MAY" is to be interpreted as a course of action that is permissible within the limits of the specification.
- "NEED NOT" is to be interpreted as a course of action that is not required.
Uses of the xAPI specification outside of the scope of this specification do not affect conformance with this specification.
## 4.1 CoursesA course MUST be bundled with course structure data that conform to all requirements listed in Section 7.
Course structure data MUST NOT implement any features or functionality (optional or mandatory) described in this specification in a non-conforming manner.
The LMS MUST conform to all requirements listed in Section 6 – LMS Requirements.
The LMS MUST NOT implement any features or functionality (optional or mandatory) described in this specification in a non-conforming manner.
Synopsis of the cmi5 model:
- An LMS imports a course structure, which MUST contain one or more AUs.
- An LMS administrative user assigns a course to a learner.
- A learner authenticates with an LMS or a related system.
- A learner launches an AU from the LMS or an associated launching system, using an interface.
- The LMS writes launch data to the integrated LRS.
- The AU sends a message to the LMS requesting launch parameters and previous state information.
- The learner views the AU content and performs the learning. During this time, the AU MAY request data from, and store data to, the LMS.
- The learner exits the AU.
- The AU reports the final tracking data to the LMS and issues a "terminate" statement.
- Administrative users create and view reports of the tracking data recorded by the AUs for individual learners.
Responsibilities of the Assignable Unit:
- Parse the parameters from the launching environment to determine where the LMS location is and initiate communication with the LMS.
- Acting as a "client", send and receive messages using the defined transport mechanism(s) and associated commands as prescribed in this specification.
- Format all data according to the defined data types and vocabularies that are defined in this specification.
- Send a "terminate" statement prior to terminating the AU's execution.
Responsibilities of the LMS:
- Create and maintain course structures.
- Acting as a "server", receive and reply to messages using the defined transport mechanism(s) and associated commands as prescribed in this specification.
- Format all data according to the defined data types and vocabularies that are defined in this specification.
- Launch the specified AU contained in the courses within the defined environment(s).
The LMS MUST meet the following requirements to conform to this specification:
- The LMS MUST implement an LRS as defined in the xAPI specification.
- The LMS MUST support Course Structures as defined in cmi5 Course Structure.
- The LMS MUST implement additional "State API" requirements to initialize the AU state as defined in Section 10.
- The LMS MUST implement the runtime launch interface as defined in Section 8.0 – Content Launch Mechanisms.
- The LMS MUST implement additional xAPI "Statement API" requirements as defined in Section 9.
- The LMS MUST implement additional xAPI "Agent Profile API" requirements as defined in Section 11.
- The LMS MUST implement a means to import course structures as defined in Section 6.1.
- The LMS SHOULD implement a means to export course structures as defined in Section 6.1.
* The LMS MUST implement the import of the Course Structure defined in Section 7.
* The LMS SHOULD implement the export of the course data structure defined in Section 7.
* The LMS SHOULD provide a user interface to the LMS administrative users to create and edit course structures internally.
* The LMS MUST support course structures containing more than 1000 AUs. * The LMS MUST support course structures conforming to the XSD schema defined in Section 7.2.
# 7.0 Course Structure Data Requirements ## 7.1 Course Structure Data Model ### 7.1.1 Course Level Metadata
The following metadata attributes and elements are at the course level and describe the course instance as a whole.
Required: Yes |
Description: Value space: |
Required:
Yes |
Description: Value space: Sample value: |
Required: Yes |
Description: Value space: Sample value: |
Required: No |
Description: Value space: Sample value: |
The data in this section are used for the block structures with group AUs. A Block consists of one or more AUs. Blocks can also contain references to objectives and other Blocks.
Required: Yes |
Description: A globally unique IRI to identify the Block in xAPI messages made by the LMS. Value space: Values defined by course designer Sample value: |
Required: Yes |
Description: |
Required:
Yes |
Description: |
Required:
No |
Description: |
The data in this section are used by the Objectives. Objectives can be associated with a Block or with individual AUs.
Required: Yes |
Description: Value space: Sample value: |
Required: Yes |
Description: Value space: Sample value: |
Required: Yes |
Description: Value space: Sample value: |
The data in this section are used by the LMS to locate the AU and provide launch data. AUs may also contain objectives.
Required: Yes |
Description: A globally unique IRI that the AU uses to identify itself to the LMS in xAPI messages to the LMS. Value space: Values are defined by the course designer. Sample value: |
Required: Yes |
Description: Used by the LMS when launching the AU (in a web-browser environment) to determine whether the AU requires its own window, or whether the LMS may choose the window context for the AU. Usage:
Value space: "OwnWindow", "AnyWindow" |
Required: No |
Description: A score used by the LMS to determine passing or failure of judged activity in the AU (if the AU has scoring). Usage:
Value space: Decimal number. |
Required: No |
Description: If true, the content MUST NOT send any "Passed" or "Failed" statements after sending a "Passed" statement. Usage:
Sample value: <au id="…" passIsFinal="true"> … </au> |
Required: No |
Description: Used by the LMS to determine if an AU has been sufficiently completed for the purposes of determining overall course completion or determining if prerequisites were met for other activities.. moveOn Values are as follows:
Usage: If all member AUs in a block are satisfied, then the block is considered satisfied for prerequisites and sequencing. Value space:
Sample value: |
Required: Yes |
Description: Used by the LMS to specify which authentication method the AU MUST be used to access the LMS's Learning Record Store. Usage:
Value space:
Sample value: |
Required: No |
Description: Used by the LMS to determine the activity type of the AU before a first start to indicate this type to the user. Sample value:<au id="…" activityType="http://adlnet.gov/expapi/activities/media"> … </au> |
Required: Yes |
Description: A descriptive title for the AU. Value space: Values are defined by the course designer. Sample value: |
Required:
Yes |
Description:
Sample value: |
Required:
No |
Description: |
Required: Yes |
Description:
Value space:Values are determined by the course designer. Sample value: |
Required: No |
Description: Value space:
|
Required: No |
Description: Value space: Values are defined by the AU content provider. |
Course Designer MAY place their own namespaced elements into the course structure. For that he MUST provide a XML Schema Definition and SHOULD provide a human readable specification describing these vendor specific extensions. These extensions MUST keep the course structure XML valid. An importing LMS MAY ignore these elements.
The course designer MAY provide his extensions as potential addition to the course structure specification as an Issue or Pull Request to the official cmi5 repository.
## 7.2 Course Structure XSDThe following is the XML schema for a course structure file.
All course structures created for LMS import functionality and created by the LMS for export MUST conform to this XSD and be named "cmi5.xml".
<xs:schema xmlns="http://www.adlnet.gov/cmi5/CourseStructure.xsd"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.adlnet.gov/cmi5/CourseStructure.xsd" elementFormDefault="qualified"
id="cmi5CourseStructure">
<xs:element name="courseStructure" type="courseType"/>
<xs:complexType name="courseType">
<xs:sequence>
<xs:element name="course">
<xs:complexType>
<xs:sequence>
<xs:element name="title" type="textType"/>
<xs:element name="description" type="textType"/>
<xs:element name="languages" minOccurs="0" type="languagesType"></xs:element>
<xs:group ref="anyElement"/>
</xs:sequence>
<xs:attributeGroup ref="anyAttribute"/>
<xs:attribute name="id" type="xs:anyURI" use="required"/>
</xs:complexType>
</xs:element>
<xs:element name="objectives" type="objectivesType" minOccurs="0"/>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="au" type="auType"/>
<xs:element name="block" type="blockType"/>
</xs:choice>
<xs:group ref="anyElement"/>
</xs:sequence>
<xs:attributeGroup ref="anyAttribute"/>
</xs:complexType>
<xs:complexType name="blockType">
<xs:sequence>
<xs:element name="title" type="textType"/>
<xs:element name="description" type="textType"/>
<xs:element name="objectives" type="referencesObjectivesType" minOccurs="0"/>
<xs:choice minOccurs="1" maxOccurs="unbounded">
<xs:element name="au" type="auType"/>
<xs:element name="block" type="blockType"/>
</xs:choice>
<xs:group ref="anyElement"/>
</xs:sequence>
<xs:attributeGroup ref="anyAttribute"/>
<xs:attribute name="id" type="xs:anyURI" use="required"/>
</xs:complexType>
<xs:complexType name="auType">
<xs:sequence>
<xs:element name="title" type="textType"/>
<xs:element name="description" type="textType"/>
<xs:element name="objectives" type="referencesObjectivesType" minOccurs="0"/>
<xs:element name="url">
<xs:simpleType>
<xs:restriction base="xs:anyURI">
<xs:minLength value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="launchParameters" minOccurs="0"/>
<xs:element name="entitlementKey" minOccurs="0"/>
<xs:group ref="anyElement"/>
</xs:sequence>
<xs:attributeGroup ref="anyAttribute"/>
<xs:attribute name="id" type="xs:anyURI" use="required"/>
<xs:attribute name="moveOn" default="NotApplicable">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="NotApplicable"/>
<xs:enumeration value="Passed"/>
<xs:enumeration value="Completed"/>
<xs:enumeration value="CompletedAndPassed"/>
<xs:enumeration value="CompletedOrPassed"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="masteryScore" use="optional">
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="passIsFinal" use="optional" type="xs:boolean" default="true"/>
<xs:attribute name="authenticationMethod" default="Basic">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="Basic"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="launchMethod" default="AnyWindow">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="AnyWindow"/>
<xs:enumeration value="OwnWindow"/>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="activityType" use="optional" type="xs:string"/>
</xs:complexType>
<xs:complexType name="objectivesType">
<xs:sequence>
<xs:element name="objective" minOccurs="1" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:element name="title" type="textType"/>
<xs:element name="description" type="textType"/>
</xs:all>
<xs:attribute name="id" type="xs:anyURI" use="required"/>
</xs:complexType>
</xs:element>
<xs:group ref="anyElement"/>
</xs:sequence>
<xs:attributeGroup ref="anyAttribute"/>
</xs:complexType>
<xs:complexType name="referencesObjectivesType">
<xs:sequence>
<xs:element name="objective" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="idref" type="xs:anyURI"></xs:attribute>
</xs:complexType>
</xs:element>
<xs:group ref="anyElement"/>
</xs:sequence>
<xs:attributeGroup ref="anyAttribute"/>
</xs:complexType>
<xs:complexType name="textType">
<xs:sequence>
<xs:element name="langstring" maxOccurs="unbounded" minOccurs="1">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="lang" type="xs:language"/>
<xs:attributeGroup ref="anyAttribute"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:group ref="anyElement"/>
</xs:sequence>
<xs:attributeGroup ref="anyAttribute"/>
</xs:complexType>
<xs:simpleType name="baseLanguagesType">
<xs:list itemType="xs:language"></xs:list>
</xs:simpleType>
<xs:complexType name="languagesType">
<xs:simpleContent>
<xs:extension base="baseLanguagesType">
<xs:attributeGroup ref="anyAttribute"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:group name="anyElement">
<xs:sequence>
<xs:any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:group>
<xs:attributeGroup name="anyAttribute">
<xs:anyAttribute namespace="##other" processContents="lax"/>
</xs:attributeGroup>
</xs:schema>- Zip32
- Zip64
- A course structure XML file
- Any media included in a ZIP course package MUST use relative URL references in the Course Structure XML.
- Any media not included in a ZIP course package MUST use fully qualified URL references in the Course Structure XML
- A ZIP course package may contain a mix of fully qualified and relative URLs,provided the rules above are followed.
[1] AICC CMI001, CMI Guidelines for Interoperability, Version 4.0.
[2] SCORM – http://www.adlnet.gov/capabilities/scorm
[3] MIME Types – http://www.iana.org/assignments/media-types/index.html
Copyright 2012-2015 Advanced Distributed Learning (ADL) Initiative, U.S. Department of Defense
Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.