Tin Can API, or the Experience API

The developers call this the Tin Can API, but their sponsors, ADL, call it the Experience API or xAPI.

The specification (v1.0.0, 2013-05-21) can be read in this PDF document.

Tin Can is based around the statement. This is defined as "a simple construct consisting of <actor (learner)> <verb> <object>, with <result>, in <context> to track an aspect of a learning experience." There are a number of ways in which a statement could relate to a learning outcome or competence. How might these correspond to InLOC?

  • If the statement "verb" is something like [|http://adlnet.gov/expapi/verbs/completed">completed</a>, or mastered, or passed, the "object" could well be something like a learning outcome, or an assessment directly related to a learning outcome. The object has two properties on top of the expected objectType:
    • id: this can be the same as a LOC id in InLOC
    • definition: this in turn has recommended properties of:
      • name: this is proposed as the LOC title
      • description: this is proposed as the LOC description
      • type: this is proposed as the URI for LOCdefinition or LOCstructure
  • The statement could be that some experiences were had (e.g. an apprenticeship), and the result was the learning outcome or competence. It might therefore be useful to give the URI of an InLOC-formatted learning outcome as part of an xAPI result. Unfortunately, none of the specified properties of the Result object have a URI type, so the URI of a LOC definition would have to go in the extensions property of the result.
  • Often in personal or professional development planning, it is useful to record what is planned. An example of how to represent this, with the object as a sub-statement, is given in the spec section, page numbered 20. The sub-statement can be something similar to the first option above.
  • A learning outcome may form part of the context of an activity in diverse ways. If it is not one of the above, it may be possible to use the context property of a statement, either as a statement reference in the statement property of the context, or as part of the context's extensions.

In essence, the clearest and most straightforward way of linking to an InLOC LOCstructure or LOCdefinition is as a statement object, rather than its result or context. The other options could be seen as giving too many options, which may lead away from useful interoperability.