## Introduction

The learner leaves the content to attend to other responsibilities or just is done for the time being, but they do not note where they stopped. When they return, the content is returned to the page they last attempted. This learner-centric function is enabled by using the bookmarking concept within the Sharable Content Object (SCO). The developer, by coding the content to allow for bookmarking, makes it possible for the learner to return back to the place last attempted, when the content is resumed.

Bookmarking can be used in a variety of ways, depending upon the project requirements. The premise of bookmarking is that the learner can return to the content at the same location as in a last attempt. This information can be used not only to return the learner to that place, but to track the information in the LMS. This can then be used to determine the learner’s first and subsequent entries in the content. The uses are varied and can be used in testing situations, where a learner might have more than one opportunity to complete the test.

By allowing the learner to re-enter the content at a previous location, the content becomes more learner-centric and the flow of the content is enhanced.

## Data Model Elements

The Data Model Elements, Entry, Exit and Location are used primarily to implement bookmarking. The first time the learner has viewed this page, the Welcome banner has been initiated. On subsequent entries to the content, the Welcome Back banner will be displayed.

At this time, please exit the content by leaving this SCO and re-enter to view the Welcome Back banner.

## Entry Data Model Element

The Entry Data Model Element (cmi.entry) is used to determine if the learner is entering the content for the first time or if they are returning from a suspended learner attempt. The determination of whether or not the learner is a first time visitor can be used to customize output information to the learner.

The Entry Data Model Element has three values to enable the developer to determine what kind of information will be gathered. The values are:

- Ab-Initio – the learner has not accessed the SCO during the current learner attempt. It is used for the first learner session, for a learner attempt. For example, the developer can customize the information for the first entry to the content.
- Resume – the learner attempt is resuming from a suspended learner attempt. Data from a previous attempt is available for use. A use case example would have the developer customizing the entry information on subsequent entries.
- “” (empty characterstring) – Used when information cannot be obtained whether the learner is in the first attempt or has previously entered the SCO and returning from a suspended attempt. This value indicates that there is no information of previous access.

For more information about the Entry Data Model Element, please refer to the Run-Time Environment book of SCORM 2004, located at ADLNet.gov.

## Exit Data Model Element

The Exit Data Model Element (cmi.exit) tracks information as to why or how the learner left the content. There are four values that can be used to describe the reason the learner exited or left the SCO.

The four values are:

- Time-out - is used if a limit on the amount of time the learner is allowed in the content is reached. When that time has expired, the learner attempt ends.
- Suspend - indicates the learner has suspended the learning attempt and will return at a later time.
- Normal - indicates that the learner has exited the SCO normally, as determined by the developer. When the learner returns to the SCO, a new learner attempt is begun and a new set of run-time data will be available.
- “” Empty characterstring - This is the default value of Exit Data Model Element. This value indicates that information about how or why the learner exited the SCO could not be determined.

For more information about the Exit Data Model Element, please refer to the Run-Time Environment book of the SCORM 2004, located at ADLNet.gov.

## Location Data Model Element

The Location Data Model Element (cmi.location) can be used to store a location in the SCO. The location could be used to allow the learner to re-enter the SCO at the same point from the previous learner session.

Using the Location Data Model Element enables learners to return to previous points in content after they temporarily stop the learning process. The learners do not have to write down or in some other way note where they were last in the content before they stop the learning process to, for example, take a phone call or attend a meeting.

The Location Data Model Element allows the learner to return to the SCO at the point that was “bookmarked” or set as the stopping point. When the learners re-launch the content, the bookmarked location will be the return point.

For more information about the Location Data Model Element, please refer to the Run-Time Environment book of the SCORM 2004, located at ADLNet.gov.

## SCO Bookmarking

The use of the three Data Model Elements, Entry, Exit and Location make SCO bookmarking possible. An example of bookmarking code is shown on the next page. There are various ways to code for bookmarking, but this is just an example.

Navigating to the SCO is the responsibility of the LMS since it handles all the sequencing aspects for the course content. The LMS stores and allows the SCO to access information set in learner attempt as long as the previous learner session was suspended.

The learner’s session can be suspended by the SCO setting cmi.exit to “suspend” or a “Suspend All” navigation request that comes from the SCO or LMS. These basic requests enable the use of bookmarking, letting the learner return to a previous location after leaving the content.

The SCO must also set the location of where to return. This is handled by setting the cmi.location element to a value. This value is dependent on the implementation of the SCO. There are no requirements on the value of this content, other than it must be a characterstring and LMSs are only required to store up to 1000 characters.

Upon re-entry into the SCO (resuming a learner attempt), the SCO should determine if the learner attempt is being resumed. This is done by retrieving the cmi.entry value. If this value is set to “resume”, then this indicates that the learner attempt is being resumed from a suspended state.

If the learner attempt is being resumed, then the SCO can retrieve the cmi.location to determine where the learner left off. Once this value is retrieved the SCO can use it to take the learner back to where they left of in the SCO.

Key Points to Remember:

- SCO should set the location (cmi.location). How many times this is set is determined by the content creator and the design of the content.
- SCO should provide a way to suspend the learner attempt. Suspending the learner attempt is handled either by setting the cmi.exit to “suspend” or issuing a “Suspend All” navigation request (either from the SCO or LMS). How this is done is outside the scope of SCORM.
- On re-entry, the SCO should check to see if the learner attempt is being resumed (cmi.entry set to “resume”), then retrieve the cmi.location value and take the learner back to where they left off.

## Code for Bookmarking

The following is an example of code that could be used to enable bookmarking.

`function Initialize(){
// Initialize the communication with the LMS’s API Implementation
initializeCommunication();
// Set completion status to incomplete
SetIncomplete();
// Set exit to suspended
storeDataValue( "cmi.exit","suspend" );
// Check for resumed entry state
var entryMode = retrieveDataValue( "cmi.entry" );
// Set a local variable to page 1
var location = 1;
// Check whether resuming SCO
if (entryMode == "resume")
{
// Check if a prior location was set
location = retrieveDataValue( "cmi.location" );
// Get the Error code from the last call
var errorCode = retrieveErrorCode();
// if not set or at the last page, go to first page
if (errorCode == "403" || location == TotalPages())
{
location = 1;
}
}
// present page to learner
DisplayPage( location );
}
function DisplayPage( pn )
{
pageNumber = parseInt(pn);
// catch out of range pages
if (pageNumber <1 || pageNumber > TotalPages())
{
pageNumber = 1;
}
// set location value for bookmark
storeDataValue( "cmi.location", pageNumber );
// render page
.
.
.
}
`

## SCO Bookmarking

This is a graphical rendering of the process of bookmarking.

The learner enters the content; the SCO checks the entry state for either New Learner Attempt or Returning Learner Attempt.

Depending upon the state, the learner will be directed to a new SCO or a previous location that has been stored by cmi.location.

The content is then displayed to the learner.

The content State Change occurs, the page is changed, interactions are submitted or other changes occur.

The location is then updated (cmi.location) to go to the new place in the content.

The other Data Model Elements are then updated as needed, including cmi.interactions, and cmi.suspend_data.

The decision to be made concerning the exit of the SCO. If yes, then the question is asked, is the learner attempt complete? If no, then there will be a loop back to display the content to the learner.

The next decision if exiting the SCO was selected, was for completion of the learner’s attempt on the SCO. If the attempt was complete (yes) then the SCO will set Exit Mode (cmi.exit) to Normal. If no, then the Exit Mode will be set to suspend.

The SCO is exited.

Click here to download a copy of this bookmarking flow.

## Conclusion

SCO bookmarking can be a dynamic and usable tool for both instructional designers and content developers. By enabling it, the learner’s experience in the content is more positive by allowing re-entry to the location last experienced, seamlessly, without notation.

For more information about the Data Model Elements, please view the SCORM documentation at ADLNet.gov.