Chapitre 8.2 — AU, Block & structure de cours
⏱️ TL;DR — Un cours cmi5 est décrit par un fichier
cmi5.xml— l’équivalent moderne de l’imsmanifest.xmlde SCORM. Sa racine<courseStructure>contient un<course>, puis un arbre de deux briques : l’AU (<au>, Assignable Unit), l’unité lançable qui dialogue avec le LRS — le successeur du SCO ; et le Block (<block>), un simple regroupement d’AU (et de sous-blocks). Chaque<au>porte une<url>(le point d’entrée), un attributmoveOnet, en option, unmasteryScore. Des<objectives>partagés permettent la remontée de satisfaction. Ce chapitre te fait lire et écrire ce fichier.
🎯 Objectifs
- Distinguer un AU (lançable) d’un Block (regroupement), et les relier au SCO de SCORM.
- Lire et écrire un
cmi5.xmlminimal mais valide. - Placer correctement
id,<url>,moveOn,masteryScoreet<objectives>. - Comprendre ce qui va dans le paquet cmi5 (
.zip) et comment le LMS l’importe.
Deux briques : AU et Block
Toute la structure cmi5 tient en deux concepts.
- AU — Assignable Unit : l’unité lançable. C’est le contenu que le LMS ouvre et qui dialogue avec le LRS (envoie
initialized,completed, etc.). C’est l’équivalent direct du SCO de SCORM — « assignable » parce que c’est la plus petite chose qu’un LMS peut assigner et suivre individuellement. Un AU a une<url>(son point d’entrée) et des règles de complétion propres. - Block : un regroupement d’AU (et éventuellement de sous-blocks). Il ne se lance pas — il n’a pas d’URL. Il sert à organiser (un chapitre, un module) et à agréger la satisfaction : un block est « satisfait » quand tous ses AU le sont. C’est l’analogue d’un
itemconteneur (un cluster) dans l’arbreorganizationsde SCORM.
AU (<au>) | Block (<block>) | |
|---|---|---|
| Se lance ? | Oui (a une <url>) | Non (regroupe seulement) |
| Dialogue avec le LRS ? | Oui (envoie des statements) | Non |
| Équivalent SCORM | Le SCO | Un item conteneur (cluster) |
Porte moveOn / masteryScore | Oui | Non (mais agrège la satisfaction) |
| Peut en contenir d’autres | Non | Oui (AU et sous-blocks) |
Un cmi5.xml minimal, commenté
Voici une structure complète mais réduite : un cours, un AU hors block (l’intro), puis un block de deux AU (une leçon, un quiz évalué). Lis les commentaires.
<?xml version="1.0" encoding="UTF-8"?>
<!-- La racine. Le namespace pointe la XSD officielle cmi5 d'ADL. -->
<courseStructure xmlns="https://w3id.org/xapi/profiles/cmi5/v1/CourseStructure.xsd">
<!-- UN SEUL <course>. Son id est une IRI qui identifie le cours. -->
<course id="https://formacampus.fr/courses/securite-numerique">
<title>
<langstring lang="fr-FR">Sécurité numérique</langstring>
</title>
<description>
<langstring lang="fr-FR">Les bases de l'hygiène numérique.</langstring>
</description>
</course>
<!-- Objectifs PARTAGES : des cibles pedagogiques que les AU peuvent viser. -->
<objectives>
<objective id="https://formacampus.fr/objectives/mots-de-passe">
<title><langstring lang="fr-FR">Mots de passe robustes</langstring></title>
<description><langstring lang="fr-FR">Savoir creer et gerer un mot de passe fort.</langstring></description>
</objective>
</objectives>
<!-- Un AU HORS block : lancable directement. moveOn="Completed" = -->
<!-- l'apprenant peut avancer une fois l'AU marque "completed". -->
<au id="https://formacampus.fr/au/introduction" moveOn="Completed">
<title><langstring lang="fr-FR">Introduction</langstring></title>
<description><langstring lang="fr-FR">Pourquoi la securite numerique.</langstring></description>
<!-- URL RELATIVE a l'emplacement de cmi5.xml dans le .zip. -->
<url>introduction/index.html</url>
</au>
<!-- Un BLOCK : regroupe deux AU, ne se lance pas lui-meme. -->
<block id="https://formacampus.fr/block/lecons">
<title><langstring lang="fr-FR">Les leçons</langstring></title>
<description><langstring lang="fr-FR">Le coeur du module.</langstring></description>
<au id="https://formacampus.fr/au/lecon-video" moveOn="Completed">
<title><langstring lang="fr-FR">Leçon vidéo</langstring></title>
<description><langstring lang="fr-FR">Video sur les mots de passe.</langstring></description>
<url>lecons/video/index.html</url>
<!-- Cet AU VISE l'objectif partage declare plus haut. -->
<objectives>
<objective idref="https://formacampus.fr/objectives/mots-de-passe" />
</objectives>
</au>
<!-- AU EVALUE : masteryScore = seuil de reussite (0 a 1). -->
<!-- moveOn="CompletedOrPassed" = valide s'il est completed OU passed. -->
<au id="https://formacampus.fr/au/quiz"
moveOn="CompletedOrPassed"
masteryScore="0.8">
<title><langstring lang="fr-FR">Quiz évalué</langstring></title>
<description><langstring lang="fr-FR">10 questions, seuil 80%.</langstring></description>
<url>lecons/quiz/index.html</url>
</au>
</block>
</courseStructure>Quelques points structurants :
idpartout est une IRI. Lecourse, chaqueau, chaqueblock, chaqueobjectivea unidunique et global (une URL). C’est ce mêmeidd’AU que le LMS enverra commeactivityIdau lancement (chapitre 8.3) et qui sera l’objectdes statements (chapitre 8.4).<url>est le point d’entrée de l’AU. Elle est relative à l’emplacement decmi5.xmldans le.zip(comme les ressources SCORM), ou absolue si le contenu est hébergé ailleurs.moveOnest un attribut de l’<au>:Passed,Completed,CompletedAndPassed,CompletedOrPassedouNotApplicable(défaut). Il dit au LMS quelle condition rend l’AU « satisfait ». On y consacre le chapitre 8.5.masteryScoreest un décimal de 0 à 1 : le seuil de réussite. Le LMS le transmet à l’AU au lancement, et l’AU doit en tenir compte pour émettrepassedoufailed.- Les
<objectives>au niveau du cours sont des cibles partagées ; un AU les référence paridref. Cela permet une remontée de satisfaction par objectif, pas seulement par AU.
⚠️ Piège — Confondre Block et AU. Un débutant met une
<url>sur un<block>en croyant qu’il « se lance ». Non : seul un AU se lance. Un block n’a pas d’URL, ne dialogue pas avec le LRS, et ne porte pas demasteryScore. Si tu veux qu’une « section » soit lançable, c’est qu’elle doit être un AU, pas un block.
💡 Réflexe — Découpe en AU au bon grain : un AU = « une chose qu’on veut pouvoir lancer, reprendre et statuer indépendamment ». Trop gros (tout le cours en un AU), tu perds le suivi fin et la reprise. Trop fin (un AU par écran), tu multiplies les lancements et les jetons d’auth. Un AU par « leçon » ou « activité évaluée » est en général le bon compromis.
🔌 Côté intégration — Le paquet cmi5 est un
.zipavec, à sa racine, le fichiercmi5.xml(nom imposé, commeimsmanifest.xmll’est pour SCORM) et les fichiers du contenu. Le LMS litcmi5.xml, reconstitue l’arbre course → block → AU, crée les activités correspondantes et gère les lancements. Uncmi5.xmlmal formé, une<url>qui pointe vers un fichier absent, uniddupliqué : et l’import échoue côté LMS. Valide toncmi5.xmlavant de livrer (voir CATAPULT au chapitre 8.5).
🧭 Sur FormaCampus — Le
cmi5.xmlci-dessus est celui du module « Sécurité numérique » que FormaCampus migre depuis SCORM. En SCORM 1.2, ce module était un seul SCO avec unlesson_statusglobal : impossible de savoir si l’élève avait vu la vidéo et réussi le quiz séparément. En cmi5, FormaCampus le découpe en trois AU (intro, vidéo, quiz), regroupe les deux leçons dans un block, et met unmasteryScorede0.8sur le seul AU évalué. Résultat : un suivi par activité, une reprise fine, et une complétion cadrée — le tout importable dans le Moodle des écoles comme un SCORM.
📚 La spec — La structure de cours est définie dans la cmi5 Specification d’ADL (
adlnet.gov), section « Course Structure », adossée à une XSD (CourseStructure.xsd) contre laquelle toncmi5.xmldoit valider. Les éléments exacts (<courseStructure>,<course>,<block>,<au>,<objectives>,<langstring>) et les attributs autorisés d’un<au>y sont normés. Reste sur la source pour la liste complète et la version courante.
✏️ Exercices
Exercice 1 — Lis la structure. À partir du cmi5.xml ci-dessus, réponds : (a) combien d’unités lançables contient ce cours ? (b) laquelle est évaluée, et à quel seuil ? (c) « Les leçons » est-il lançable ?
✅ Solution
(a) Trois unités lançables — trois <au> : introduction, lecon-video, quiz. (b) L’AU quiz est le seul évalué : il porte masteryScore="0.8", soit un seuil de 80 %. (c) Non : « Les leçons » est un <block>, un simple regroupement. Il n’a pas de <url>, ne se lance pas et ne dialogue pas avec le LRS ; il agrège seulement la satisfaction de ses deux AU.
Exercice 2 — Corrige le manifeste. Un collègue écrit <block id="..."><url>chapitre1/index.html</url> ... </block> et s’étonne que « le chapitre ne se lance pas » dans le LMS. Où est l’erreur, et quelle est la bonne structure s’il veut vraiment lancer ce contenu ?
✅ Solution
L’erreur : il met une <url> sur un <block>, or un block ne se lance jamais — c’est un regroupement sans point d’entrée. Le LMS ignore cette <url> (ou refuse le manifeste). S’il veut que « chapitre1 » soit lançable, ce doit être un <au> : soit un <au id="..." moveOn="..."><url>chapitre1/index.html</url></au> à la place du block, soit — s’il veut à la fois regrouper et lancer — un <block> qui contient un ou plusieurs <au> avec leurs propres <url>. Règle : URL ⇒ AU, toujours.
🧠 Quiz de révision
1. Quelle est la différence entre un AU et un Block ?
Un AU (Assignable Unit) est l’unité lançable : il a une <url>, dialogue avec le LRS et porte ses règles de complétion (moveOn, masteryScore). Un Block est un simple regroupement d’AU (et de sous-blocks) : il ne se lance pas, n’a pas d’URL, mais agrège la satisfaction de ce qu’il contient.
2. À quel élément de SCORM correspond l’AU ?
Au SCO (Sharable Content Object) : la plus petite unité lançable qui dialogue avec le LMS/LRS. Le Block, lui, correspond à un item conteneur (cluster) dans l’arbre organizations de SCORM.
3. Comment s’appelle le fichier de structure, et où est-il dans le paquet ?
cmi5.xml (nom imposé), à la racine du .zip, comme l’imsmanifest.xml l’est pour un PIF SCORM. Le LMS le lit pour reconstruire l’arbre course → block → AU et gérer les lancements.
4. À quoi servent moveOn et masteryScore sur un <au> ?
moveOn et masteryScore sur un <au> ?moveOn (Passed, Completed, CompletedAndPassed, CompletedOrPassed, NotApplicable) dit quelle condition rend l’AU « satisfait ». masteryScore (0 à 1) est le seuil de réussite transmis à l’AU, qui s’en sert pour émettre passed ou failed. Détails au chapitre 8.5.
5. La <url> d’un AU est-elle relative ou absolue ?
<url> d’un AU est-elle relative ou absolue ?Le plus souvent relative à l’emplacement de cmi5.xml dans le .zip (comme les ressources SCORM), pour un contenu empaqueté. Elle peut être absolue si le contenu de l’AU est hébergé ailleurs (contenu distant).
Chapitre suivant : Le lancement — comment le LMS ouvre un AU, lui passe l’apprenant et le LRS, et lui remet un jeton d’auth.