OneRoster (1.2 и расширенные группы)

OneRoster — международный стандарт обмена справочниками учебных заведений (его издаёт 1EdTech). В общем формате он описывает учебные заведения, учебные годы, курсы, классы, зачисления и пользователей школы. Стандарт нужен, чтобы подключить школьную информационную систему (SIS), школьный портал (ENT) или LMS к другому инструменту без повторного ввода данных и без проприетарных форматов.

Страница адресована службе информационных систем (ИТ-службе) учебного заведения. Здесь описано, что Omniscol отдаёт и принимает по OneRoster, какая аутентификация требуется и какой охват у обмена в каждом направлении.

Поддерживаемые версии

Omniscol поддерживает OneRoster 1.2 Rostering — базовый набор (Org, AcademicSession, Course, Class, Enrollment, User, Demographics) — а также уровень OR-Groups (Advanced Groups Service): дополняющий стандарт групп, который добавляет к версии 1.2 три сущности (Group, GroupMembership, GroupAssociation).

Уровень OR-Groups — стандарт, публикация которого ещё идёт. Он строго дополняет версию 1.2: Group только ссылается на Class / User / Org / AcademicSession из версии 1.2, и только для чтения. Версия 1.3 OneRoster, как заявлено, сделает Class частным случаем Group — реализация Omniscol уже движется в эту сторону.

Omniscol как источник данных (Omniscol → ENT / LMS)

В роли источника Omniscol отдаёт справочник учебного заведения только для чтения через REST API, совместимый с OneRoster, чтобы ENT или LMS мог его прочитать.

  • Базовый набор Rostering 1.2 доступен по адресу /ims/oneroster/rostering/v1p2/… (например, /orgs, /schools, /academicSessions, /courses, /classes, /enrollments, /users, /teachers, /students, /demographics, у каждой точки есть вложенные варианты).
  • Уровень групп доступен по адресу /ims/oneroster/groups/v1p0/… (/groups, /groupMemberships, /groupAssociations и их вложенные варианты).
  • По умолчанию охватывается текущий учебный год; с помощью параметра можно выбрать другой год или включить все годы.

Данные отражают консолидированные плановые данные Omniscol (опубликованные расписания). Источник намеренно работает только на чтение: запись (PUT / DELETE) не предоставляется — внешняя система не управляет созданием и удалением сущностей в Omniscol.

Аутентификация источника

Точки доступа источника защищены OAuth2 с потоком client_credentials (токен «машина — машина», без пользователя), который выдаёт сервер OAuth2 Omniscol. Они не ограничены аккаунтами Premium: доступ определяют области действия (scopes) OAuth2, а не тариф. Каждая область относится к своему сервису, а доступ к демографическим данным внутри версии 1.2 выделен отдельно:

Точки доступа Допустимые scopes
Rostering 1.2 (без демографии) https://purl.imsglobal.org/spec/or/v1p2/scope/roster-core.readonly, https://purl.imsglobal.org/spec/or/v1p2/scope/roster.readonly
Rostering 1.2 /demographics https://purl.imsglobal.org/spec/or/v1p2/scope/roster.readonly, https://purl.imsglobal.org/spec/or/v1p2/scope/roster-demographics.readonly
OR-Groups (все) https://purl.imsglobal.org/spec/or-groups/v1p0/scope/roster-group.readonly

Токен OR-Groups не даёт доступа к базовому набору Rostering, и наоборот. Scopes на запись не объявляются. Привилегированные scopes назначает администрация Omniscol при регистрации клиента OAuth2; клиент не может назначить их себе сам. Управление клиентами OAuth2 и токенами описано на страницах OAuth2 / OIDC (поставщик) и API Omniscol.

За состав учеников отвечает уровень групп

Принципиальное решение: список учеников класса или группы отдаётся через OR-Groups (GroupMembership), а не одним только базовым набором 1.2. Потребитель, который читает только Rostering 1.2, получает каталог (Courses, Classes), зачисления преподавателей на курсы и справочник пользователей, но не получает принадлежность учеников. Чтобы узнать, кто в каком классе или группе, потребителю нужно реализовать уровень OR-Groups. Такое решение отражает французскую модель: ученик зачисляется в класс или группу, а не по каждой дисциплине отдельно.

Источник работает через REST. Формат CSV-пакета OneRoster (zip-архив с одним файлом на коллекцию) поддерживается при импорте — для поставщиков, которые передают справочник файлом, а не через API; см. раздел о потребителе ниже.

Omniscol как потребитель (SIS → Omniscol)

Импорт справочника OneRoster (SIS → Omniscol): Omniscol может импортировать справочник SIS, совместимой с OneRoster, — учебное заведение, годы, курсы, классы, группы, пользователей и демографические данные — через REST API поставщика или CSV-пакет, а затем сверить его с данными учебного заведения. Эта настройка приёма данных входит в синхронизацию с внешними системами, доступна на аккаунтах Premium и согласуется в рамках проекта с командой Omniscol.

В роли потребителя Omniscol импортирует справочник SIS, совместимой с OneRoster, и сверяет его с данными учебного заведения. Эта настройка приёма данных входит в синхронизацию с внешними системами: она доступна на аккаунтах Premium и согласуется в рамках проекта с командой Omniscol (см. Синхронизация с внешними системами).

  • Транспорт — либо REST API поставщика (задаётся базовый адрес, используется стандартная постраничная выдача OneRoster) с аутентификацией OAuth2 по потоку client_credentials на сервере поставщика; либо CSV-пакет (zip-архив).
  • Профиль — профиль настройки определяет, что именно читать: только базовый набор 1.2, уровень групп или французское сопоставление для школьного образования. Поставщик, который поддерживает только 1.2 и не имеет сервиса групп, импортируется без проблем.
  • Контролируемое применение — импорт работает по тому же принципу, что и остальные коннекторы: Omniscol получает данные и сверяет их, а администратор подтверждает их применение к учебному заведению. Внешняя система никогда не записывает данные в Omniscol напрямую.
  • Идемпотентный повторный импорт — соответствия внешних идентификаторов сохраняются, поэтому повторный импорт не создаёт дублей, даже если поставщик изменил название.

Французский профиль (школьное образование)

Французский профиль для школьного образования сопоставляет французские понятия с моделью OneRoster: division (класс в фактическом составе) становится Group основного организационного типа; группа становится Group типа проведения обучения; группа групп — сквозным Group; разделения и совмещения становятся связями между группами; назначение преподавателя на курс становится зачислением преподавателя. Идентификаторы вроде INE (национального номера ученика) или служебного номера преподавателя передаются в userIds пользователя.

Идентификаторы и конфиденциальность

Каждая отдаваемая сущность имеет стабильный идентификатор — sourcedId.

  • Структурные идентификаторы (учебное заведение, год, курс, класс, группа) стабильны и неизменны от одного экспорта к другому: потребитель может опираться на них, чтобы сопоставлять данные во времени.
  • Идентификатор пользователя обезличен: Omniscol никогда не передаёт по сети собственный персональный идентификатор. Передаваемый токен вычисляется односторонней функцией (HMAC), своей для каждого аккаунта; зачисления и членство используют этот же токен и никогда не раскрывают исходный идентификатор.

Статус

  • Источник данных — доступен и может быть продемонстрирован без внешнего партнёра (экспорт самодостаточен). Rostering 1.2 и уровень OR-Groups отдаются только для чтения, с аутентификацией OAuth2.
  • Потребитель — настройка импорта входит в синхронизацию Premium. Запуск прямой синхронизации с SIS зависит от поставщика и, в соответствующих случаях, от министерских календарей: он согласуется по запросу, коннектор за коннектором. Это не готовая синхронизация, доступная немедленно.

См. также