Lectora Inspire 12.0 | Best Practices for xAPI

By Sean Putman (VP Learning and Development, Altair Engineering)

Inspire_Packaging-489x397

In terms of xAPI support, Lectora offers a lot right out of the box. Lectora has the ability to assign statement generation to any object within a page using a trigger. Each page also generates its own statement without having to do anything other than set the output type for publishing.

Before getting started with your project be sure to go into the settings and select xAPI for the publish type. By doing this ahead of time you will have access to all of the xAPI statement generation capabilities during the development process. You could develop all of the pages and then go back and set the option. You would then have to revisit all of the elements that make up the course.

Lectora offers support of xAPI statements for the following items:

  • Objects within a page
  • Pages
  • Quizzes
  • Courses

Objects within a Page

As stated in the overview, Lectora offers the ability to generate statements from any object by use of an Action. The Actions in Lectora are added to an object using the xAPI Statement option.

xAPI Option in the Action menu

xAPI Option in the Action menu

The xAPI Statement action contains a set of predefined verbs.

Standard verb list for an Action

Standard verb list for an Action

However, you can also create your own verb. You can create the verb by typing into the field. The verb is then appended to the bottom of the list.

 

verb_list

Custom verb created in the list

With the verb set, the object needs to be defined. The Object can come from the title of the entity or can be typed into the field. Here is an example of the Object definition coming from the Lectora entity name:

Object name taken from the entity

Object name taken from the entity

Here is an example with the Object definition typed in:

object_typed

Object name typed into field

Now with the definition complete, you need to publish to xAPI. Once published here is what the statements look like for those published from objects in Lectora.

Statements from Lectora entities on a page

Statements from Lectora entities on a page

Best Practices

Whenever possible use the object name to define the xAPI Object.

When defining the verb, it is a good idea to check to see if there is a community of practice that has a set vocabulary and how to use the verbs.

Rationale

If the object name ever changes, the xAPI Object definition will automatically update. This will make it easier to keep track of what entities relate to what statements based on the name given to them in the page list. If different names are given it will require more work going through each entity to see what the Object definition in the statement is coming from.

Making sure the verbs are used correctly with a community of practice means you are being consistent in your usage of the vocabulary. Along with that, use the defined verbs whenever possible. This will help make sure there is consistency with the data being generated. It might be a good idea if several people are developing courses in Lectora to setup your own shared vocabulary set for use between the developers. It will help keep consistency in the usage of the verbs and a consistent meaning for the statements.

Pages

Lectora will create statements from all defined pages within the course automatically. The pages will use the verb experienced and the page name will be used as the object. Here is an example of the statement generated by the page:

Statement generated by a page

Statement generated by a page

Best Practices

Since the Object is defined by the page name, it is important to give all the pages in a course a logical name.

Rationale

If a logical name is not given, the statement will appear with the default name.

Statement generated with default page name

Statement generated with default page name

With a logical name the data will be much easier to read and analyze. The statement for experiencing a page can help define the path a user took by telling you what page they are on. Once you know the page, you can define what items they have interacted with on the page. It is especially helpful if you have items that are common across pages, (i.e. Menu, Next button, Previous button, Home button, etc. ).

Quiz Best Practices

Lectora generates statements for questions added to the course. There are several statements that are generated for each question. Each question will have a statement showing the question page was experienced:

question_page

Question page statement

There will be a statement generated that the question was answered:

Question answered statement

Question answered statement

The answer selected can be found in the JSON of the statement. The overall quiz will also generate several statements. The first statement will be an attempted statement for the course. The statement will use the course ID as the object and will include the score generated by the quiz. The statement will be generated after all questions have been answered.

attempted_score

Statement generated for attempting the quiz

A statement will be generated for pass or fail using the course ID as the object with the score generated.

pass_fail_score

Statement generated for the course with a score

Finally, a statement will be generated using the quiz name as the object and whether the user passed or failed the quiz.

quiz_passed_failed

Quiz pass or fail statement

The object for the statement is taken from the quiz name defined.

Best Practice

When creating the quiz and questions, giving logical names to the quiz and question pages is important.

Rationale

As with the other named entities it is important to give logical names. The data will be so much cleaner with logical names given to the items you are trying to track. The quiz should be named, especially if there are multiple quizzes within a published output. Test 1, Test 2, etc. aren’t very logical and make it harder after collecting the data to make sense of it. That also goes for the question pages and giving them a logical name. While you will get an answered statement for each question, the statements don’t come necessarily in the order you think. It will be much easier to match pages to questions with logical names.

JSON Examples

Object within a Page

Sean Putman launched ‘Rollover’

{
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/launched",
        "display": {
            "en-US": "launched"
        }
    },
    "timestamp": "2015-09-18T01:54:51.484Z",
    "object": {
        "id": "http://www.uniqueurl.com/lectora_statements-A001/Rollover",
        "definition": {
            "name": {
                "en-US": "Rollover"
            }
        }
    },
    "context": {
        "contextActivities": {
            "parent": {
                "id": "http://www.uniqueurl.com/lectora_statements-A001"
            }
        },
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e"
    },
    "actor": {
        "name": "Sean Putman",
        "mbox": "mailto:sputman34@gmail.com"
    },
    "id": "bba06dcc-8357-4158-b8ff-64eea5a2a2dd",
    "stored": "2015-09-18T01:54:26.990Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

Object within a Page and Custom Verb

Sean Putman clicked ‘Next Button’

{
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/clicked",
        "display": {
            "en-US": "clicked"
        }
    },
    "timestamp": "2015-09-11T14:53:04.971Z",
    "object": {
        "id": "http://www.uniqueurl.com/lectora_statements3/Next Button",
        "definition": {
            "name": {
                "en-US": "Next Button"
            }
        }
    },
    "context": {
        "contextActivities": {
            "parent": {
                "id": "http://www.uniqueurl.com/lectora_statements3"
            }
        },
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e"
    },
    "actor": {
        "name": "Sean Putman",
        "mbox": "mailto:sputman34@gmail.com"
    },
    "id": "ab0b1b34-0a19-4e30-b380-42419888e7c4",
    "stored": "2015-09-11T14:53:00.135Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

Page

Sean Putman experienced ‘Setting the Actor’

{
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/experienced",
        "display": {
            "en-US": "experienced"
        }
    },
    "timestamp": "2015-09-11T14:56:07.849Z",
    "object": {
        "id": "http://www.uniqueurl.com/lectora_statements3/a001_setting_the_actor.html",
        "definition": {
            "name": {
                "en-US": "Setting the Actor"
            }
        }
    },
    "context": {
        "contextActivities": {
            "parent": {
                "id": "http://www.uniqueurl.com/lectora_statements3"
            }
        },
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e"
    },
    "actor": {
        "name": "Sean Putman",
        "mbox": "mailto:sputman34@gmail.com"
    },
    "id": "50fb55c2-efad-4709-a221-e30c7d6cce1c",
    "stored": "2015-09-11T14:56:01.730Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

Quiz Question: Answered

Sean Putman answered ‘How many files link to the head section?’

{
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/answered",
        "display": {
            "en-US": "answered"
        }
    },
    "object": {
        "id": "http://www.uniqueurl.com/lectora_statements3-Question__1_3074_1441983197384",
        "definition": {
            "description": {
                "en-US": "How many files link to the head section?"
            },
            "type": "http://adlnet.gov/expapi/activities/cmi.interaction",
            "interactionType": "choice",
            "correctResponsesPattern": [
                "3"
            ]
        }
    },
    "timestamp": "2015-09-11T14:53:05Z",
    "context": {
        "contextActivities": {
            "parent": {
                "id": "http://www.uniqueurl.com/lectora_statements3"
            },
            "grouping": {
                "id": "http://www.uniqueurl.com/lectora_statements3-"
            }
        },
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e"
    },
    "result": {
        "response": "3",
        "success": true
    },
    "actor": {
        "name": "Sean Putman",
        "mbox": "mailto:sputman34@gmail.com"
    },
    "id": "e50d7c75-71b2-46b3-8ac9-63a4525511ad",
    "stored": "2015-09-11T14:54:21.617Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

Quiz Complete

Sean Putman passed ‘First xAPI Statements Quiz’

{
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/passed",
        "display": {
            "en-US": "passed"
        }
    },
    "timestamp": "2015-09-11T14:56:32.613Z",
    "object": {
        "id": "http://www.uniqueurl.com/lectora_statements3/First xAPI Statements Quiz",
        "definition": {
            "name": {
                "en-US": "First xAPI Statements Quiz"
            }
        }
    },
    "context": {
        "contextActivities": {
            "parent": {
                "id": "http://www.uniqueurl.com/lectora_statements3"
            }
        },
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e"
    },
    "actor": {
        "name": "Sean Putman",
        "mbox": "mailto:sputman34@gmail.com"
    },
    "id": "658460c9-621c-4dd8-a27a-85f684dcac6e",
    "stored": "2015-09-11T14:56:26.481Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

Course Complete

Sean Putman passed ‘http://www.uniqueurl.com/lectora_statements3’ with score 100

{
    "verb": {
        "id": "http://adlnet.gov/expapi/verbs/passed",
        "display": {
            "en-US": "passed"
        }
    },
    "timestamp": "2015-09-11T14:56:32.434Z",
    "object": {
        "id": "http://www.uniqueurl.com/lectora_statements3"
    },
    "result": {
        "duration": "PT34.93S",
        "success": true,
        "score": {
            "raw": 100,
            "min": 0,
            "max": 100
        }
    },
    "actor": {
        "name": "Sean Putman",
        "mbox": "mailto:sputman34@gmail.com"
    },
    "context": {
        "registration": "36fc1ee0-2849-4bb9-b697-71cd4cad1b6e"
    },
    "id": "ce9c6977-26e0-4d74-9232-78ceaf448c23",
    "stored": "2015-09-11T14:56:26.166Z",
    "authority": {
        "account": {
            "homePage": "http://learnxapi.net/grassblade-lrs/xAPI/",
            "name": "15-557d7b8d7eda474"
        },
        "objectType": "Agent"
    }
}

SEAN PUTMAN (VP, Learning and Development, Altair Engineering)

DSC_4801b-3 Sean Putman, the Vice President of Learning Development for Altair Engineering and the Owner of Intellectus Learning, has been an instructor, instructional designer, and developer for over 15 years. He has spent his career designing and developing training programs, both instructor-led and online, for many different industries.  Sean has also spent the last few years focusing on the use and deployment of the Experience API and its affect on learning interventions.  Sean has spoken at many industry conferences on xAPI and related topics.

Speak Your Mind

*