Skip to Content

Chapitre 8.4 — Les verbes cmi5

⏱️ TL;DR — cmi5 impose un cycle de verbes. Le LMS ouvre le bal avec launched. Puis l’AU prend la main : il envoie initialized en premier, fait son travail, émet completed et/ou passed/failed selon le cas, et clôt obligatoirement par terminated en dernier. Trois verbes restent la prérogative du LMS : abandoned (session coupée sans terminated), waived (AU dispensé) et satisfied (condition de moveOn atteinte). Ces statements-là, structurés et marqués de la catégorie de contexte cmi5, sont dits « cmi5 defined » ; tout autre statement libre que l’AU envoie est « cmi5 allowed ». Ce chapitre te fait maîtriser l’ordre, les rôles, et la structure d’un statement conforme.

🎯 Objectifs

  • Réciter le cycle de verbes cmi5 et savoir qui émet quoi (AU vs LMS).
  • Respecter l’ordre imposé : initialized premier, terminated dernier.
  • Distinguer un statement « cmi5 defined » d’un « cmi5 allowed ».
  • Reconnaître la catégorie de contexte cmi5 dans un statement et savoir pourquoi elle est là.
  • Écrire un statement passed conforme.

Le cycle : qui émet quoi

Neuf verbes structurent une session cmi5. La première chose à intégrer : certains sont émis par l’AU, d’autres par le LMS. Confondre les deux mène à des bugs (un AU qui tente d’émettre satisfied, par exemple, ce qui n’est pas son rôle).

VerbeÉmis parQuand
launchedLMSLe LMS ouvre l’AU (juste avant de passer la main)
initializedAUL’AU démarre — toujours le premier statement de l’AU
completedAUL’apprenant a terminé le contenu
passedAUL’apprenant a réussi (score au moins égal au masteryScore)
failedAUL’apprenant a échoué (score sous le masteryScore)
terminatedAUL’AU se ferme — toujours le dernier statement de l’AU
abandonedLMSSession coupée sans terminated (fermeture brutale)
waivedLMSL’AU est dispensé (prérequis acquis, équivalence)
satisfiedLMSLa condition de moveOn est atteinte (AU, block ou cours)

Retiens la ligne de partage : l’AU émet initialized, completed, passed, failed, terminated. Le LMS émet launched, abandoned, waived, satisfied. L’AU ne décide pas de la satisfaction — il rapporte des faits (« terminé », « réussi ») ; c’est le LMS qui statue (chapitre 8.5).

L’ordre est imposé

cmi5 ne se contente pas de fournir un vocabulaire : il en contraint la séquence. Les règles à connaître :

  • initialized est le premier statement que l’AU envoie. Rien avant (pas de completed « en avance »).
  • terminated est le dernier. Après lui, l’AU n’envoie plus rien.
  • completed, passed, failed vivent entre les deux.
  • Un AU ne mélange pas passed et failed de façon incohérente : une fois passed envoyé pour cette tentative, il n’envoie pas failed derrière.
  • En mode Browse/Review (chapitre 8.3), l’AU n’émet pas de completed/passed/failed comptés.

⚠️ Piège — Oublier terminated. Un AU qui envoie passed puis dont l’apprenant ferme l’onglet sans terminated laisse la session « ouverte ». Le LMS finira par émettre abandoned à sa place — ce qui pollue les données et peut fausser le temps passé. Toujours câbler terminated sur la fermeture (bouton « Quitter », beforeunload, fin de contenu). C’est l’erreur d’intégration cmi5 la plus commune.

💡 Réflexe — Pense « initializedterminated » comme les accolades d’un bloc : tout ce que l’AU rapporte vit à l’intérieur. Ouvre par initialized dès que LMS.LaunchData est lu ; ferme par terminated au tout dernier moment. Entre les deux, tu émets tes completed/passed/failed et tes statements libres.

« cmi5 defined » vs « cmi5 allowed »

Deux catégories de statements coexistent dans une session cmi5. Les confondre, c’est rater la conformité.

  • cmi5 defined — les statements structurés que la spec définit : les neuf verbes ci-dessus, avec la structure imposée (result, context, registration, sessionid…) et, surtout, la catégorie de contexte cmi5. Ce sont eux que le LMS interprète pour le suivi officiel et la satisfaction.
  • cmi5 allowedtout autre statement xAPI que l’AU a le droit d’émettre librement pour tracer finement : « a lancé la vidéo », « a répondu à la question 3 », « a mis en pause ». Ils utilisent le vocabulaire xAPI ordinaire (Partie 6), n’ont pas la catégorie cmi5, mais restent rattachés à la tentative (même registration, même sessionid). Ils enrichissent l’analytics sans perturber la complétion.

La catégorie de contexte cmi5 est le marqueur qui distingue les deux. Un statement cmi5 defined porte, dans context.contextActivities.category, l’activité https://w3id.org/xapi/cmi5/context/categories/cmi5. C’est ce drapeau qui dit au LMS « ce statement est officiel, prends-le en compte ».

💡 Réflexe — La règle mentale : defined = ce que le LMS doit interpréter (les neuf verbes, catégorie cmi5) ; allowed = ce que tu traces en plus, pour toi (vocabulaire libre, pas de catégorie cmi5). Un module riche envoie peu de statements defined (le strict cycle) et beaucoup de statements allowed (le détail de l’expérience).

Anatomie d’un passed conforme

Voici un statement passed cmi5 defined complet, envoyé par l’AU « quiz » de FormaCampus. Repère la catégorie de contexte cmi5, le registration, le sessionid, le masteryScore rappelé, et le score qui justifie le passed.

{ "actor": { "objectType": "Agent", "account": { "homePage": "https://moodle.ecole.fr", "name": "u-2342" } }, "verb": { "id": "http://adlnet.gov/expapi/verbs/passed", "display": { "en-US": "passed", "fr-FR": "a réussi" } }, "object": { "id": "https://formacampus.fr/au/quiz", "objectType": "Activity", "definition": { "name": { "fr-FR": "Quiz évalué" } } }, "result": { "score": { "scaled": 0.9 }, "success": true, "completion": true, "duration": "PT8M12S" }, "context": { "registration": "76c3f2b1-0f1a-4e2d-9a11-2b6c8e1d4f0a", "contextActivities": { "category": [ { "id": "https://w3id.org/xapi/cmi5/context/categories/cmi5" }, { "id": "https://w3id.org/xapi/cmi5/context/categories/moveon" } ], "grouping": [ { "id": "https://formacampus.fr/courses/securite-numerique" } ] }, "extensions": { "https://w3id.org/xapi/cmi5/context/extensions/sessionid": "s-4f8a12", "https://w3id.org/xapi/cmi5/context/extensions/masteryscore": 0.8 } }, "timestamp": "2026-07-15T10:22:41.512Z" }

Lecture guidée, champ par champ :

  • actor : exactement l’apprenant reçu dans le paramètre actor au lancement — on ne le réinvente pas.
  • verb : passed, via l’IRI du vocabulaire ADL http://adlnet.gov/expapi/verbs/passed.
  • object : l’AU lui-même, identifié par l’activityId reçu au lancement.
  • result.score.scaled vaut 0.9au-dessus du masteryScore 0.8, ce qui justifie le passed et met success à true. Le duration est au format ISO 8601 (PT8M12S = 8 min 12 s).
  • context.contextActivities.category contient la catégorie cmi5 (le drapeau « statement defined ») et la catégorie moveon (ce statement compte pour la satisfaction).
  • context.extensions rappelle le sessionid (hérité du contextTemplate de LMS.LaunchData) et le masteryScore utilisé — traçabilité de la décision.

⚠️ Piège — Émettre passed avec un result.score.scaled inférieur au masteryScore, ou sans score du tout, alors qu’un masteryScore a été fourni au lancement. C’est non conforme : quand le LMS transmet un masteryScore, un passed/failed doit porter un result.score.scaled cohérent avec ce seuil. Un passed sans preuve chiffrée sera rejeté par une suite de conformité (CATAPULT, chapitre 8.5).

🔌 Côté intégration — Ce qui fait « remonter » proprement dans le LMS d’un client, ce sont les statements defined correctement formés : bon verbe, catégorie cmi5, registration et sessionid cohérents. Un module qui trace beaucoup mais dont les statements defined sont malformés (catégorie manquante, terminated absent) passera les démos et échouera la certification. Le premier livrable vérifiable d’un contenu cmi5, c’est la conformité du cycle, pas la richesse de l’analytics.

🧭 Sur FormaCampus — L’AU « quiz » de FormaCampus émet, dans l’ordre : initialized à l’ouverture, puis une salve de statements allowed (« a affiché la question 1 », « a répondu à la question 1 »… — le détail pour son tableau de bord), puis, une fois les 10 questions traitées, un completed et un passed defined (score 0.9 ≥ seuil 0.8), et enfin terminated quand l’élève clique sur « Retour au cours » (returnURL). Côté Moodle, seuls les statements defined comptent : Moodle voit passed, applique le moveOn du cmi5.xml, et débloque la suite. Le détail allowed, lui, alimente l’analytics interne de FormaCampus — invisible pour Moodle, précieux pour la pédagogie.

📚 La spec — Le vocabulaire des verbes, l’ordre imposé (initialized premier, terminated dernier), la distinction defined / allowed et les catégories de contexte (.../categories/cmi5, .../categories/moveon) sont définis dans la cmi5 Specification d’ADL, section « xAPI State, Agent Profile, and Statement Data ». Les IRI exactes des verbes et catégories, et les règles précises par verbe, sont à vérifier sur adlnet.gov.

✏️ Exercices

Exercice 1 — Qui émet, dans quel ordre ? Remets ces événements d’une session normale dans l’ordre et indique l’émetteur : (A) terminated, (B) launched, (C) passed, (D) initialized, (E) completed.

✅ Solution

Ordre : B → D → E → C → A (ou B → D → C → E → A ; completed et passed peuvent s’inverser, mais tous deux entre initialized et terminated). Émetteurs : B launched = LMS ; D initialized = AU (premier) ; E completed = AU ; C passed = AU ; A terminated = AU (dernier). Le seul statement du LMS ici est launched ; tout le reste vient de l’AU. initialized ouvre, terminated ferme : c’est non négociable.

Exercice 2 — Defined ou allowed ? Classe ces statements d’un AU : (a) passed avec la catégorie .../categories/cmi5 ; (b) « a mis la vidéo en pause » avec un verbe maison ; (c) initialized ; (d) « a répondu à la question 4 » avec le verbe answered. Lesquels le LMS interprète-t-il pour la complétion ?

✅ Solution

Defined : (a) passed et (c) initialized — ce sont des verbes cmi5 avec la structure et la catégorie cmi5 attendues. Allowed : (b) « a mis en pause » et (d) « a répondu à la question 4 » — statements xAPI libres, sans catégorie cmi5, pour l’analytics fine. Le LMS n’interprète que les defined (a, c) pour la complétion et la satisfaction ; (b) et (d) enrichissent les données mais ne pèsent pas sur le statut de l’AU.

🧠 Quiz de révision

1. Quels verbes l’AU émet-il, et lesquels sont réservés au LMS ?

L’AU émet initialized, completed, passed, failed, terminated. Le LMS émet launched, abandoned, waived, satisfied. L’AU rapporte des faits ; le LMS statue (satisfaction) et gère les cas de coupure (abandoned) ou de dispense (waived).

2. Quelle est la règle d’ordre absolue du cycle ?

initialized en premier, terminated en dernier. Tout ce que l’AU rapporte (completed, passed, failed, statements allowed) vit entre les deux. Rien avant initialized, rien après terminated.

3. Qu’est-ce qu’un statement « cmi5 defined » ?

Un statement structuré défini par la spec : un des neuf verbes cmi5, avec la structure imposée (registration, sessionid…) et la catégorie de contexte cmi5 (.../categories/cmi5). C’est ce que le LMS interprète pour le suivi officiel et la satisfaction.

4. Qu’est-ce qu’un statement « cmi5 allowed », et à quoi sert-il ?

Tout autre statement xAPI que l’AU émet librement pour tracer finement (vocabulaire ordinaire, pas de catégorie cmi5), tout en restant rattaché à la tentative (même registration/sessionid). Il enrichit l’analytics sans peser sur la complétion.

5. Pourquoi un passed doit-il porter un score cohérent avec le masteryScore ?

Parce que si le LMS a fourni un masteryScore au lancement, un passed/failed doit inclure un result.score.scaled cohérent avec ce seuil (au moins égal au seuil pour passed, en dessous pour failed). Un passed sans preuve chiffrée est non conforme et sera rejeté par une suite de conformité comme CATAPULT.


Chapitre suivant : masteryScore, moveOn & satisfaction — comment le LMS transforme tes statements en décision « validé / pas validé ».

Last updated on