# Open Educational Experience Launcher An Open Educational Experience Launcher is based on four open standards: * [OPDS](https://opds.io/) __an open standard to describe collections of publications__: any edtech app developer can publish an OPDS feed listing the publications (e.g. lessons, assessments, etc) in their app. Other apps can enable teachers to make their own remixes. * [xAPI](https://xapi.com/overview/) __an open standard to collect data about the user's experience__ e.g. scores, answers to questions, usage duration etc. This data is sent to a Learner Record Store (LRS) such as one run by the users own school or institution. xAPI recipes can be used to save and retrieve data about classes, enrollments, and assignments. * [Web Publication Manifest](https://readium.org/webpub-manifest/) __an open standard that provides metadata about publications__ including a listing of the URLs that would be required for a publication e.g. so they can be cached for the publication to be used offline. The WebPub manifest can also provide links to cover images, versions of the publication in other languages, and more. * [oAUTH](https://oauth.net/2/) __an open standard for authentication__: to allow users to authenticate. Taken together these open standards make it possible to browse educational content from multiple apps, collect data about a users experience, and support offline functionality. The launcher supports [app links](https://developer.android.com/training/app-links) to enable launching a publication in a native app instead of a WebView and [xAPI over interprocess communication](../respect-lib-xapi-ipc-shared/README.md) for the native app to send xAPI data about the user's experience back to the launcher. ## Launching a publication using xAPI There are two primary ways to launch xAPI (e.g. from a learning management system): the [Rustici](https://github.com/RusticiSoftware/launch/blob/master/lms_lrs.md) launch method (using a tincan.xml file) and CMI-5. The links section of the publication manifest can be used to provide a link to the tincan.xml. Example links section for a web publication manifest: ```json { "links": [ {"rel": "self", "href": "lesson.json", "type": "application/opds-publication+json"}, { "rel": "https://id.openeel.org/rel/tincanxml", "href": "tincan.xml", "type": "application/xml" } ] } ``` When a link with xAPI support is provided (link rel ```https://id.openeel.org/rel/tincanxml```) the open educational launcher will launch the resource with support to collect data about the learner's experience using xAPI. A TinCan.xml contains the Experience API activity ID and a href that can be used to launch the activity. Example tincan.xml file: ```xml Lesson 1 A demo lesson lesson.html ``` When tincan.xml is used to launch a resource query parameters will be added as per the [Rustici Launch Method](https://github.com/RusticiSoftware/launch/blob/master/lms_lrs.md) to provide the xAPI endpoint URL, authentication, actor, and activity enabling the resource to send usage data back. TinCan.xml files are also commonly generated by eLearning authoring tools such as [Adobe Captivate](https://elearning.adobe.com/2025/05/how-to-use-xapi-in-adobe-captivate-for-smarter-learner-tracking/) and [Articulate Storyline](https://www.articulatesupport.com/article/Publishing-Articulate-Storyline-360-Courses-for-Tin-Can-API)/ __Note__: by nature it is expected that one publication manifest is related to one xAPI launchable activity (a web publication manifest has one set of metadata with one title, one identifier etc). A tincan.xml file can (but normally doesn't) contain multiple activities each with its own name, description, and url. In this case the activity id needs to be specified directly, otherwies it is optional e.g. ```json { "rel": "https://id.openeel.org/rel/tincanxml", "href": "tincan.xml", "type": "application/xml", "links": [ { "rel": "https://id.openeel.org/rel/xapi-activity-id", "href": "https://example.app/id/lesson001" } ] } ``` ## Specifying a Readium Publication Manifest for a given xAPI Activity Sometimes one might have an xAPI Activity ID and want to retrieve the publication manifest for that activity e.g. where an assignment has been assigned using the [assignment recipe](README_ASSIGNMENT_RECIPE.md). This should be specified using the [Activity web publication manifest extension](README_EXTENSION_PUBLICATION.md). The Activity [moreInfo property](https://github.com/adlnet/xAPI-Spec/blob/master/xAPI-Data.md#activity-definition) URL could provide a link to the manifest using [Manifest Discovery](https://readium.org/webpub-manifest/#5-discovering-a-manifest). This is not currently supported.