Skip to content

Latest commit

 

History

History
975 lines (862 loc) · 42.7 KB

File metadata and controls

975 lines (862 loc) · 42.7 KB

cmi5 Course Structure

Copyright © 2012-2015 ADL, All rights reserved

Table of Contents

Disclaimer

Revision History

Contributors

License Agreement


## 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.
## Contributors
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 Scope

The 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.
# 2.0 References

The following referenced documents are indispensable for the application of this specification.

# 3.0 Definitions

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

# 4.0 Conformance

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 Courses

A 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.

## 4.2 Learning Management Systems (LMS)

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.

# 5.0 Conceptual Model: Informative

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).
# 6.0 LMS Requirements

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.
## 6.1 Course structure requirements * The LMS SHOULD implement a means to create and maintain course structures.
* 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.

id

Required: Yes
Data type: IRI

Description:
A globally unique IRI (see RFC 3987) for the course. Used to explicitly identify the course instance.

Value space:
Values are defined by the course designer.
Sample value:
<course id="http://www.yoursite.com/identifiers/course/005430bf-b3ba-45e6-b47b-d629603d83d2" >…</course>

title

Required: Yes
Data type: langstring

Description:
A descriptive title that identifies the course.

Value space:
Values are defined by the course designer.

Sample value:

&lt;title&gt;<br/>
&nbsp;&nbsp;	&lt;langstring lang="en-US"&gt;This is a course title&lt;/langstring&gt;<br/>
&nbsp;&nbsp;	&lt;langstring lang="es-MX"&gt;Se trata de un título del curso&lt;/langstring&gt;<br/>
&lt;/title&gt;<br/>      
  
</p>
</td>

description

Required: Yes
Data type: langstring

Description:
A detailed description of the course.

Value space:
Values are defined by the course designer.

Sample value:
<description>
   <langstring lang="en-US">This is a course description</langstring>
   <langstring lang="es-MX">Esta es una descripción del curso</langstring>
</description>

    </p>
</td>

languages

Required: No
Data type: RFC 5646 language tags

Description:
Specifies which languages will be supported by the course. All of the languages list MUST be present in a langstring for each title or description element. The LMS will be expected to display the language specific titles and descriptions for course elements based on the learner’s language preference.

Value space:
Values defined by course designer

Sample value:
<languages>
  en-US
  es-MX
</languages>

### 7.1.2 Block Metadata

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.

id

Required: Yes
Data type: IRI

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:
<block id="http://www.yoursite.com/identifiers/aublock/005430bf-b3ba-45e6-b47b-d629603d83d8" > … </block>

title

Required: Yes
Data type: langstring

Description:
A descriptive title for the Block of AUs
Value space:
Values are defined by the course designer.
Sample value:
<title>
   <langstring lang="en-US">This is the block title</langstring>
   <langstring lang="es-MX">Este es el título del bloque</langstring>
</title>

description

Required: Yes
Data type: langstring

Description:
A detailed verbal description of what the Block contains.
Value space:
Values are defined by the course designer.
Sample value:
<description>
   <langstring lang="en-US">This is the block description</langstring>
   <langstring lang="es-MX">Esta es la descripción de los bloques</langstring>
</description>

objectives

Required: No
Data type: objectiveReference

Description:
A listing of objectives referenced by this block.
Value space:
Values are defined by the course designer.
Sample value:
<objectives>
   <objective idref="http://www.yoursite.com/identifiers/objective/005430bf-b3ba-45e6-b47b-d629603d83d2" />
</objectives>

### 7.1.3 Objectives Metadata

The data in this section are used by the Objectives. Objectives can be associated with a Block or with individual AUs.

id

Required: Yes
Data type: IRI

Description:
A unique IRI for the learning objective.

Value space:
Values are defined by the course designer.

Sample value:
<objective id="http://www.yoursite.com/identifiers/objective/005430bf-b3ba-45e6-b47b-d629603d83d2" >…</objective>

title

Required: Yes
Data type: langstring

Description:
A descriptive title for the learning objective

Value space:
Values are defined by the course designer.

Sample value:
<title>
   <langstring lang="en-US">This is the objective title</langstring>
   <langstring lang="es-MX">Este es el título del objetivo</langstring>
</title>

description

Required: Yes
Data type: langstring

Description:
A detailed verbal description of the learning objective.

Value space:
Values are defined by the course designer.

Sample value:
<description>
   <langstring lang="en-US">This is the objective description</langstring>
   <langstring lang="es-MX">Esta es la descripción objetiva</langstring>
</description>

### 7.1.4 AU Metadata

The data in this section are used by the LMS to locate the AU and provide launch data. AUs may also contain objectives.

id

Required: Yes
Data type: IRI

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:
<au id="http://www.yoursite.com/identifiers/activity/005430bf-b3ba-45e6-b47b-d629603d83d2" > … </au>

launchMethod

Required: Yes
Data type: string

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:

  • A value of "OwnWindow" will require the LMS to launch the AU either in a new browser window, or the LMS may redirect the current window to the AU.
  • A value of "AnyWindow" indicates that the AU does not care about the window context. All browser window options are acceptable, such as in a Frameset, in a New Window, a browser redirect, etc.

Value space: "OwnWindow", "AnyWindow"

Sample value:
<au id="…" launchMethod="OwnWindow"> … </au>

masteryScore

Required: No
Data type: string

Description: A score used by the LMS to determine passing or failure of judged activity in the AU (if the AU has scoring).

Usage:

  • The masteryScore is passed to the AU at runtime by the LMS (as defined in the cmi5 Runtime Specification).
  • If the AU has scoring, it will use the Masteryscore to determine pass/fail (as defined in the cmi5 Runtime Specification)
  • The masteryScore is a scaled, decimal value between 0 and 1.

Value space: Decimal number.

Sample value:
<au id="…" masteryScore="0.85"> … </au>

passIsFinal

Required: No
Data type: boolean
Default value: true

Description: If true, the content MUST NOT send any "Passed" or "Failed" statements after sending a "Passed" statement.

Usage:

  • The value of passIsFinal is passed to the AU at runtime by the LMS (as defined in the cmi5 Runtime Specification).
  • The AU will use this value to determine if it MUST NOT send "Passed" or "Failed" statements after sending a "Passed" statement.

Sample value:
<au id="…" passIsFinal="true"> … </au>

moveOn

Required: No
Data type: string
Default Value: "NotApplicable"

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:

  • moveOn Value = "Passed" : If the LMS receives a statement with the verb "Passed", then the LMS will consider the AU satisfied.
  • moveOn Value = "Completed" : If the LMS receives a statement with the verb "Completed", then the LMS will consider the AU satisfied.
  • moveOn Value = "CompletedAndPassed" : If the LMS receives statements with the verbs "Completed" and "Passed", then the LMS will consider the AU satisfied.
  • moveOn Value = "CompletedOrPassed" : If the LMS receives a statements with either of the verbs "Completed" or "Passed", then the LMS will consider the AU satisfied.
  • moveOn Value = "NotApplicable": The LMS will consider the AU satisfied.

Usage:

If all member AUs in a block are satisfied, then the block is considered satisfied for prerequisites and sequencing.
If all member AUs and Blocks are satisfied, then the course is considered satisfied for prerequisites or credit in relation to other courses or curricula.

Value space:

"Passed"
"Completed"
"CompletedAndPassed"
"CompletedOrPassed"
"NotApplicable"

Sample value:
<au id="…" moveOn="Passed"> … </au>

authenticationMethod

Required: Yes
Data type: string

Description: Used by the LMS to specify which authentication method the AU MUST be used to access the LMS's Learning Record Store.

Usage:

  • Based on the value of authenticationMethod, the LMS will place a parameter in the AU launch interface to indicate to the AU which authentication method to use (in accordance with the cmi5 Runtime Specification)
  • authenticationMethod Value = "Basic" : If the LMS indicates to the AU launch interface to use basic HTTP authentication and passes an HTTP authentication token to the AU using the launch interface. This is currently the only option. Future versions of this specification may add other authentication options.

Value space:

"Basic"

Sample value:
<au id="…" authenticationMethod="Basic"> … </au>

activityType

Required: No
Data type: IRI
Default value: None

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>

title

Required: Yes
Data type: langstring

Description: A descriptive title for the AU.

Value space: Values are defined by the course designer.

Sample value:

&lt;title&gt;<br/>
&nbsp;&nbsp;	&lt;langstring lang="en-US"&gt;This is an activity title.&lt;/langstring&gt;<br/>
&nbsp;&nbsp;	&lt;langstring lang="es-MX"&gt;Este es un título de la actividad.&lt;/langstring&gt;<br/>
&lt;/title&gt;<br/>

  </p>
</td>

description

Required: Yes
Data type: string

Description:
A detailed description of the subject matter and learning activities covered by the AU.


Value space:
Values are defined by the course designer.

Sample value:
<description>
   <langstring lang="en-US">This is the AU description</langstring>
   <langstring lang="es-MX">Esta es la descripción de la AU</langstring>
</description>

objectives

Required: No
Data type: objectiveReference

Description:
A listing of objectives referenced by this AU.
Value space:
Values are defined by the course designer.
Sample value:
<objectives>
   <objective idref="http://www.yoursite.com/identifiers/objective/005430bf-b3ba-45e6-b47b-d629603d83d2" />
</objectives>

url

Required: Yes
Data type: string

Description:

  • A relative or fully qualified URL that references the launch point of the AU.
  • To accommodate "non-browser" applications, an application specific protocol may be used in the url:
    <application>://<URL to content>
  • Regardless of the value of <application>, the remaining portion of the URL MUST conform to HTTP/S conventions, such as named value pair parameters.
  • If the url includes a query string, the values from that query string MUST be merged with the cmi5 parameters at launch time (see Section 8.1.1 of the cmi5 Runtime Environment).

Value space:Values are determined by the course designer.

Sample value:
<url>
http://wwww.mycourses.com/courseX.html
</url>

launchParameters

Required: No
Data type: string

Description:
Static launch parameters defined by the course designer. The LMS is required to store this data and provide it to the AU if requested by the AU during runtime.

Value space:
Values are defined by the course designer.


Sample value:
<launchParameters>
{"param1": "Lorem ipsum dolor sit amet", "param2": [1,2,3,4,5],"param3": {"a": 1,"b": 2}}
</launchParameters>

entitlementKey

Required: No
Data type: string

Description:
Data used by the AU to determine if the launching LMS is entitled to use the AU. The AU SHOULD use this data in combination with other data provided from the LMS to determine entitlement.

Value space: Values are defined by the AU content provider.

Sample value:
<entitlementKey>
xyz-123-9999
</entitlementKey>

### 7.1.5 Vendor Specific Metadata

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 XSD

The 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>
# 8.0 Course Package For the course import and export defined in Section 6.1, the LMS MUST support all of the following formats:
  • Zip32
  • Zip64
  • A course structure XML file
## 8.1 Course Packages in ZIP Format The two ZIP file formats MUST follow the specification defined at https://www.pkware.com/support/zip-app-note. When the ZIP file is used to package a course, it may contain media associated with the course AUs.
  • 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.
## 8.2 Course Structure XML Without a ZIP File Package When a course structure XML file is provided without a ZIP file package, all URL references MUST be fully qualified.
# 9.0 Bibliography

[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


#License Agreement

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.