cmi5: мост между SCORM и xAPI

Автор: Николай СапуновОбновлено: август 202615 мин чтения
Содержание статьи +

Кратко

cmi5 – стандарт обучения, который соединяет подробную модель данных xAPI, позволяющую отслеживать что угодно, с привычными по SCORM упаковкой и запуском. Один раз собранный курс и загружается в обычную систему управления обучением (LMS), и записывает подробные данные в Learning Record Store (LRS). Стандарт создан совместно ADL Initiative и Aviation Industry CBT Committee (AICC); текущий релиз называется «Quartz». Курс cmi5 описывается файлом cmi5.xml, где перечислены один или несколько запускаемых блоков контента (Assignable Unit, AU). Стандарт задаёт девять утверждений (launched, initialized, completed, passed, failed, abandoned, waived, terminated, satisfied), благодаря которым завершение и pass/fail значат одно и то же для любой совместимой системы. Выбирайте cmi5, когда нужны данные xAPI, но отказываться от запуска, назначения и отчётности на стороне LMS, стандартизованных ещё в SCORM, вы не готовы. И только если целевая LMS действительно его поддерживает (в Moodle – лишь через плагины).

Почему это важно

Если вы читали про SCORM и xAPI и пришли к выводу «SCORM простой, но ограниченный, а xAPI мощный, но слишком вольный», то cmi5 создан как раз для этого разрыва. Большинству обучающих продуктов нужен не выбор между аккуратной интеграцией с LMS и подробной аналитикой, а и то и другое сразу. cmi5 пока единственный массовый стандарт, который даёт обе вещи в одном пакете. Статья написана для L&D-директора, основателя EdTech-компании или продакт-менеджера, который решает, какой стандарт должен поддерживать новый курс или платформа, и которому нужно поставить задачу инженерам без погружения в язык спецификации. Каждый тезис привязан к конкретной спецификации, но читать можно без подготовки.

Какую проблему решает cmi5

Начнём с двух стандартов, между которыми стоит cmi5.

Старший – Sharable Content Object Reference Model, почти всегда просто SCORM. Это способ упаковать курс в zip-файл, который любая совместимая система обучения может открыть, воспроизвести и отследить. Представьте грузовой контейнер: любая LMS примет его, не зная, что внутри. Слабость SCORM в том, что он отслеживает лишь фиксированный и скромный набор фактов (завершил ли, какой балл, сколько длилось) внутри браузера, подключённого к LMS. Телефон без связи, симуляция и посекундный просмотр видео ему недоступны.

Младший – Experience API, почти всегда xAPI. Он записывает обучение короткими «предложениями данных» в форме «actor, verb, object» («Мария завершила модуль 3») и может зафиксировать почти что угодно где угодно. Его слабость – обратная сторона силы SCORM: «голый» xAPI ничего не говорит о том, как LMS должна назначать курс, запускать его, считать завершённым и получать отчёт о сдаче. xAPI даёт богатый словарь, но не грамматику взаимодействия с LMS.

В итоге команды стояли перед неприятным выбором. Либо SCORM и бедная модель данных. Либо xAPI и самостоятельная сборка той логики запуска и отчётности, которая в каждой LMS уже была для SCORM, – с надеждой, что ваша версия совпадёт с чужой. cmi5 снимает этот выбор. Сама спецификация определяет его как «профиль использования xAPI с традиционными системами управления обучением». Профиль – набор дополнительных правил поверх xAPI, благодаря которому все, кто решает одну задачу, остаются совместимыми. cmi5 – свод правил, который учит xAPI вести себя внутри LMS как обычный курс.

Рис. 1. cmi5 – мост: он берёт у SCORM упаковку и запуск, у xAPI – модель данных, способную описать что угодно, и добавляет недостающие правила, чтобы xAPI корректно работал внутри LMS.

Что такое cmi5

Самое точное определение уже прозвучало: cmi5 – профиль xAPI для запуска и отслеживания контента из LMS. Всё остальное – детали, которые обслуживают эту идею. Разберём название, а затем устройство.

С названием часто путаются. cmi5 – не пятая версия чего-либо и не аббревиатура, которую нужно расшифровывать. Название происходит от старого термина AICC «cmi» (Computer Managed Instruction). AICC выпустил четыре версии; решив переосмыслить концепцию с нуля, комитет назвал проект «cmi5» – пятым подходом к cmi. «5» – не номер версии, и никакого «cmi6» не будет. Версии cmi5 сегодня различают по имени релиза; текущий – «Quartz». Когда говорят «cmi5 Quartz», имеют в виду текущую редакцию спецификации.

История важна: она объясняет, кто управляет стандартом. AICC – комитет авиационной отрасли по компьютерному обучению, существовавший ещё до SCORM, – начал эту работу в 2010 году на старой технологии обмена сообщениями, а в 2012-м перевёл её на xAPI. После роспуска AICC в 2014 году проект перешёл к ADL Initiative – организации, которая создала SCORM и финансировала xAPI. Сейчас cmi5 ведёт ADL. Отсюда и ощущение, что cmi5 – это «SCORM, заново сделанный на xAPI»: так и есть, то же сообщество решает ту же задачу на новой технологии.

Строительные блоки: курс, AU, блок и пакет

Курс cmi5 состоит из нескольких частей с конкретными названиями. Разобравшись в этих пяти, вы поймёте и остальное.

Assignable Unit, или AU, – основа курса. Это отдельно запускаемая часть учебного контента: один урок, одно видео, одна симуляция. Спецификация называет AU «единицей отслеживания и управления»: его запускает LMS, и он же сообщает балл, завершение и pass/fail. В SCORM отслеживаемая единица – SCO, в cmi5 – AU.

Курс – просто набор AU. LMS обязана поддерживать курсы как минимум из 1 000 AU, так что «курс» – это что угодно, от одного видео до полноценной программы.

Блок (block) – необязательная группа AU внутри курса, что-то вроде папки. Блоки можно вкладывать друг в друга, поэтому структура «Курс → Модуль → Урок» строится без самодельных решений.

Структура курса (course structure) – единственный XML-файл, всегда с именем cmi5.xml. В нём перечислены AU и блоки, их launch URL, заголовки и цели, а также правила завершения. Он прямо заменяет манифест SCORM (imsmanifest.xml) и служит оглавлением, которое LMS читает при импорте.

Пакет курса (course package) – форма поставки. Это может быть zip с cmi5.xml и медиаконтентом, как пакет SCORM. А поскольку cmi5 разрешает размещать контент где угодно в вебе, пакет может состоять из одного файла cmi5.xml со ссылками на удалённый контент. Второй вариант – новая и сильная возможность: в SCORM контент обычно должен лежать внутри пакета на LMS, а в cmi5 тот же урок может находиться на вашем сервере и использоваться во многих курсах сразу («контент как сервис»).

Рис. 2. Пакет cmi5: файл структуры `cmi5.xml` перечисляет блоки и Assignable Unit (AU). Контент может лежать внутри zip или на удалённом сервере.

Как работает курс cmi5: запуск, сессия и девять утверждений

Это та часть, которая была в SCORM и которой не хватало xAPI: точный порядок взаимодействия LMS и контента. cmi5 описывает его строго, поэтому любая совместимая LMS и любой совместимый контент работают вместе без самописных костылей.

Запуск

Когда ученик открывает урок, LMS не просто открывает файл. Она формирует launch URL, через который передаёт контенту всё необходимое для обратной связи. Вот пример:

https://example.com/lessons/fire-safety/start.html
  ?endpoint=https://lrs.example.com/
  &fetch=https://lms.example.com/token?k=2390289x0
  &actor={"objectType":"Agent","account":{"homePage":"https://example.com","name":"1625378"}}
  &registration=760e3480-ba55-4991-94b0-01820dbd23a2
  &activityId=https://example.com/lessons/fire-safety/intro

endpoint – адрес LRS для записи; actor – кто ученик; registration привязывает этот запуск к одной записи на курс; activityId указывает, какой это AU. fetch – одноразовая ссылка, по которой контент получает временный токен доступа к LRS. Неподготовленному читателю здесь важно понять две вещи. Во-первых, это веб-адрес с параметрами, а не обмен вызовами JavaScript, поэтому контенту вообще не нужен браузер. AU в cmi5 может быть нативным мобильным приложением. SCORM, завязанный на JavaScript в браузере, так не умеет. Во-вторых, какой LRS получит данные, решает LMS, а не контент, поэтому организация сохраняет контроль над записями.

Сессия

После запуска контент работает внутри сессии – периода от запуска до завершения с единым session ID, по которому потом группируются все утверждения этого прохода. Сессий на один AU может быть много (ученик может уйти и вернуться), но одновременно активна только одна. У сессии есть и режим (mode): Normal (засчитывается), Browse или Review (повторный просмотр, не меняющий запись). Именно режим не даёт ученику, который пересматривает уже сданный курс, случайно «завершить» его заново.

Девять утверждений, определённых cmi5

Это самый полезный вклад cmi5. Чистый xAPI позволяет придумать любой verb, поэтому «finished» у двух продуктов никогда не совпадает. cmi5 определяет фиксированный набор из девяти стандартных утверждений – xAPI-утверждений с точным согласованным смыслом и специальной категорией cmi5, по которой любой LRS выделит их из общего потока:

  • launched – LMS сейчас запустит AU.
  • initialized – AU стартовал и готов к работе.
  • completed – ученик прошёл контент AU.
  • passed – ученик достиг критерия успеха (балла).
  • failed – не достиг.
  • abandoned – сессия оборвалась аварийно (сбой, закрытая вкладка).
  • waived – LMS освободила ученика от AU (например, зачла прошлый опыт).
  • terminated – AU штатно завершает работу.
  • satisfied – выполнены условия moveOn для блока или всего курса.

cmi5 также указывает, кто отправляет каждое утверждение. LMS записывает launched, waived, satisfied и abandoned (последнее – от имени AU, когда сессия оборвалась). Контент (AU) отправляет initialized, completed, passed, failed и terminated. Completion и pass/fail теперь – отдельные согласованные утверждения, а не произвольный текст, поэтому любая cmi5-система читает их одинаково. Это то самое различие между «завершил» и «сдал», которое SCORM 1.2 размывал, а xAPI сам по себе оставлял неопределённым.

Рис. 3. Одна сессия cmi5. LMS запускает AU; AU инициализируется, затем отправляет completed и passed; LMS записывает satisfied, когда выполнены условия moveOn; AU завершает сессию. У всех утверждений общий session ID.

«moveOn» и mastery: как cmi5 решает, что курс пройден

Даже если стандарт фиксирует pass и fail, нужно правило, что считать пройденным. В cmi5 оно задаётся для каждого AU свойством moveOn – условием, которое ученик должен выполнить, чтобы LMS пустила его дальше. Допустимых значений ровно пять, и они говорят сами за себя:

  • Completed – AU засчитывается, когда контент пройден.
  • Passed – засчитывается, когда набран нужный балл.
  • CompletedAndPassed – нужно и то и другое.
  • CompletedOrPassed – достаточно любого из двух.
  • NotApplicable – AU засчитывается сразу при регистрации ученика (удобно для опроса или вводной части без измеримого результата).

Когда важен балл, у AU может быть mastery score – число от 0 до 1 (0.8 означает 80%), которое LMS передаёт при запуске. Если масштабированный балл ученика достигает mastery score, AU отправляет passed, если нет – failed. Mastery score приходит при запуске, поэтому администратор может поднять или опустить планку, не трогая контент: один и тот же обязательный курс может требовать 70% у одного клиента и 90% у другого.

Это сознательно проще, чем в SCORM. Создатели cmi5 изучили сложный «simple sequencing» и правила ремедиации SCORM – логику, которая решает, какой урок открыть следующим и когда вернуть ученика к материалу, – и намеренно не стали их включать. Их довод: организации предпочитают задавать последовательность в LMS, а не зашивать её в контент. Поэтому cmi5 отвечает только на вопрос «засчитан ли этот блок?», а вопрос «что открывается дальше?» оставляет платформе. Цепочки предусловий и адаптивные ветвления – теперь забота LMS или контента, а не стандарта упаковки.

Пример: один курс по пожарной безопасности, три способа

На цифрах компромисс нагляднее. Возьмём курс из 20-минутного видео по безопасности и теста из 10 вопросов. Ученице Марии нужно набрать 80%, чтобы сдать. Сравним, что в итоге знает каждый стандарт.

В SCORM видео и тест оформляют как SCO. В итоге в LMS хранится фиксированная запись: completion_status = completed, success_status = passed, score.scaled = 0.90, время сессии. Это полезно и поддерживается почти любой LMS, но это потолок. Вы знаете, что Мария сдала, но не знаете, что она пропустила бóльшую часть видео.

С «голым» xAPI плеер может отправлять в LRS поток подробных утверждений: каждое play, pause и каждый ответ на вопрос. По ним можно восстановить, что Мария посмотрела лишь 35% видео. Но сам по себе xAPI не сообщает LMS, что это назначенный курс, когда он считается завершённым и как отметить «сдано» в зачётке. Эту связку вы строите сами.

С cmi5 вы получаете и то и другое. LMS запускает AU с видео и AU с тестом, каждый в своей сессии. AU с тестом отправляет completed и passed с score.scaled = 0.90 (для него задано moveOn CompletedAndPassed). Когда условия moveOn выполнены по всем AU курса, LMS записывает satisfied. Зачётка Марии обновляется так же, как со SCORM. А поскольку в основе cmi5 лежит xAPI, AU с видео может дополнительно отправлять утверждения xAPI Video Profile, из которых видно, что Мария посмотрела лишь 35%. Посчитаем:

Покрытие = уникальные секунды просмотра ÷ длина
         = 420 с ÷ 1200 с
         = 0.35  → реально просмотрено 35% видео

В итоге преподаватель видит в зачётке «сдано, 90%», а в аналитике – «просмотрено 35%, один фрагмент пересмотрен». И всё это из одного курса cmi5, без самописной интеграции с LMS. Ради такого сочетания cmi5 и создавался.

cmi5, SCORM и xAPI: сравнение

Это не конкурирующие версии одного стандарта, а разные компромиссы. В таблице – сравнение, которое действительно нужно командам, с реальной картиной поддержки в LMS.

КритерийSCORM (1.2 / 2004)xAPI («голый»)cmi5 (Quartz)
Что отслеживаетФикс. модель: завершение, балл, времяПочти что угодно, свои утвержденияЧто угодно (xAPI) + 9 стандартных утверждений
Запуск/назначение в LMSДа, стандартизованоНет (строите сами)Да, стандартизовано
Где может работать контентВ браузере, внутри LMSГде угодно, любое устройствоГде угодно, вкл. нативные приложения
Размещение контентаВнутри пакета, на LMSГде угодноВ пакете или удалённо («как сервис»)
Где хранятся данныеLMSLRSLRS (связан с LMS)
Работа офлайнНетДаДа
Завершение и сдачаРазмыто в 1.2Не определено стандартомЧётко разделено
Sequencing / ремедиацияДа (simple sequencing)Н/пНет (намеренно отдано LMS)
Посекундное видеоНетДа (Video Profile)Да (Video Profile)
Поддержка в LMS сегодняПочти повсеместная (Moodle – SCORM 1.2)В Moodle – плагинами; в других LMS – уточнятьУже, чем у xAPI; в Moodle – плагинами
Когда лучшеКурс должен работать в любой LMS уже сейчасОбучение вне LMSНужны данные xAPI и работа через LMS

SCORM по-прежнему безопасный выбор по умолчанию, когда единственное требование – «курс должен загрузиться и передать результаты в существующую LMS клиента уже сегодня»: его поддерживают почти везде. Чистый xAPI подходит, когда обучение идёт вне какой-либо LMS. cmi5 – правильный выбор, когда нужны данные xAPI, но отказаться от назначения и отчётности через LMS нельзя – и при условии, что целевая LMS действительно поддерживает cmi5. Сравнение всех четырёх стандартов, включая LTI, – в статье SCORM, xAPI, cmi5 и LTI: какой стандарт и когда выбрать.

Для российского рынка последнее условие – главное. Moodle, стандарт де-факто для ЭИОС вузов, штатно поддерживает SCORM 1.2, а xAPI и cmi5 подключаются сторонними плагинами [8]. Поддержку cmi5 в российских корпоративных LMS проверяйте у вендора тестовым пакетом до принятия решения: «умеет xAPI» ещё не значит «умеет cmi5». Если ни одна целевая платформа cmi5 не поддерживает, практичный путь – SCORM 1.2 для зачётки плюс отдельный поток xAPI-утверждений в собственный LRS для аналитики видео.

Рис. 4. SCORM даёт почти повсеместную поддержку в LMS при бедной модели данных; «голый» xAPI – подробные данные, но без стандартного взаимодействия с LMS; cmi5 совмещает запуск из LMS и модель данных xAPI.

Частые ошибки, на которые уходит время

Несколько заблуждений о cmi5 кочуют из проекта в проект. Их легко предотвратить заранее и дорого обнаружить поздно.

Первое – считать, что любая LMS, которая «умеет xAPI», умеет и cmi5. Это разные вещи. LMS может хранить xAPI-утверждения, но не поддерживать запуск и упаковку cmi5. Подтверждайте поддержку cmi5 – в идеале проверенную тестами CATAPULT – до принятия решения: без cmi5-совместимой LMS (или системы с LRS) контент cmi5 не запустить.

Второе – ждать от cmi5 sequencing и ремедиации. Их нет, и это намеренно. Если курсу нужно «не сдал тест – вернись к уроку 2», эта логика должна жить в LMS или в контенте, а не в пакете cmi5. Команды, которые переносят сложный sequencing из SCORM 2004, порой узнают об этом с удивлением.

Третье – путать «completed» с «passed» или «satisfied». cmi5 намеренно их разделяет. «Completed» – контент пройден; «passed» – набран балл; «satisfied» – выполнено правило moveOn (которое может требовать одно, оба условия или ни одного). Отчёты без этого различия дают цифры, вводящие в заблуждение.

Четвёртое – забывать, что LRS – полноценная инфраструктура. Как и xAPI, cmi5 нужен LRS для приёма утверждений, встроенный в LMS или подключённый к ней. Отправлять утверждения дёшево, а надёжно хранить миллионы записей и быстро их запрашивать – серьёзная инженерная задача. Выбирайте LRS на раннем этапе.

Пятое – относиться к данным об учениках как к малозначимым. Утверждения cmi5 несут персональные идентификаторы и поведенческий след – это персональные данные по 152-ФЗ. Если основание обработки – согласие, с 1 сентября 2025 года его оформляют отдельно от других документов (ч. 1 ст. 9) [9], а LRS с данными граждан РФ должен работать на базах данных в России (ч. 5 ст. 18) [10]. Удобная деталь стандарта: в launch URL cmi5 ученик передаётся как account с внутренним ID, а не email, – не добавляйте в утверждения лишних идентификаторов. Решите, что собираете, зачем и на какой срок, до первого утверждения.

Построить или купить: где cmi5 в этом решении

Как всегда, начнём с бизнес-вопроса. Поддержка cmi5 состоит из двух частей, и стоят они очень по-разному.

Создание контента cmi5 обычно обходится дешевле и всё чаще вообще не требует разработки. Большинство современных редакторов курсов экспортируют cmi5 напрямую; если исходники уже есть в SCORM, «переход на cmi5» может свестись к повторному экспорту из того же редактора. Разрабатывать придётся собственную логику контента и свои xAPI-утверждения сверх девяти стандартных; для видеопродукта это плеер, который отправляет корректные утверждения Video Profile внутри сессии cmi5.

Поддержка cmi5 на стороне платформы – решение крупнее. Если вы покупаете или дорабатываете LMS, поддержка cmi5 (и подключённый LRS, размещённый в РФ) – пункт чек-листа, который нужно проверить, а не разработать; для Moodle это выбор и аудит стороннего плагина. Если же вы строите платформу обучения, реализовать сторону LMS в cmi5 – запуск, управление сессиями, обработку девяти утверждений, проверку moveOn – серьёзная работа. Она оправдана, только если стандартная совместимость – требование к продукту. Шире этот выбор разобран в статье построить, купить или расширить LMS. Чтобы с первого раза принять верное решение и правильно собрать пакет, скачайте чек-лист готовности cmi5.

Где здесь Фора Софт

Фора Софт с 2005 года создаёт ПО для видеообучения, стриминга, конференций и интерактивных плееров – более 250 завершённых проектов. В обучающих продуктах мы помогаем командам принять именно то решение, которому посвящена статья: оставить экспорт в SCORM, если курс просто должен запуститься в существующей LMS клиента, или перейти на cmi5, если продукту нужны подробные данные xAPI о видео и интерактиве без отказа от запуска и отчётности через LMS. Обычно мы работаем на уровне видео и интерактива: делаем плеер, который работает как AU cmi5 и отправляет корректные утверждения Video Profile в стандартный LRS, чтобы зачётка ученика и аналитика вовлечённости брались из одного источника. Слой трекинга мы рассчитываем на продакшен и реальную нагрузку, а не только на успешный демо-импорт.

Главное

  • cmi5 соединяет подробные данные xAPI с упаковкой по образцу SCORM и запуском из LMS.
  • Курс – это cmi5.xml плюс Assignable Unit (AU); контент может быть удалённым.
  • Девять стандартных утверждений делают completion и pass/fail однозначными в любой системе.
  • Правило moveOn и mastery score определяют, когда AU засчитан.
  • cmi5 намеренно отказался от sequencing SCORM – эта логика уходит в LMS.
  • Выбирайте cmi5, когда нужны и данные xAPI, и работа через LMS; поддержку в LMS подтвердите заранее (в Moodle – плагины, в российских LMS – уточнять у вендора).

Что почитать дальше

Строите такую систему?

Подберём параметры кодирования под ваш контент и посчитаем стоимость доставки до старта разработки.