Chapitre 11.4 — Caliper Analytics
⏱️ TL;DR — Caliper Analytics (1EdTech) capture des événements d’apprentissage normalisés pour alimenter un tableau de bord. Comme xAPI, sa brique décrit une action — mais en
actor/action/object— en JSON-LD. Sa force est le cadrage : les événements sont regroupés en profils métier (lecture, évaluation, usage d’outil, forum…), les actions viennent d’un vocabulaire fermé, et les entités sont typées. Un composant appeléSensoremballe les événements dans uneEnvelopeet laPOSTvers un endpoint (l’event store). Résultat : des données comparables d’un outil à l’autre dans un écosystème LMS. Versions 1.1 et 1.2. C’est le cousin rigoureux de xAPI ; on tranche entre les deux au chapitre suivant.
🎯 Objectifs
- Expliquer ce que capture Caliper et à quoi sert un tableau de bord analytics.
- Comprendre les profils métier (Metric Profiles) et pourquoi ils cadrent les événements.
- Lire un
EventCaliper :actor/action/object, entités typées, JSON-LD. - Suivre le trajet
Sensor→Envelope→ endpoint. - Situer Caliper comme le cousin cadré de xAPI (comparaison détaillée au chapitre 11.5).
Capturer l’apprentissage, version cadrée
xAPI (Parties 6 et 7) t’a appris à tracer une expérience avec un statement acteur–verbe–objet. Caliper poursuit le même but — décrire ce que fait un apprenant — mais avec une philosophie opposée : la rigueur avant la liberté. Là où xAPI te laisse inventer n’importe quel verbe (une IRI libre), Caliper impose un vocabulaire d’actions fermé et des structures typées, regroupées par profils.
Pourquoi ce cadre ? Pour que les événements soient comparables. Si l’outil A et l’outil B émettent tous deux un AssessmentEvent avec action: "Started", un tableau de bord peut les agréger sans se demander si « commencé », « démarré » et initialized désignent la même chose. Caliper échange un peu de souplesse contre beaucoup de cohérence analytique — exactement ce que veut une institution qui pilote plusieurs outils.
Les profils métier (Metric Profiles)
Caliper ne définit pas « un événement générique » : il définit des profils, chacun couvrant un domaine d’usage avec ses types d’événements, ses actions autorisées et ses entités.
| Profil | Domaine | Événement type | Actions typiques |
|---|---|---|---|
| Assessment | Passer une évaluation | AssessmentEvent | Started, Paused, Submitted |
| AssessmentItem | Répondre à une question | AssessmentItemEvent | Started, Completed, Skipped |
| Reading | Lire une ressource | ViewEvent | Viewed |
| Media | Vidéo / audio | MediaEvent | Started, Paused, Ended |
| Forum | Discussion | ThreadEvent, MessageEvent | Posted, Subscribed |
| ToolUse | Usage d’un outil | ToolUseEvent | Used |
| Grading | Notation | GradeEvent | Graded |
| Session | Connexion | SessionEvent | LoggedIn, LoggedOut |
💡 Réflexe — Avant d’émettre un événement, identifie son profil. « L’élève a démarré un quiz » → profil Assessment,
AssessmentEvent,action: "Started". « L’élève a regardé une vidéo » → profil Media,MediaEvent. Choisir le bon profil, c’est prendre le bon type d’événement et les actions autorisées qui vont avec — tu ne « choisis » pas une action au hasard, tu la prends dans la liste du profil.
Anatomie d’un Event
Un événement Caliper est un objet JSON-LD : du JSON, plus un @context qui donne un sens sémantique aux champs. Voici un AssessmentEvent : « l’élève usr-2342 a démarré le quiz Fractions ».
{
"@context": "http://purl.imsglobal.org/ctx/caliper/v1p2",
"id": "urn:uuid:cf6e0f3b-3511-4254-86f5-6f9b2f1d0a77",
"type": "AssessmentEvent",
"actor": {
"id": "https://formacampus.fr/users/usr-2342",
"type": "Person"
},
"action": "Started",
"object": {
"id": "https://formacampus.fr/assessments/quiz-fractions",
"type": "Assessment",
"name": "Quiz - fractions"
},
"eventTime": "2026-05-12T14:20:00.000Z",
"edApp": {
"id": "https://formacampus.fr",
"type": "SoftwareApplication"
},
"group": {
"id": "https://formacampus.fr/terms/2026/classes/6eA-math",
"type": "CourseSection",
"courseNumber": "MATH-6eA"
},
"membership": {
"id": "https://formacampus.fr/terms/2026/classes/6eA-math/rosters/1",
"type": "Membership",
"member": "https://formacampus.fr/users/usr-2342",
"organization": "https://formacampus.fr/terms/2026/classes/6eA-math",
"roles": ["Learner"]
},
"session": {
"id": "https://formacampus.fr/sessions/sess-8890",
"type": "Session"
}
}Champ par champ :
@context: le contexte JSON-LD — il fixe le vocabulaire et la version de Caliper (iciv1p2). C’est lui qui rend le JSON sémantiquement interprétable.id: l’identifiant unique de l’événement, un URN UUID (urn:uuid:...).type: le type d’événement, imposé par le profil (AssessmentEvent).actor/action/object: le noyau.actor= qui (une entitéPerson),action= quoi (un terme du vocabulaire fermé,Started),object= sur quoi (uneAssessment). Note que chaque entité est typée (type: "Person",type: "Assessment").eventTime: quand, en ISO 8601.edApp: l’application qui a produit l’événement (SoftwareApplication).group: le contexte de classe (CourseSection) — précieux pour agréger par classe.membership: le rôle de l’acteur dans ce groupe (Learner).session: la session applicative, pour relier les événements d’une même connexion.
⚠️ Piège — Inventer une valeur d’
action(« Commenced », « BegunQuiz »…) comme on inventerait un verbe xAPI. Interdit : en Caliper,actionse prend dans le vocabulaire fermé du profil concerné (Started,Submitted,Viewed…). Une action hors-liste casse la comparabilité — et c’est précisément ce que Caliper existe pour éviter. Même chose pourtype: c’est le profil qui dicte les types d’événements et d’entités valides.
💡 Réflexe — Repère le parallèle avec xAPI pour ne pas tout réapprendre :
actor/action/objectde Caliper ≈actor/verb/objectdu statement xAPI (6.2). La grande différence tient en un mot : leverbxAPI est une IRI libre, l’actionCaliper est enfermée dans une liste. Retiens ça : c’est le cœur de la comparaison du chapitre 11.5.
Du Sensor à l’endpoint
Caliper ne se contente pas de définir des événements : il définit comment les envoyer. Le composant émetteur s’appelle un Sensor. Il emballe un ou plusieurs événements dans une Envelope et la POST vers un endpoint (l’event store).
{
"sensor": "https://formacampus.fr/sensors/lms-1",
"sendTime": "2026-05-12T14:20:03.000Z",
"dataVersion": "http://purl.imsglobal.org/ctx/caliper/v1p2",
"data": [
{ "type": "AssessmentEvent", "action": "Started", "...": "..." },
{ "type": "AssessmentItemEvent", "action": "Completed", "...": "..." }
]
}sensor: qui émet.sendTime: quand l’envoi part (distinct de l’eventTimede chaque événement — commestoredvstimestampen xAPI).dataVersion: la version de Caliper des événements du lot.data: le tableau d’événements (on peut en grouper plusieurs par envoi, pour réduire les requêtes).
L’envoi lui-même est un simple POST HTTP :
POST /caliper/events HTTP/1.1
Host: analytics.formacampus.fr
Authorization: Bearer eyJ0eXAiOiJKV1Qi...
Content-Type: application/json
{ "sensor": "https://formacampus.fr/sensors/lms-1", "sendTime": "...", "dataVersion": "...", "data": [ ... ] }À quoi sert le tableau de bord
Une fois les événements dans l’event store, on analyse. Parce que Caliper est cadré, l’agrégation est directe :
- Engagement : combien d’élèves ont démarré vs soumis un
Assessment(un entonnoir de complétion). - Temps passé : durée entre
StartedetSubmitted, par élève, par classe (group). - Repérage des décrocheurs : qui n’a aucun événement depuis dix jours.
- Comparaison inter-outils : parce que « démarrer une évaluation » se dit
AssessmentEvent+Startedpartout, les données de l’outil A et de l’outil B s’additionnent sans retraitement.
C’est là tout l’intérêt du cadrage : un tableau de bord institutionnel veut des indicateurs comparables, pas un musée d’événements hétéroclites.
🔌 Côté intégration — Caliper est né dans le monde des LMS institutionnels (universités, districts) qui veulent une vue analytique unifiée de leurs outils. Si tu vends un outil à ces acteurs, émettre du Caliper aux profils standard te rend agrégeable dans leur tableau de bord — un argument de conformité. 1EdTech propose une certification Caliper. Mais attention : hors de ce monde LMS (mobile, présentiel, informel), le cadre de Caliper devient une contrainte — et c’est là que xAPI reprend l’avantage (chapitre 11.5).
🧭 Sur FormaCampus — FormaCampus veut un tableau de bord pour ses établissements : taux de complétion par classe, temps moyen par quiz, alertes décrocheurs. Techniquement, Caliper est taillé pour ça — événements cadrés,
group= la classe, comparables d’un module à l’autre. Mais FormaCampus a déjà un LRS et émet du xAPI partout, y compris hors LMS (appli mobile, ateliers présentiels). Doit-elle ajouter unSensorCaliper, migrer, ou faire coexister les deux ? La question est posée ; la décision — et sa justification — c’est le chapitre suivant.
📚 La spec — Caliper Analytics est publié par 1EdTech (
1edtech.org), versions 1.1 et 1.2. UnEvent(JSON-LD,@context) porteactor/action/object, des entités typées (Person,Assessment,CourseSection…),eventTime, et un contexte (edApp,group,membership,session). Les actions proviennent d’un vocabulaire contrôlé, regroupé par Metric Profiles (Assessment, Reading, Media, ToolUse, Forum, Grading, Session…). UnSensorémet desEnvelope(sensor,sendTime,dataVersion,data) vers un endpoint. Liste exacte des profils, types d’événements et actions sur1edtech.org.
✏️ Exercices
Exercice 1 — Lis l’événement. D’après l’AssessmentEvent plus haut : qui, quoi, sur quoi, dans quel contexte de classe, et avec quel rôle ?
✅ Solution
Qui : la Person usr-2342. Quoi : l’action Started. Sur quoi : l’Assessment « Quiz - fractions ». Contexte de classe : le group CourseSection MATH-6eA (6e A de maths). Rôle : membership.roles = Learner. L’événement a eu lieu à 14 h 20 (eventTime), produit par l’edApp FormaCampus. Tout est typé : Person, Assessment, CourseSection, Membership.
Exercice 2 — Choisis profil et action. Pour chaque cas, donne le profil, le type d’événement et une action plausible : (a) un élève met une vidéo en pause ; (b) un élève poste un message dans un forum ; (c) un élève se déconnecte.
✅ Solution
(a) Profil Media, MediaEvent, action Paused. (b) Profil Forum, MessageEvent, action Posted. (c) Profil Session, SessionEvent, action LoggedOut. Dans les trois cas, l’action se prend dans la liste du profil — on ne l’invente pas.
Exercice 3 — Sensor et Envelope. Ton app génère 50 événements en une minute. Faut-il 50 POST ? Décris ce que fait le Sensor et pourquoi sendTime diffère de eventTime.
✅ Solution
Non. Le Sensor peut grouper plusieurs événements dans le tableau data d’une seule Envelope et faire un POST (moins de requêtes, plus efficace). eventTime est le moment où chaque événement s’est produit ; sendTime est le moment où le lot part vers l’endpoint. Ils diffèrent (surtout en envoi groupé ou différé) — exactement comme timestamp vs stored en xAPI.
🧠 Quiz de révision
1. Que capture Caliper, et sous quelle forme ?
Des événements d’apprentissage (Event) décrivant actor/action/object, en JSON-LD (avec un @context). Les événements sont regroupés en profils métier (Assessment, Reading, Media…) et alimentent un tableau de bord analytics.
2. Qu’est-ce qu’un Metric Profile ?
Un profil métier qui couvre un domaine d’usage (évaluation, lecture, média, forum, usage d’outil…) en fixant les types d’événements, les actions autorisées et les entités valides. Le profil cadre ce qu’on peut émettre.
3. En quoi l’action Caliper diffère-t-elle du verb xAPI ?
action Caliper diffère-t-elle du verb xAPI ?L’action Caliper se prend dans un vocabulaire fermé (par profil : Started, Submitted, Viewed…). Le verb xAPI est une IRI libre qu’on peut définir soi-même. Caliper = cadré et comparable ; xAPI = souple et ouvert. C’est la différence centrale.
4. À quoi servent le Sensor et l’Envelope ?
Sensor et l’Envelope ?Le Sensor est le composant qui émet les événements. Il les emballe dans une Envelope (sensor, sendTime, dataVersion, data) — pouvant grouper plusieurs événements — et la POST vers l’endpoint (l’event store).
5. Pourquoi le cadrage de Caliper aide-t-il le tableau de bord ?
Parce que les événements sont comparables : « démarrer une évaluation » se dit AssessmentEvent + Started partout. On peut donc agréger engagement, temps passé, décrocheurs à travers plusieurs outils sans retraiter le vocabulaire — exactement ce qu’attend une institution qui pilote plusieurs outils.
Chapitre suivant : 11.5 — Caliper vs xAPI — la comparaison honnête, et comment FormaCampus tranche.