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)
В роли потребителя 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 зависит от поставщика и, в соответствующих случаях, от министерских календарей: он согласуется по запросу, коннектор за коннектором. Это не готовая синхронизация, доступная немедленно.