Skip to Content

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.xml de 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 attribut moveOn et, en option, un masteryScore. 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.xml minimal mais valide.
  • Placer correctement id, <url>, moveOn, masteryScore et <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 item conteneur (un cluster) dans l’arbre organizations de SCORM.
AU (<au>)Block (<block>)
Se lance ?Oui (a une <url>)Non (regroupe seulement)
Dialogue avec le LRS ?Oui (envoie des statements)Non
Équivalent SCORMLe SCOUn item conteneur (cluster)
Porte moveOn / masteryScoreOuiNon (mais agrège la satisfaction)
Peut en contenir d’autresNonOui (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 :

  • id partout est une IRI. Le course, chaque au, chaque block, chaque objective a un id unique et global (une URL). C’est ce même id d’AU que le LMS enverra comme activityId au lancement (chapitre 8.3) et qui sera l’object des statements (chapitre 8.4).
  • <url> est le point d’entrée de l’AU. Elle est relative à l’emplacement de cmi5.xml dans le .zip (comme les ressources SCORM), ou absolue si le contenu est hébergé ailleurs.
  • moveOn est un attribut de l’<au> : Passed, Completed, CompletedAndPassed, CompletedOrPassed ou NotApplicable (défaut). Il dit au LMS quelle condition rend l’AU « satisfait ». On y consacre le chapitre 8.5.
  • masteryScore est 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 émettre passed ou failed.
  • Les <objectives> au niveau du cours sont des cibles partagées ; un AU les référence par idref. 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 de masteryScore. 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 .zip avec, à sa racine, le fichier cmi5.xml (nom imposé, comme imsmanifest.xml l’est pour SCORM) et les fichiers du contenu. Le LMS lit cmi5.xml, reconstitue l’arbre course → block → AU, crée les activités correspondantes et gère les lancements. Un cmi5.xml mal formé, une <url> qui pointe vers un fichier absent, un id dupliqué : et l’import échoue côté LMS. Valide ton cmi5.xml avant de livrer (voir CATAPULT au chapitre 8.5).

🧭 Sur FormaCampus — Le cmi5.xml ci-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 un lesson_status global : 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 un masteryScore de 0.8 sur 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 ton cmi5.xml doit 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 (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 ?

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.

Last updated on