Chapitre 2.2 — SCORM 1.2 vs SCORM 2004
⏱️ TL;DR — Deux versions de SCORM sont vivantes en 2026. SCORM 1.2 (2001) est la plus ancienne et, paradoxalement, la plus répandue : simple, universellement supportée, elle fait tourner l’essentiel des catalogues. SCORM 2004 (jusqu’à sa 4ᵉ édition, 2009) est plus riche : elle sépare la complétion de la réussite (
cmi.completion_statusvscmi.success_status), ajoute un score normalisé (cmi.score.scaled, de-1à1), agranditcmi.suspend_data(64000 caractères contre 4096 en 1.2) et introduit le séquencement (livre SN). Mais 2004 est plus complexe à produire et à supporter. La règle réaliste : 1.2 par défaut pour la compatibilité maximale ; 2004 seulement quand tu as besoin de ce qu’il apporte.
🎯 Objectifs
- Situer les deux versions dans le temps et comprendre pourquoi les deux cohabitent encore.
- Expliquer pourquoi 1.2 reste dominant malgré son âge.
- Énumérer précisément ce que 2004 apporte : complétion/réussite séparées,
cmi.score.scaled,suspend_dataélargi, séquencement. - Lire un tableau comparatif et savoir quoi choisir selon le contexte.
- Éviter les pièges de valeurs de statut propres à chaque version.
Deux versions, une même famille
SCORM a une histoire en couches. SCORM 1.2, sortie en 2001, est la version qui a imposé le standard : assez simple pour être implémentée partout, assez complète pour tracer statut, score et reprise. Puis SCORM 2004 est venue corriger ses limites conceptuelles ; elle a évolué en plusieurs éditions, la dernière étant la 4ᵉ édition (2009). Depuis, SCORM n’évolue plus : l’ADL a tourné son effort vers xAPI et cmi5.
Conséquence pratique : tu ne choisis pas entre « ancien » et « moderne » au sens habituel. Tu choisis entre deux versions figées, chacune supportée par les LMS, avec un compromis compatibilité / richesse différent.
📚 La spec — Les deux versions sont publiées par l’ADL (
adlnet.gov). SCORM 2004 existe en plusieurs éditions ; on parle couramment de la 4ᵉ édition comme référence. On enseigne ici les concepts stables ; pour le détail d’une édition précise, va à la source.
Pourquoi SCORM 1.2 reste ultra-répandu
C’est contre-intuitif : la version la plus vieille est la plus utilisée. Trois raisons solides :
- Support universel. Tout LMS qui « fait du SCORM » fait au minimum du 1.2. C’est le plus petit dénominateur commun : en publiant en 1.2, tu es sûr que personne ne te dira « on ne le prend pas ».
- Simplicité de production. Le modèle de données de 1.2 est plus petit, ses règles plus souples. Les outils auteurs l’exportent sans surprise, et un module 1.2 « juste » est plus facile à obtenir qu’un 2004 parfaitement conforme.
- Le séquencement de 2004 fait peur. La grande nouveauté de 2004 — le séquencement (SN) — est réputée complexe et souvent sous-utilisée. Beaucoup d’équipes ne veulent ni la produire, ni la débuguer, et préfèrent la simplicité de 1.2.
💡 Réflexe — « Le plus récent » n’est pas « le meilleur choix » en interop. Le bon critère est « qu’est-ce qui s’importe partout sans discussion ? ». Pour SCORM, la réponse par défaut reste 1.2.
Ce que SCORM 2004 apporte vraiment
2004 n’est pas un simple lifting. Il corrige des limites de modèle de 1.2. Quatre apports comptent.
1. Complétion et réussite séparées
C’est le progrès conceptuel majeur. En 1.2, un seul champ, cmi.core.lesson_status, mélange tout : ses valeurs possibles sont passed, completed, failed, incomplete, browsed, not attempted. Tu ne peux pas dire à la fois « terminé » et « échoué » proprement : le champ ne porte qu’une information à la fois.
En 2004, ces deux notions sont séparées en deux champs indépendants :
cmi.completion_status— l’apprenant a-t-il parcouru le contenu ? Valeurs :completed,incomplete,not attempted,unknown.cmi.success_status— a-t-il réussi ? Valeurs :passed,failed,unknown.
// SCORM 1.2 : un seul champ, on doit trancher.
api.LMSSetValue("cmi.core.lesson_status", "failed"); // terminé ? réussi ? ambigu
// SCORM 2004 : deux dimensions, sans ambiguïté.
api.SetValue("cmi.completion_status", "completed"); // il a tout parcouru
api.SetValue("cmi.success_status", "failed"); // ... mais il a raté le testCe cas — « a fini mais a échoué » — est courant (un examen final loupé après avoir vu tout le cours). 1.2 le rend maladroit ; 2004 le décrit exactement.
2. Un score normalisé : cmi.score.scaled
1.2 remonte un score « brut » via cmi.core.score.raw (un nombre dont l’échelle dépend du module). 2004 ajoute cmi.score.scaled, un score normalisé de -1 à 1 (souvent lu comme un pourcentage de 0 à 1), en plus de cmi.score.raw, cmi.score.min et cmi.score.max. Avantage : une valeur comparable d’un module à l’autre, indépendante de l’échelle interne — utile pour agréger ou fixer un seuil de réussite.
3. Un suspend_data beaucoup plus grand
suspend_data est le champ où le module sauvegarde son état de reprise (où en est l’apprenant, ses réponses, sa position). En 1.2, cmi.suspend_data est limité à 4096 caractères — vite saturé sur un module riche. En 2004, cmi.suspend_data monte à 64000 caractères. Pour un module avec beaucoup d’états à mémoriser, c’est la différence entre « la reprise fonctionne » et « on tronque et on perd des données ».
⚠️ Piège — Sur un gros module publié en 1.2, empiler tout l’état de reprise dans
cmi.suspend_datadépasse les 4096 caractères et provoque des pertes silencieuses : l’apprenant reprend « au mauvais endroit », ou ses réponses disparaissent. Si ton contenu a un état de reprise volumineux, c’est un argument concret pour 2004 — ou pour compresser/réduire ce que tu stockes en 1.2.
4. Le séquencement et la navigation (livre SN)
2004 ajoute un troisième livre, SN (Sequencing & Navigation), absent de 1.2. Il permet de décrire un arbre d’activités avec des règles de séquencement (dans quel ordre, sous quelles conditions on débloque la suite), des objectives et du rollup (la remontée d’état des activités enfants vers le parent). C’est puissant — mais réputé complexe et souvent sous-exploité. On l’étudie dans la Partie 5 — SCORM 2004 : séquencement.
Le tableau comparatif
| Critère | SCORM 1.2 | SCORM 2004 (jusqu’à la 4ᵉ éd.) |
|---|---|---|
| Année | 2001 | 4ᵉ édition en 2009 |
| Diffusion | La plus répandue, support universel | Répandue, mais moins systématique |
| Objet API JS | API | API_1484_11 |
| Init / fin | LMSInitialize / LMSFinish | Initialize / Terminate |
| Statut | Un seul champ : cmi.core.lesson_status | Deux champs : cmi.completion_status + cmi.success_status |
| Score | cmi.core.score.raw | cmi.score.scaled (-1 à 1) + raw / min / max |
suspend_data | 4096 caractères | 64000 caractères |
| Séquencement (SN) | Non | Oui (arbre d’activités, règles, rollup) |
| Complexité de prod. | Faible | Plus élevée |
| Bon défaut ? | Oui, compatibilité maximale | Si tu as besoin de ses apports |
🔌 Côté intégration — Les noms d’API et les méthodes changent entre versions :
API+LMSInitializeen 1.2,API_1484_11+Initializeen 2004. Un module « find the API » doit chercher le bon objet selon la version qu’il déclare. Un LMS, lui, lit la version annoncée dans le manifeste et expose l’API correspondante. Se tromper de version entre le manifeste et le code du SCO est une cause classique de « le module ne s’initialise pas ».
Quoi choisir aujourd’hui
Une règle simple, à moduler selon le besoin :
- SCORM 1.2 par défaut — si ton objectif est que le module s’importe partout sans discussion et que tu n’as pas besoin de complétion/réussite séparées, ni d’un gros
suspend_data, ni de séquencement. C’est le choix de la compatibilité maximale. - SCORM 2004 — si tu as un vrai besoin de : distinguer proprement « terminé » et « réussi », un score normalisé comparable, un état de reprise volumineux, ou une logique de parcours (séquencement). Tu paies ce gain en complexité de production et de test.
- Ni l’un ni l’autre — si tu veux tracer hors du LMS/navigateur (mobile, présentiel, simulateur) ou des données fines, aucune version de SCORM ne suffit : c’est le domaine de xAPI et cmi5 (Parties 6 à 8). On y revient au chapitre 2.5.
🧭 Sur FormaCampus — FormaCampus tranche pour SCORM 1.2 sur tout son catalogue vendu aux écoles. La raison est commerciale autant que technique : ses clients ont des Moodle et des ENT d’âges variés, et 1.2 passe partout, sans exception. Ce qu’elle gagne : zéro refus d’import, un support client léger, des exports d’outils auteurs sans surprise. Ce qu’elle perd : pas de « terminé mais échoué » propre (elle contourne en définissant une règle claire sur
cmi.core.lesson_status), unsuspend_datalimité à 4096 caractères (elle réduit ce qu’elle sauvegarde pour ne pas déborder), et pas de séquencement (elle gère l’ordre des modules côté LMS, pas dans le paquet). Pour ses nouveaux modules riches, elle ne migrera pas vers 2004 : elle vise directement cmi5 (Partie 8).
✏️ Exercices
Exercice 1 — « Terminé mais échoué ». Un module d’examen : l’apprenant regarde toutes les vidéos puis rate le test final. Comment exprime-t-on cet état en SCORM 1.2 ? Et en SCORM 2004 ? Que perd-on en 1.2 ?
✅ Solution
- SCORM 1.2 : un seul champ,
cmi.core.lesson_status. Il faut trancher : on remonte typiquementfailed(il a échoué), mais on perd alors l’information « il a tout parcouru ». Le champ ne peut pas dire « complété » et « échoué » en même temps. - SCORM 2004 : deux champs indépendants.
cmi.completion_status = "completed"(il a tout vu) etcmi.success_status = "failed"(il a raté le test). L’état est décrit sans ambiguïté.
Ce qu’on perd en 1.2 : la distinction complétion / réussite. C’est précisément l’apport n°1 de 2004.
Exercice 2 — Le module tronqué. Un module 1.2 riche sauvegarde toute la progression, les réponses et les positions dans cmi.suspend_data. En test, la reprise « saute » des passages et perd des réponses de façon aléatoire. Quelle est la cause probable, et quelles sont tes deux options ?
✅ Solution
Cause probable : dépassement de la limite de cmi.suspend_data en 1.2, soit 4096 caractères. Au-delà, les données sont tronquées silencieusement, d’où la reprise incohérente.
Deux options :
- Réduire ce qu’on sauvegarde (compresser l’état, ne garder que l’essentiel, encoder plus compact) pour rester sous 4096 caractères.
- Passer en SCORM 2004, où
cmi.suspend_datamonte à 64000 caractères — si tu peux te permettre 2004 côté compatibilité et complexité.
Exercice 3 — Le bon défaut. Une école cliente te demande un module simple (quelques écrans + un quiz, réussite/échec), à importer dans un Moodle dont tu ne connais pas la version exacte. Quelle version de SCORM proposes-tu, et pourquoi ?
✅ Solution
SCORM 1.2. Le besoin est simple (statut + score, pas de complétion/réussite séparées, pas de séquencement, pas d’état de reprise volumineux), et l’inconnue clé est la compatibilité avec un Moodle de version indéterminée. 1.2 est le plus petit dénominateur commun : support universel, import sans surprise. Choisir 2004 ici n’apporterait rien d’utile et ajouterait un risque de compatibilité et de complexité pour zéro bénéfice.
🧠 Quiz de révision
1. En quelle année sont sorties SCORM 1.2 et la dernière édition de SCORM 2004 ?
SCORM 1.2 en 2001 ; SCORM 2004 a évolué jusqu’à sa 4ᵉ édition en 2009. Depuis, SCORM n’évolue plus — l’ADL a orienté ses efforts vers xAPI et cmi5.
2. Pourquoi SCORM 1.2 reste-t-il le plus répandu malgré son âge ?
Trois raisons : support universel (tout LMS qui fait du SCORM fait au moins du 1.2), simplicité de production (modèle plus petit, exports d’outils sans surprise), et le fait que la nouveauté phare de 2004 — le séquencement (SN) — est réputée complexe et souvent évitée.
3. Quelle distinction majeure SCORM 2004 introduit-il sur le statut ?
La séparation entre complétion et réussite : cmi.completion_status (completed / incomplete / not attempted / unknown) et cmi.success_status (passed / failed / unknown). En 1.2, un seul champ, cmi.core.lesson_status, mélange les deux.
4. Quelle est la taille de cmi.suspend_data en 1.2 et en 2004 ?
4096 caractères en SCORM 1.2, 64000 caractères en SCORM 2004. Sur un module à état de reprise volumineux, la limite de 1.2 peut provoquer une troncature silencieuse et une reprise incohérente.
5. Règle par défaut : quelle version choisir aujourd’hui, et quand déroger ?
1.2 par défaut, pour la compatibilité maximale. On déroge vers 2004 quand on a un besoin réel de complétion/réussite séparées, d’un score normalisé (cmi.score.scaled), d’un gros suspend_data ou de séquencement. Et si le besoin est de tracer hors LMS ou des données fines, on quitte SCORM pour xAPI / cmi5.
Chapitre suivant : CAM, RTE, SN — les trois « livres » qui composent SCORM et le rôle précis de chacun.