AICC DOCUMENT NUMBER: CMI5-001 Revision: CURRENT WORKING DRAFT
THIS DOCUMENT IS CONTROLLED BY: AICC CMI Subcommittee
#WORKING DRAFT - NOT FOR IMPLEMENTATION
Caveats...
Copyright © 2012-2015 AICC, All rights reserved
The information contained in this document has been assembled by the AICC as an informational resource. Neither the AICC nor any of its members assumes nor shall any of them have any responsibility for any use by anyone for any purpose of this document or of the data which it contains. All use of this document is subject to the terms of the license agreement contained within it.
- 1.0 Overview
- 2.0 References
- 3.0 Definitions
- 4.0 Conformance
- 5.0 Conceptual Model: Informative
- 6.0 LMS Requirements
- 7.0 AU Requirements
- 8.0 Content Launch Mechanisms
- 9.0 XAPI Statement Data Model
- 9.1 Statement ID
- 9.2 Actor
- 9.3 Verbs
- 9.4 Object
- 9.5 Result
- 9.6 Context
- 9.6.1 Registration
- [9.6.2 ContextActivities] (#ContextActivities)
- 9.6.3 Extensions
- 10.0 XAPI State Data Model
- 11.0 XAPI Agent Profile Data Model
- 12.0 XAPI Activity Profile Data Model
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 |
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) |
Andrew Down es | Epic Learning |
Henry Ryng | inXsol |
Art Werkenthin | RISC, Inc. |
Chris Handorf | Pearson |
This specification describes interoperable runtime communication between Learning Management Systems (LMS) and Learning Activities.
The scope of this specification is limited to following:
- Launch by a Learning Management Systems (LMS) of Learning Activities.
- Launch and Runtime environment used for LMS and Learning Activities.
- Runtime communication data and data transport between LMS systems and Learning Activities
- LMS course definition as it pertains to runtime data used by Learning Activities.
- Reporting Requirements for LMS systems
This specification references how to use the XAPI specification within this scope.
Other uses of the XAPI specification are outside the scope.
Uses of activities not explicitly defined above are outside of the scope of this specification.
The following referenced documents are indispensable for the application of this specification.
RFC 2396, “Uniform Resource Identifiers (URI): Generic Syntax,” August 1998.
“Experience API”, curent working draft, ADL, 2012-2013
https://github.com/adlnet/xAPI-Spec/blob/master/xAPI.md
CMI5-002 – LMS Course Structure, curent working draft, AICC, 2013
https://github.com/AICC/CMI-5_Spec_Current/blob/master/cmi5_coursestructure.md
For purposes of this specification, the following terms and definitions apply:
-
Administrator: The administrative user that manages the LMS and related systems. Such a user performs tasks such as learner enrollment, course structure definition, and report management.
-
Assignable Unit (AU): A learning 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 system. An Learning Activity Provider maps to a single AU.
-
Course: A collection of assignable units, in a logical grouping. 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): XAPI is a runtime data communication specification for learning content (AU) to send and receive data to an LRS. The XAPI specification is referenced by this document is used to define the data transport and the data model.
-
Learner: The end user viewing/using the learning content (Learning Activity).
-
Learning Activity Provider (AP): Learning Activity Provider (AP) as defined in the XAPI specification.
-
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. The use of the term "LMS" in this document must refer to the combination of an LMS and an LRS.
-
Learning Records Store (LRS): As defined in the XAPI specification. In this specification, the LMS must implement an LRS with additional requirements as specified in this document.
##3.1 Abbreviations and Acronyms
ADL: Advanced Distributed Learning
AICC: Aviation Industry Computer-Based Training Committee
API: Application Programming Interface
CMI: Computer Managed Instruction
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 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” indicates a course of action that is not required.
Uses of XAPI specification outside the scope this specification do not affect conformance with this specification.
An Assignable Unit must conform to all requirements listed in Section 7 – AU Requirements
An Assignable Unit must conform to all requirements as specified in the XAPI specification (see References)
An Assignable Unit 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)
LMS systems must conform to all requirements listed in Section 6 – LMS Requirements.
A LMS must conform to all LRS requirements as specified in the XAPI specification (see References)
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 CMI-5 model:
- An LMS imports a course structure which may contain one or more Assignable Units.
- An LMS administrative user assigns a course to a learner.
- A learner authenticates with an LMS or related system.
- A learner launches an Assignable Unit (learning content) from the LMS or associated launching system.
- The LMS writes lauch data to the integrated LRS.
- The Assignable Unit (AU) sends a message to the LMS requesting launch parameters and recovers previous state information from the LMS.
- Learner views the AU content and performs the learning. During this time the AU may request from and store data to the LMS.
- The learner exits the AU.
- The AU reports final tracking data to the LMS and issues a "terminated" message.
- The LMS makes the next AU(s) available to the learner based on results from the closed AU session and course structure parameters.
- Administrative users create and view reports of tracking data recorded by AU(s) 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 “client”, send and receive messages using the defined transport mechanism(s) and associate commands as prescribed in this specification.
- Format all data per defined data types and vocabularies defined in this specification.
- Send an “terminated” message prior to terminating the learning activity’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 associate commands as prescribed in this specification.
- Format all data per defined data types and vocabularies defined in this specification.
- Launch AUs contained in courses, in defined environment(s), when selected by the learner.
LMS systems must meet the following requirements to conform to this specification:
- The LMS must implement a LRS as defined in the XAPI Specification.
- The LMS must support course structures as defined in [CMI5-002] CMI-5 Course Structure.
- The LMS must implement additional “State API” requirements to initialize 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 the import of Course Structures per [CMI5-002] CMI-5 Course Structure
- The LMS should implement the export of Course Structures per [CMI5-002] CMI-5 Course Structure
- The LMS should implement a user interface to allow LMS administrative users to create and edit course structures.
- The LMS must be able support course structures with one or more AU’s
Course structures must contain the following data for each AU in a course:
- URL location – A URL to the AU’s location (entry point)
- Activity ID – the AU’s activity ID as defined in the XAPI specification (determined by the AU designer).
- Launch Method -
- “OwnWindow” – The LMS must either spawn a new window for the AU launched, or redirect the existing window to the AU.
- “AnyWindow” – The AU does not care about the window context (all browser windows options are acceptable – FrameSet, New Window, redirect, etc.) The LMS may use whichever method desired..
- Authentication Method – The authentication method used by the AU to access the LMS’s LRS. (Either HTTP basic or OAuth 1.0)
- Launch Parameters –A set of static data specific to the AU’s design. Used as parameters by the AU to modify its behavior.
- Entitlement Key – This is a value provided by the AU content provider and is used by the AU to determine whether the LMS instance and/or Learner are entitled to view the content. It is provided to the AU via a State API request.
Course Structures must contain at least 1 AU.
LMS must have the ability to create and maintain course structures containing more than 1000 AU’s.
##6.2 LMS State API Requirements
The LMS must implement the State API Requirements as defined in section 10.
##6.3 LMS Statement API Requirements
The LMS must implement the Statement API Requirements as defined in section 9.
AU’s must meet the following requirements to conform to this specification:
- The AU must implement the runtime launch interface as defined in Section 8 Content Launch Mechanisms.
- The AU must implement runtime communication defined in the xAPI Specification.
- The AU must implement additional XAPI “Statement API” requirements as defined in section 9.0.
- The AU must implement additional XAPI “Agent Profile API” requirements as defined in section 11.0.
##7.1 AU State API Requirements
AU’s must meet the following requirements to conform to this specification:
- The AU must implement additional XAPI “Statement API” requirements as defined in section 9.0 .
- The AU must implement additional XAPI “State API” requirements as defined in section 10.
- The AU must implement additional XAPI “Agent Profile API” requirements as defined in section 11.
##7.2 AU Statement API Requirements
###7.2.1 Placement of sessionId in Statements
The AU must retrieve the value of session_id at launch time as specified in Section 10 State API. The AU must place the value of the sessionId in the context extensions for all XAPI statements it records.
Usage in an XAPI Statement:
"extensions": {
“sessionId”: <sessionId value>
}
Example:
"extensions": {
“sessionId”: ”xyz123”
}
###7.2.2 First Statement API Call The AU must issue a statement to the LRS after being launched, initialized, and ready for learner interaction using the Initialized verb per section 9.3.2.
###7.1.2 Last Statement Call
The AU must issue a statement to the LRS prior to termination using the Terminated verb per section 9.3.8.
#8.0 Content Launch Mechanisms
##8.1 Web (Browser) Environment
###8.1.1 Launch Method
The AU must be launched by the LMS using one of the following methods, depending on the launchMethod in the Course Structure (Section 7.1.4 AU Meta Data, URL):
When the launchMethod is "OwnWindow", the LMS must use one of the following:
- Spawning a new browser window for the AU.
- Re-directing the existing browser window to the AU.
When the launchMethod is "AnyWindow", the LMS may choose the window context of the AU. All browser window options are acceptable - Framset, New window, browser redirect, etc.
In either case, the AU must be launched by the LMS with a URL having query string launch parameters as defined in this section. The launch parameters must be name/value pairs in a query string appended to the URL that launches the learning activity.
If the learning activity’s URL requires a query string for other purposes, then the names must not collide with named parameters defined below.
The order of the name/value pairs is not significant. AU’s must have the ability to process them in any order.
Each value for the associated names must be URL-encoded.
The format of the launching URL is as follows:
<URL to AU>
?endpoint=<URL to LMS Listener>
&fetch=<Fetch URL for Authorization Token (optional)– if OAuth is not used>
&actor=<Actor Object>
®istration=<Registration ID>
&activityId=<AU activity ID>
Example:
http://la.cmi5.aicc.org/LA1/Start.html
?endpoint=http://cmi-5-lms-system.org/lrslistner/
&fetch=http://cmi-5-lms-system.org/tokenGen.htm?k=2390289x0
&actor={"objectType": "Agent","account":
{"homePage": "http://www.example.com","name": "1625378"}
®istration=760e3480-ba55-4991-94b0-01820dbd23a2
&activityId=http://example.AU-content.com/example/001/statement
The values for the URL launch parameters are described below:
endpoint | ||
---|---|---|
Description: | A URL to the LMS listener location for xAPI messages to be sent to. | |
LMS Usage: | LMS must place the endpoint in the query string.The LMS should limit the use of the auth value for the duration of a specific/user/learning activity/registration | |
AU Usage: | AU must get the endpoint value from the query string. AU must use the endpoint value as the URL to send xAPI messages to. | |
Data type: | String (URL-encoded) | |
Value space: | An URL-encoded URL | |
Sample value: | https://mylms.aicc.org/MyCMI5_listener.pl |
fetch | ||
---|---|---|
Description: | The fetch URL is used by the AU to obtain an authentication token created & managed by the LMS. The fetch URL is only used when OAuth authentication is not practical or desired. The authentication token is used by the learning activity being launched. | |
LMS Usage: | The LMS must place the fetch in the Launch URL when Basic authentication is indicated in the course structure definition. If OAuth is the method of authentication specified, the LMS must NOT place the fetchname/value pair in the query string. The fetch URL is a "one-time use" URL and subsequent uses should generate an error as defined in section 8.2. The authorization token returned by the fetch URL must be limited to the duration of a specific user session. | |
AU Usage: | When Basic authentication is used, the AU must get the fetch value from the query string. The AU must make an HTTP POST to the fetch URL to retrieve the authorization token as defined in section 8.2. The AU must then place the authorization token in the Authorization headers of all HTTP messages made to the endpoint using the xAPI. The AU should not make one more than 1 post to the fetch URL | |
Data type: | String (URL-encoded) | |
Value space: | Defined by the LMS | |
Sample value: | http://cmi-5-lms-system.org/tokenGen.htm?k=2390289x0 |
actor | ||
---|---|---|
Description: | A JSON object called “actor” (as defined in the XAPI specification) that identifies the learner launching the learning activity so the learning activity will be able to include it in XAPI messages. | |
LMS Usage: | The LMS must place the value for actor in the query string based on the authenticated learner’s identity. The LMS should create an actor object specific to the LMS instance that does NOT include sensitive PII of the learner. | |
AU Usage: | AU must get the actor value from the query string. AU must use the actor value in API calls that require an “actor” object when sending XAPI messages | |
Data type: | String (URL-encoded) | |
Value space: | A JSON Actor object (as defined section 9.2) | |
Sample value: | {"objectType": "Agent","account": {"homePage": "http://www.example.com","name": "1625378"} |
registration | ||
---|---|---|
Description: | A Registration ID corresponding to the learner’s enrollment for the AU being launched. | |
LMS Usage: | LMS must place the value for registration in the query string based on the authenticated learner’s corresponding enrollment for the Course that the AU being launched is a member of. | |
AU Usage: | AU must get the registration value from the query string. AU must use the registration value in API calls that require an “registration id” when sending XAPI messages | |
Data type: | String (URL-encoded) | |
Value space: | UUID (as defined in the XAPI specification) | |
Sample value: |
activityId | ||
---|---|---|
Description: | The Activity ID of the AU being launched. | |
LMS Usage: | The LMS must place the value for activityId in the query string based on the definition of the AU in the course structure. | |
AU Usage: | AU must get the activityId value from the query string. AU must use the activityId value in API calls that require an “activity id” when sending XAPI messages. | |
Data type: | String (URL-encoded) | |
Value space: | IRI (as defined in the CMI-5 Course Structure section 7.1.4, AU Meta data) | |
Sample value: |
##8.2 Authorization Token Fetch URL ###8.2.1 Overview When Basic authentication is used, the LMS must include the fetch name/value pair in the launch URL. The AU must make an HTTP POST to the fetch URL to retrieve an authorization token. Please note than an HTTP GET is not allowed in order to prevent caching of the request.
The fetch URL must return a JSON structure using a content-type of "application/json". An example JSON structure is shown below:
{
"auth-token": "QWxhZGRpbjpvcGVuIHNlc2FtZQ=="
}
The AU must place the auth-token in the HTTP header, as defined in RFC 1945 - 11.1 Basic Authentication Scheme, in all subsequent xAPI communications with the LMS. The authorization token returned by the fetch URL must be limited to the duration of the session.
The AU should not attempt to retrieve the authorization token more than once. The fetch URL is a "one-time use" URL and subsequent uses should generate an error (see Section 8.2.3).
###8.2.2 Definition: auth-token
auth-token | ||
---|---|---|
Description: | An authorization token used in all xAPI communications with the LMS when Basic authentication is used. | |
LMS Usage: | The LMS must place the value for auth-token in a JSON structure, as shown in section 8.2.1, in its response to a fetch URL request. The response must have a content-type of "application/json". | |
AU Usage: | AU must get the auth-token value using an HTTP POST to the fetch URL. The AU must then place the authorization token in the Authorization headers of all HTTP messages made to the endpoint using the xAPI. | |
Data type: | String (URL-encoded) | |
Value space: | Defined by the LMS | |
Sample value: | QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
###8.2.3 Errors ####8.2.3.1 Duplicate call to fetch URL The fetch URL is a "one-time use" URL and only the first request should return the auth-token. Subsequent requests made to the fetch during the session should generate an error. The error should be returned in the form of a JSON structure using content-type "application/json".
{
"error-code": "1",
"error-text": "The authorization token has already been returned."
}
####8.2.3.2 Error Values The following error-code are allowed.
Code | Meaning |
1 | Already in Use or Expired |
2 | General Security Error |
3 | General Application Error |
The values for error-text are defined by the LMS.
##8.3 Other Launch Environments
Other launch environments are not currently implemented in this specification. The following launch environments are being considered for future releases:
- Windows/XP/7/8 pro
- Windows RT
- Mac OS X
- Linux
- Android
- iOS
CMI-5 implementations for LMS’s and AU’s in these other environments will use the same REST communication interface as specified in XAPI specification. The XAPI specification does not specify launch mechanisms.
#9.0 XAPI Statement Data Model##9.1 Statement ID The AU will not provide a statement ID for CMI-5 defined statements. (The LRS will assign statement IDs)
##9.2 Actor The Actor object will be defined by the LMS. The Actor object for all statements with CMI-5 defined verbs must be of type "Agent" and must contain an account object.
Example of usage in a statement:
{
"actor": {
"objectType": "Agent",
"account": {
"homePage": "http://www.example.com",
"name": "1625378"
},
"verb": {...},
"object": {...},
"result": {...},
"context": {...},
"attachments": {...}
}
The following are XAPI verbs that are specific to this specification.
AU’s must use the below verbs indicated as mandatory in other sections of this specification.
AU’s may use additional verbs not listed in this specification.
LMS system must record and provide reporting for all statements regardless of which verbs AU’s use in statement.
###9.3.1 Launched
Verb | Launched |
---|---|
ID | http://www.aicc.org/cmi5/verbs/launched |
Display | { "en-US" : "Launched" } |
Description | The verb “Launched” indicates that the AU was launched by the LMS. |
AU Obligations | None |
LMS Obligations | The LMS must use this verb in a statement recorded in the LRS before launching an AU. (See Statement API section 10) |
Usage | A "Launched" statement is used to indicate that the LMS has launched the AU. It should be used in combination with the "Initialized" statment sent by the AU in a reasonable period of time to determine whether the AU was successfully launched. |
###9.3.2 Initialized
Verb | Initialized |
---|---|
ID | http://www.aicc.org/cmi5/verbs/initialized |
Display | { "en-US" : "Initialized" } |
Description | A "Initialized" statement is used by the AU to indicate that it has been fully initialized and should follow the "Launched" statement created by the LMS within a reasonable period of time. |
AU Obligations | The AU must use "Initialized" in the first statement in the AU session. |
LMS Obligations | Verify that this verb is recorded by AU immediately after launch |
Usage | A "Initialized" statement is used by the AU to indicate that it has been fully initialized and should follow the "Launched" statement created by the LMS within a reasonable period of time. |
###9.3.3 Completed
Verb | Completed |
---|---|
ID | http://www.aicc.org/cmi5/verbs/completed |
Display | { "en-US" : "Completed" } |
Description | The verb “Completed” indicates the learner viewed or did all of the relevant activities in an AU presentation. |
AU Obligations | The AU must record a statement containing the "Completed" verb when the learner has experienced all relevant material in an the AU. The AU must not issue multiple statements with "Completed" for the same AU within a given AU session or course registration for a given learner. |
LMS Obligations | None. |
Usage | The criterion for "Completed" is determined by the AU design. |
###9.3.4 Passed
Verb | Passed |
---|---|
ID | http://www.aicc.org/cmi5/verbs/passed |
Display | { "en-US" : "Passed" } |
Description | The learner attempted and succeed in a judged activity in the AU. |
AU Obligations | The AU must record a statement containing the "Passed" verb when the learner has attempted and passed the AU. The AU must not issue multiple statements with "Passed" for the same AU within a given AU session or course registration for a given learner. If the "Passed" statement contains a (scaled) score, the (scaled) score must be equal to or greater than the "MasteryScore" indicated in the course structure. (See course structure section 7.1.4) |
LMS Obligations | The LMS must record "MasteryScore" data in the state API (if present in the course structure) for the AU prior to initial AU launch. (See section 10) The LMS must use either "Passed" or "Completed" statements (or both) based on the moveOn criteria for the AU as defined in Course Structure. (See Course Structure Section 7.1.4 MoveOn). |
Usage | The AU must record a statement containing the "Passed" verb when the learner has attempted and successfully passed the judged activity. The AU must not issue multiple statements with "Passed" for the same AU within a given AU session or course registration for a given learner. If the "Passed" statement contains a score, the score must be equal to or greater than the "MasteryScore" indicated in the course structure. (See Course Structure Section 7.1.4 MasteryScore) |
###9.3.5 Failed
Verb | Failed |
---|---|
ID | http://www.aicc.org/cmi5/verbs/failed |
Display | { "en-US" : "Failed" } |
Description | The learner attempted and failed in a judged activity in the AU. |
AU Obligations | The AU must record a statement containing the "Failed" verb when the learner has attempted and failed the AU. If the "Failed" statement contains a score, the score must be less than the "MasteryScore" indicated in the course structure. (See Course Structure Section 7.1.4 MasteryScore). A "Failed" statement must not be issued after an "Passed" statement has been issued. |
LMS Obligations | The LMS must record "MasteryScore" data in the state API (if present in the course structure) for the AU prior to initial AU launch. (See section 10). The LMS must use either "Passed" or "Completed" statements (or both) for determining for course completion (or course collateral credit) criteria for the AU. (See Course Structure Section 7.1.4 MasteryScore). |
Usage | The AU must record a statement containing the "Failed" verb when the learner has attempted and failed the judged activity. If the "Failed" statement contains a score, the score must be less than the "MasteryScore" indicated in the course structure. (See Course Structure Section 7.1.4 MasteryScore). |
###9.3.6 Abandoned
Verb | Abandoned |
---|---|
ID | http://www.aicc.org/cmi5/verbs/abandoned |
Name | { "en-US" : "Abandoned" } |
Description | The verb “Abandoned” indicates that the AU session was abnormally terminated by Learner action (or due to a system failure). |
AU Obligations | None. |
LMS Obligations | The LMS must use the "Terminated" statement to determine that the AU session has ended. In the absence of an "Terminated" statement the LMS will make the determination if an AU abnormally terminated a session by monitoring new statement or state API calls made for the same leaner/course registration for a different AU. The LMS must record an "Abandoned" statement on behalf of the AU indicating an abnormal session termination. |
Usage | See LMS obligations. |
###9.3.7 Waived
Verb | Waived |
---|---|
ID | http://www.aicc.org/cmi5/verbs/waived |
Display | { "en-US" : "Received Waiver" } |
Description | The verb “Waived” indicates that the LMS has determined that the AU was met by means other than completing the AU. |
AU Obligations | None |
LMS Obligations | The LMS must use this verb in a statement recorded in the LRS when it determines that the AU may be waived. A statement containing a Waived verb must include a "reason" in the extension property of the statement Result. (see section 9.6.2.2) |
Usage | A "Waived" statement is used by the LMS to indicate that the AU may be skipped by the Learner. |
###9.3.8 Terminated
Verb | Terminated |
---|---|
ID | http://www.aicc.org/cmi5/verbs/terminated |
Display | { "en-US" : "Terminated" } |
Description | The verb “Terminated” indicates that the AU was terminated by the Learner and that the AU will not be recording any more statements for the launch session. |
AU Obligations | The AU must record a statement containing the "Terminated" verb. This statement must be the last statement recorded by the AU in a session. |
LMS Obligations | The LMS must use the the "Terminated" statement to determine that the AU session has ended. In the absence of an "Terminated" statement the LMS will make the determination if an AU abnormally terminated a session by monitoring new statement or state API calls made for the same leaner/course registration for a different AU. The LMS must record a "Abandoned" statement on behalf of the AU indicating an abnormal session termination per section 9.3.8 Abandoned. |
Usage | See obligations. |
##9.4 Object The Object in a CMI-5 defined statement represents the AU. An Object must be present as specified in this section in all statements with CMI-5 defined verbs.
###9.4.1 objectType The objectType property of an Object in statements with a CMI-5 verb must be set to "activity".
###9.4.2 id The value of the Object's ID property for a given AU must match the AU ID defined in the URL launch line and the course structure.
The object's definition will have the Activity Type contained in the course structure, as defined in section 4.1.4.1 of the XAPI specification, must be included in the "Launched" statement sent from the LMS to the LRS. This Activity Type describes the general category of the AU and should be one of the following:
- http://www.aicc.org/cmi5/activitytypes/assessment
- http://www.aicc.org/cmi5/activitytypes/tutorial
- http://www.aicc.org/cmi5/activitytypes/simulation
- http://www.aicc.org/cmi5/activitytypes/reference
- http://www.aicc.org/cmi5/activitytypes/jobaid
- http://www.aicc.org/cmi5/activitytypes/video
Example of usage in a statement:
{
"actor": {...},
"verb": {
"id": "http://www.aicc.org/cmi5/verbs/launched",
"display": {
"en-US": "Launched"
}
},
"object": {
"id":"<AU identifier>"
"definition": {
"type": "http://www.aicc.org/cmi5/activitytpes/<activity type>",
"name": {
"en-US": "<activity type name>"
}
},
"objectType": "Activity"
},
"result": {...},
"context": {...},
"attachments": {...}
}
Assessment | |
---|---|
Description: | An activity where the learner is evaluated or judged. |
(definition) type: | http://www.aicc.org/cmi5/activitytypes/assessment |
(definition) name: | { "en-US" : "assessment" } |
Tutorial | |
---|---|
Description: | An activity the learner is presented material for instruction in a defined sequence |
(definition) type: | http://www.aicc.org/cmi5/activitytypes/tutorial |
(definition) name: | { "en-US" : "tutorial" } |
Simulation | |
---|---|
Description: | An activity the learner interacts primarily with a computer-based simulation of system or a physical device |
(definition) type: | http://www.aicc.org/cmi5/activitytypes/simulation |
(definition) name: | { "en-US" : "simulation" } |
Reference | |
---|---|
Description: | An activity where the learner can search for and locate information. The presentation of what information to display is learner directed. |
(definition) type: | http://www.aicc.org/cmi5/activitytypes/reference |
(definition) name: | { "en-US" : "reference" } |
Job Aid | |
---|---|
Description: | An activity where the learner is using a tool or system that help the learner perform a work related task. |
(definition) type: | http://www.aicc.org/cmi5/activitytypes/jobaid |
(definition) name: | { "en-US" : "jobaid" } |
Video | |
---|---|
Description: | An activity where the learner is presented with a video clip as the primary (or only) media presentation. |
(definition) type: | http://www.aicc.org/cmi5/activitytypes/video |
(definition) name: | { "en-US" : "video" } |
##9.5 Result Result may be present in a statement depending on the CMI-5 verb used.
Example JSON:
"result": {
"score": {
"scaled": "0.65",
"raw": "65",
"min": "0",
"max": "100"
},
"success": "false",
"duration": "PT30M",
"extensions": {
"http://www.aicc.org/cmi5/extensions/result/progress": "100"
}
}
A score is not required to be reported. If a score is reported by an AU, the verb must be consistent with Mastery_Score (if defined for the AU in the course structure).
- scaled
A decimal value between 0 and 1. - raw
An integer value between the "min" and "max" properties of the score object. When the "raw" value is provided, the AU must also provide the "min" and "max" values for score. - min
An integer value indicating the minimum value for the "raw" score property. - max
An integer value indicating the maximum value for the "raw" score property.
The success property of result must be set to true for statements having the following CMI-5 defined verbs:
- Passed
- Waived
The success property of result must be set to false for statements having the following CMI-5 defined verbs:
- Failed
- Abandoned
###9.5.3 Completion The completion property of result must be set to true for statements having the following CMI-5 defined verbs:
- Completed
- Waived
The completion property of result must be set to false for statements having the following CMI-5 defined verbs:
- Failed
- Abandoned
###9.5.4 Duration The duration property is a ISO 8601 formatted time value required in certain statements as defined in this section. ####9.5.4.1 AU statements that include duration
The AU must include the duration property in Terminated statements. The AU should calculate duration for Terminated statements as the time difference between Initialized statement and the Terminated statement. The AU may use other methods to calculate the duration based on criteria determined by the AU.
The AU must include the duration property in Completed statements. The AU should calculate duration as the time spent by the learner to achieve completion status.
The AU must include the duration property in Passed statements. The AU should calculate duration as the time spent by the learner to attempt and succeed in a judged activity of the AU.
The AU must include the duration property in Failed statements. The AU should calculate duration as the time spent by the learner to attempt and fail in a judged activity of the AU. ####9.5.4.2 LMS statements that include duration
The duration proprety should be include in Abandoned statements. The duration property should be set as the total session time, calculated as the time between the “Launched” statement and the last statement issued by the AU.
###9.5.5 Extensions ####9.5.5.1 Progress An integer value indicating the completion of the AU as a percentage. The AU may set this value in statements to indicate level of completion between 0 and 100 percent.
##9.6 Context All statements with CMI-5 defined verbs must contain a context as defined in this section.
Sample JSON:
"context": {
"registration": "<registration value provided by LMS>",
"contextActivities": {
"category": {[
{"id": "http://adlnet.gov/CMI5/moveon"},
{"id": "http://adlnet.gov/CMI5/cmi5"}
]}
},
"extensions" {
"sessionId": "<session id provided by the LMS>",
"reason": "<reason for 'waived' verb, if statement is 'waived' statement only>",
}
}
###9.6.1 registration The value for the registration property used in the context object must be the value provided by the LMS. The LMS must generate this value and pass it to the AU via the launch line.
###9.6.2 contextActivities Statements with a results object (section 9.5) that include either "success” or "completion” properties must contain a contextActivities object with the "id" property of "moveon". Other statements must not include this property. The purpose of this property is to facilitate searches of the LRS by the LMS or other reporting systems.
All CMI5 Statements must include an object with the "id" property of "cmi5" in contextActivities. This purpose of this property is to identify CMI5 specific statements during LRS searches.
###9.6.3 extensions The following are extensions specified for CMI-5. Other extensions are permitted provided they do not conflict or duplicate the ones specified here.
####9.6.3.1 sessionId
ID: | http://www.aicc.org/cmi-5/extensions/session |
---|---|
Description: | An unique identifier for an single AU launch session based on actor and course registration |
LMS Usage: | The value for Session ID is generated by the LMS. The LMS must also record the Session ID in the State API (per section 10) prior to launching an AU. The LMS must also provide the Session ID in the context as an extension for all Statements (with CMI-5 defined verbs) it makes directly in the LRS. |
AU Usage: | An AU must include the sessionId provided by the LMS in the context as an extension for all Statements (with CMI-5 defined verbs) it makes directly in the LRS. |
AU Obligation: | Required |
LMS Obligation: | Required |
Data type: | String (URL-encoded) |
Value space: | string value |
Sample value: |
####9.6.3.2 reason
ID: | http://www.aicc.org/cmi5/extensions/result/reason |
---|---|
Description: | Indicates the reason why an AU was "waived" (marked complete by an alternative means) |
LMS Usage: | The LMS must set this value in statements it makes with the "Wavied" verb. The value of reason should be one of the following -
|
AU Usage: | The AU may retrieve this value from the LRS and use it to change presentation behavior based on the "reason". |
AU Obligation: | Optional |
LMS Obligation: | This is a required extension for LMS statements that include the Waived verb |
Data type: | String |
Value space: |
|
Sample value: | Tested Out |
Prior to launching a learning activity, the LMS must create a document in the State API record in the LRS. This must be a JSON document as defined in this section with a document name (stateId) of "LMS.LaunchData". The LMS must only create one State document for the combination of activityId, agent, registration, and stateId. An example of the JSON document is shown below.
{
"contextTemplate": {
"extensions": {
"http://www.aicc.org/cmi-5/extensions/session": "<LMS generated sessionId>"
}
},
"launchMode": "<launchMode value>",
"launchParameters": "<launch parameters from Course Structure>",
"masteryScore": "<mastery score from the Course Structure>",
"moveOn": "<moveOn value from the Course Structure>",
"returnURL": "<URL value>",
"entitlementKey": {
"courseStructure": "<Entitlement data or key from Course Structure>",
"alternate": "<alternateEntitlementKey>"
}
}
The properties for the LMSLaunchData document are described below.
contextTemplate |
---|
Description: Context template for the AU being launched. |
launchMode |
Description: The launch mode determined by the LMS. There are three possible values:
AU Required: Yes LMS Usage: LMS must include a value for launchMode. AU Usage: The AU must conform to the following based on the value of launchMode
Value space: "Normal", "Browse" or "Review" Sample value: "Normal" |
launchParameters |
Description: The launch parameters defined in the CMI-5 Course Structure |
masteryScore |
Description: The MasteryScore from the CMI-5 Course Structure. |
moveOn |
Description: The moveOn value from the CMI-5 Course Structure. |
returnURL |
Description: Used by the LMS when launching the AU if the LMS requires the AU (in a web-browser environment) to redirect the learner when they exit the AU. |
entitlementKey: courseStructure |
Description: Entitlement data or key from the course structure. The EntitlementKey values may be used by the AU to determine if the launching LMS system is entitled to use the AU. |
entitlementKey: alternate |
Description: Entitlement data or key from some other source as agreed upon between the LMS and the AU. The EntitlementKey values may be used by the AU to determine if the launching LMS system is entitled to use the AU. |
ContentSpecific |
Description: Launch parameters that are content specific. The LMS must obtain this value from the course structure. |
State API PUT Properties:
- activityId: Activity ID for the AU (from the course structure)
- agent: agent representing the LMS learner being enrolled. This must match actor object generated by LMS at AU launch time.
- registration: Registration ID representing the LMS learner enrollment in the course. This must match Registration ID used by the LMS at AU launch time.
- stateId: LMS.LaunchData
#11.0 XAPI Agent Profile Data Model
In CMI5, Learner Preferences are scoped to the learner. Both the LMS and the AU may write changes to Learner Preferences in the xAPI Agent Profile. The LMS/LRS may choose to ignore or "override" Learner Preference changes requested by the AU by returning a "403 Forbidden" response as defined in the xAPI specification (section 7.6). The AU must not treat the 403 response as an error condition.
On startup an AU must retrieve the Learner Preferences document from the Agent Profile.
When reading or writing to the Agent Profile, the document name must be CMI5LearnerPreferences and the format must be a JSON structure as shown below:
{
"languagePreference": "<values for languages>",
"audioPreference": "<on or off>"
}
##11.1 languagePreference This must be a comma-separated list of RFC 5646 Language Tags as indicated in the xAPI specification (section 5.2). In the list, languages must be specified in order of user preference. In the example below, the user's first preference for language is en-US. The user's second preference for language is fr-FR and the third preference is fr-BE.
{
"languagePreference": "en-US,fr-FR,fr-BE",
...
}
The AU should display in the language preference order of the user if the AU supports multiple languages. In the example above, if the AU supported "zh-CN", "fr-BE and "fr-FR", it should display in "fr-FR". If the AU does not support multiple languages, or if no languagePreference is specified in the Agent Profile, it may display in its default language.
##11.2 audioPreference The audioPrefence value indicates whether the audio should be "on" or "off". The AU must turn the audio on or off at startup based on this value. If no value is provided in the Agent Profile for audioPreference the AU may use its own default value.
Example:
{
"audioPreference": "on",
...
}
#12.0 XAPI Activity Profile Data Model
The AU may use the Activity Profile API per the xAPI specification (section 7.5 Activity Profile API).
[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
[4] RFC 2396, “Uniform Resource Identifiers (URI): Generic Syntax,” August 1998.
[5] Experience API, Version 1.0.1, ADL, 2012-2013 - https://github.com/adlnet/xAPI-Spec/blob/master/xAPI.md
[6] CMI5-002 – LMS Course Structure, current working draft, AICC, 2013 -
https://github.com/AICC/CMI-5_Spec_Current/blob/master/cmi5_coursestructure.md
THE WORK (AS DEFINED HEREIN) ACCOMPANYING THIS LICENSE AGREEMENT ("AGREEMENT") IS PROVIDED BY THE AICC, A NON-PROFIT CORPORATION ORGANIZED UNDER THE LAWS OF Idaho (“LICENSOR”), TO YOU (“YOU” OR “LICENSEE”) ONLY UNDER THE TERMS AND CONDITIONS OF THIS AGREEMENT. ANY USE, REPRODUCTION, DISTRIBUTION OR MODIFICATION OF THE WORK BY YOU CONSTITUTES YOUR ACCEPTANCE OF THIS AGREEMENT. BY OBTAINING, USING, DISTRIBUTING, REPRODUCING AND/OR MODIFYING THE WORK, YOU AGREE THAT YOU HAVE READ, UNDERSTOOD, AND WILL COMPLY WITH THE FOLLOWING TERMS AND CONDITIONS.
####1. DEFINITIONS
“Affiliate” means any entity that directly or indirectly controls, is controlled by, or is under common control with, another entity, so long as such control exists. For purposes of this definition, with respect to a business entity, “control” means a majority vote of voting members. In the event that such control ceases to exist, any grant of rights or other contractual powers granted to such Affiliate hereunder will be immediately withdrawn, and this Agreement as between Licensor and such Affiliate shall be terminated as set forth in Section 9, below.
“Compliance Test Suite” means any suite of computer programs (e.g., test tools), database schema, plans, procedures, checklists, documentation and the like developed or adopted by or for AICC and approved by AICC for the purpose of determining the compliance of an implementation of a Specification.
“Contribution” means a submission by Licensee or Other Licensee to Licensor in writing (including a writing in electronic medium) of a change, modification or addition to the Work for inclusion in future versions of the Work; and which such submission is accepted for inclusion in the Work by Licensor. Contributions do not include additions to the Work that: (i) are separate works distributed in conjunction with the Work under their own license agreement, and (ii) are not Derivative Works of the Work.
“Contributor” means any Licensee or any Other Licensee person or entity that submits a Contribution.
“Derivative Work” is as defined in the United States Copyright Act 17 U.S.C. § 101, and means any document, standard, specification, computer program, compilation, technical data, schema, XML instance document or similar work that includes or derives from major elements of the Work, whereby such major elements are protected by copyright, patent or any other recognized intellectual property right.
“AICC” means the Aviation Industry Computer Based Training Committee Corporation, a non-profit corporation organized under the laws of Idaho.
“Licensee” means you as a party to this Agreement to include all your Affiliates.
“Necessary Claims” means those claims of all patents and patent applications throughout the world, other than design patents and design registrations, whereby such claims are necessarily infringed by an implementation of a Work and which are within the bounds of the Scope, where such infringement could not have been avoided by another commercially feasible non-infringing implementation of such Work. Necessary Claims do not include any claims (i) other than those set forth above even if contained in the same patent as Necessary Claims or (ii) that read solely on an optional implementation example or optional reference implementation.
“Other Licensee” or “Other Licensees” means a third party licensee (or licensees) other than you, whereby such third party licensee has separately entered into this Agreement with Licensor, to include all Affiliates of such third party licensee.
“Scope” means the software interfaces disclosed with particularity in a Specification where the sole purpose of such disclosure is to enable products to interoperate, interconnect or communicate as defined within a Specification. Notwithstanding the foregoing, the Scope shall not include (i) any enabling technologies that may be necessary to make or use any product or portion thereof that complies with a Specification, but are not themselves expressly set forth in a Specification (e.g., compiler technology, object oriented technology, basic operating system technology); (ii) the implementation of other published specifications not developed by or for AICC, but referred to in the body of a Specification; or (iii) any portions of any product and any combinations thereof the purpose or function of which is not required for compliance with a Specification.
“Specification” means a document entitled “Specification” or “Standard” adopted and approved for release by AICC relating to any AICC implementation, and any updates or revisions adopted and approved for release.
“Standards Organization” means any entity whose primary activities are developing, coordinating, promulgating, revising, amending, reissuing, interpreting, or otherwise maintaining standards that address the interests of a wide base of users or consumers of such standards outside the standards development organization.
“Technical Note” means a proposal, document or guide, other than a Specification, which has been approved for release as a AICC Technical Note. Typically, a Technical Note will contain functional and technical information to aid in the implementation of a Specification as adopted and approved for release by AICC.
“Work” means any Specification, Technical Note or Compliance Test Suite distributed in accordance with and licensed under this Agreement.
####2. LICENSE GRANT AND RESTRICTIONS
a. Subject to the terms of this Agreement, Licensor hereby grants to Licensee a non-exclusive, worldwide, royalty-free license in any copyrights and/or Necessary Claims in the Work such that Licensee may view, use, reproduce, publicly display, distribute and prepare Derivative Works of the Work.
b. Licensee hereby grants to Licensor and all Other Licensees a non-exclusive, worldwide, royalty- free license in any copyrights and/or Necessary Claims in which Licensee asserts ownership, such that Licensor and all Other Licensees may view, use, reproduce, publicly display, distribute and prepare Derivative Works of any Contributions that Licensee may have made to the Work. Licensee agrees that it will not transfer its ownership of any copyrights or patents having Necessary Claims for the purpose of circumventing this Section 2.b. Licensee shall not attempt under its copyrights, Necessary Claims or otherwise to restrict any Other Licensee from exercising that Other Licensee’s rights granted to it by Licensor under an agreement with essentially the same terms and conditions as this Agreement.
c. To the extent that a Licensee reproduces or distributes copies of the Work, portions thereof or any Derivative Work in any medium, with or without modifications, such Licensee shall give a copy of this Agreement to any recipients of the Work.
d. Licensee hereunder expressly agrees to include the following notice on ALL copies of the Work, portions thereof or Derivative Works: "Copyright © The AICC. All Rights Reserved. http://www.aicc.org”
e. Licensee agrees to include the following notice in all Derivative Works: “This product implements and complies with the Version CMI-5 [or other version as applicable] AICC Specifications as published by the AICC at http://www.aicc.org”.
f. Licensee may not facilitate or assist any Learning Technology Standards Organization other than Licensor in co-opting, copying, distributing, publishing or using the Work without prior written approval of Licensor. Licensee may not create any Derivative Work for ownership by, presentation by, distributing by, publishing by or attribution to any Standards Organization or similar entity other than Licensor, unless specifically approved in writing by Licensor.
####3. GRANT OF RIGHTS BY CONTRIBUTORS Subject to the terms of this Agreement, a Contributor hereby grants to Licensor a non-exclusive, worldwide, royalty-free license under all intellectual property rights to make, use, sell, offer to sell, import and otherwise transfer any Contribution of such Contributor. This license shall apply to the combination of the Contribution and the Work.
####4. TRADEMARKS This Agreement does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the copyright notice.
####5. WARRANTY THE WORK ACCOMPANYING THIS AGREEMENT IS PROVIDED "AS IS" WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, AND THE HOLDERS OF ANY COPYRIGHT, PATENT OR OTHER INTELLECTUAL PROPERTY RIGHT THEREIN MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with your exercise of permissions under this Agreement.
####6. LIMITATION OF LIABILITY IN NO EVENT AND UNDER NO LEGAL THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, UNLESS REQUIRED BY APPLICABLE LAW (SUCH AS DELIBERATE AND GROSSLY NEGLIGENT ACTS) OR AGREED TO IN WRITING, SHALL LICENSOR OR ANY CONTRIBUTOR BE LIABLE TO YOU FOR ANY DAMAGES WHATSOEVER, INCLUDING ANY DIRECT, INDIRECT, EXEMPLARY, PUNITIVE, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER ARISING AS A RESULT OF THIS AGREEMENT OR OUT OF THE USE OR INABILITY TO USE THE WORK (INCLUDING BUT NOT LIMITED TO DAMAGES FOR LOSS OF PROFITS, GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES), EVEN IF LICENSOR OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
####7. COMMERCIAL DISTRIBUTION If you include the Work or any Derivative Work in a commercial product offering, you hereby agree to defend and indemnify Licensor and every Contributor (the "Indemnitees ") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnitees, to the extent caused by your acts or omissions in connection with your distribution of the Work in a commercial product offering. Indemnitees shall: a) promptly notify you in writing of such claim, and b) allow you to control, and cooperate with you in, the defense and any related settlement negotiations. Any Indemnitee may participate in any such claim at its own expense.
####8. PROPRIETARY RIGHTS Regardless of who owns the media on which the Work resides or is distributed, the Work expressly remains the intellectual property of Licensor and/or the Contributors, and Licensor and/or the Contributors retain all right, title and interest in and to the Work and all copies thereof. Licensor expressly reserves all rights not specifically granted in this Agreement.
####9. TERMINATION Licensor reserves the right to terminate this Agreement at any time if you are in breach of any of its terms and conditions, copyright laws, or any other applicable laws or regulations. In such a case, the rights granted to you under Section 2 of this Agreement shall be automatically terminated, and you shall be obliged to cease using the Work and immediately destroy any copies of the Work and all backup copies. Termination is not the sole remedy under this Agreement and, whether or not termination is effected, all other remedies, legal and equitable, will remain available.
####10. UPGRADES Licensor is under no obligation under this Agreement to provide any fixes, revisions, upgrades or future versions of the Work to you or to any other party. Should you ever obtain an upgrade of this Work, the terms and conditions of this Agreement shall also apply to the upgrade. The Work is subject to change without notice.
####11. GENERAL
a. Independent Contractors. The parties and their respective personnel are and shall be independent contractors and neither party by virtue of this Agreement shall have any right, power or authority to act or create any obligation, express or implied, on behalf of the other party.
b. Binding Nature. Subject to all other provisions herein contained, this Agreement shall be binding on the parties and their successors and permitted assigns.
c. Assignment. Licensee may not assign or otherwise transfer this Agreement, or any part hereof, nor delegate any of its duties hereunder, whether by operation of law or otherwise, to any third party. Licensee may delegate specific duties and obligations hereunder to an Affiliate, however, in the event that Licensee wishes to assign or transfer this entire Agreement to an Affiliate, Licensee may do so only via a novation whereby all parties agree to such novation in writing and the Affiliate in effect becomes the Licensee hereunder.
d. Severability. If any provision of this Agreement is found by a court of competent jurisdiction to be invalid or unenforceable, such invalidity or unenforceability shall not invalidate or render unenforceable any other part of this Agreement, but the Agreement shall be construed as not containing the particular provision or provisions held to be invalid or unenforceable.
e. Waiver. No delay or omission by either party hereto to exercise any right occurring upon any noncompliance or default by the other party with respect to any of the terms of this Agreement shall impair any such right or power or be construed to be a waiver thereof. A waiver by either of the parties hereto of any of the covenants, conditions or agreements to be performed by the other shall not be construed to be a waiver of any succeeding breach thereof or of any covenant, condition or agreement herein contained.
f. Governing Law; Exclusive Jurisdiction. This Agreement, and all the rights and duties of the parties arising from or relating in any way to the subject matter of this Agreement or the transaction(s) contemplated by it, shall be governed by, construed and enforced in accordance with the law of the State of Idaho (excluding any conflict of laws provisions of the State of Idaho that would refer to and apply the substantive laws of another jurisdiction). Any suit or proceeding relating to this Agreement shall be brought in the state courts of Idaho. Each of the parties consents to the exclusive personal jurisdiction and venue of the state courts located in Idaho.
g. No Construction Against Drafter. The parties agree that any principle of construction or rule of law that provides that an agreement shall be construed against the drafter of the agreement in the event of any inconsistency or ambiguity in such agreement shall not apply to the terms and conditions of this Agreement.
h. Entire Agreement; Modification. This Agreement sets forth the entire, final and exclusive agreement between the parties as to the subject matter hereof and supersedes all prior and contemporaneous agreements, understandings, negotiations and discussions, whether oral or written, between the parties. The parties expressly disclaim the right to claim the enforceability or effectiveness of any other amendments that are based on course of dealing, waiver, reliance, estoppel or other similar legal theory. The parties expressly disclaim the right to enforce any rule of law that is contrary to the terms of this section.
i. Survival. The following sections shall survive any termination of this Agreement: 2.c, 2.d, 2.e, 2.f, 4, 5, 6, 7, 8 and 11.a.