SCORM-ТЕСТ БЕЗ РЕДАКТОРА · EL-BLOG · 4 НОЯБРЯ 2026

Быстрый старт
1. Откройте course/index.html для демо (без сохранения в LMS).
2. Измените course/js/questions.js в текстовом редакторе: title, description,
   passingPercent и questions. correct — индекс с нуля, а не номер ответа.
   Поддерживается 1–30 вопросов, 2–10 вариантов, один правильный ответ.
3. Обновите два title и manifest identifier в course/imsmanifest.xml.
4. Выполните python3 build.py. Полученный scorm-test-demo-1.2.zip загрузите
   как SCORM-активность в LMS. Сам архив исходников импортировать нельзя.
   Без Python: упакуйте СОДЕРЖИМОЕ course в ZIP, без внешней папки.
5. Проверьте итог 80%/passed, 60%/failed, пропущенные вопросы,
   прерывание и повторный вход в ту же попытку, запуск новой попытки через LMS.

Файлы
course/js/questions.js — банк вопросов и настройки.
course/js/engine.js — проверка данных, расчёт, сохранённое состояние.
course/js/scorm.js — учебный адаптер только SCORM 1.2.
course/js/app.js — интерфейс; текст вставляется через textContent.
course/style.css — оформление, включая адаптацию под узкое окно.
tests/test.cjs — автоматические проверки (нужен Node.js 18+).
tests/player.html — локальный имитатор API, не LMS и не валидатор SCORM.
tests/manifest-schema.xsd — объединение схем для проверки манифеста.
prompt.txt — запрос для адаптации содержания с помощью нейросети.

Проверки
node tests/test.cjs
xmllint --nonet --noout --schema tests/manifest-schema.xsd course/imsmanifest.xml
python3 build.py
Для визуального стенда: python3 -m http.server 8135 --bind 127.0.0.1
Откройте http://127.0.0.1:8135/tests/player.html.
Стенд хранит только вымышленные тестовые данные в sessionStorage текущей вкладки.
Он умеет возобновлять попытку и имитировать отказ LMSCommit.

Ограничения
SCORM 1.2, один SCO. Общий балл 0–100; passed/failed после завершения.
Каждый вопрос имеет одинаковый вес. Обратная связь показывается после сдачи.
Ответы сохраняются в cmi.suspend_data, время — в cmi.core.session_time.
Выход suspend намеренно сохраняет текущую попытку, в том числе завершённую.
Повторная сдача — новой попыткой средствами LMS, без локальной кнопки сброса.
Режимы browse/review и завершённая попытка не перезаписывают балл.
Изменение банка инвалидирует старое состояние: оно не перезаписывается,
а пользователь должен начать новую попытку через LMS.
При открытии вне LMS — честный деморежим без сохранения результата.
Нет отчёта cmi.interactions, рандомизации, таймера, защиты от просмотра ответов,
API нейросетей и внешних зависимостей. Не предназначено для защищённого экзамена.
До выдачи учащимся пакет нужно проверить в целевой LMS.
Официальная сертификация и запуск в реальной LMS не проводились.

Происхождение схем
Четыре XSD взяты из архивного SCORM 1.2-пакета блога (loyalty-card).
Уведомления IMS/ADL внутри сохранены. В ims_xml.xsd удалено некорректное
объявление default xmlns для зарезервированного пространства имён xml:
современный XML-парсер отклонял его. targetNamespace и объявления типов
сохранены. Остальные XSD не изменялись.
Документация схем: https://scorm.com/scorm-explained/technical-scorm/content-packaging/xml-schema-definition-files/
Манифест проверен локально по XSD, это не равнозначно сертификации SCORM.

Код примера можно использовать и изменять для собственных учебных проектов.
Схемы XML сохраняют исходные уведомления их правообладателей.
