З майбутньою версією Open edX, Maple, команда edX рада поділитися частиною технології, яку вони використовували всередині протягом деякого часу. Цей інструмент називається CourseGraph і тепер доступний як непідтримувана частина devstack і Maple. CourseGraph дозволяє вам відповідати на запитання, які можуть виникнути щодо змісту всіх курсів вашого екземпляра в сукупності, як-от кількість і розташування конкретних блоків XBlocks, запитання, що стосуються структури ваших курсів, запитання про іспити, і більше!
В edX використання CourseGraph обмежується командами підтримки клієнтів та інженерами. Ці команди вважають корисним мати можливість відповідати на запитання, на які відповідає сукупна статистика; їх команда підтримки партнерів часто може допомогти у вирішенні проблем інструктора в Studio за допомогою запиту XBlock. Команда інженерів отримує інформацію про всілякі потенційні проблеми, наприклад, з’ясовує, де знаходяться «блоки-сиріти» (блоки, які недоступні з кореня курсу через дітей).
Що таке CourseGraph?
CourseGraph — це графічне представлення вмісту курсу вашого екземпляра в neo4j, популярна база даних графів; CourseGraph є НЕ API часу виконання. Перевага представлення даних курсу у вигляді графіка полягає в тому, що це дозволяє писати широкі запити як щодо змісту, так і щодо структури курсу. Використання CourseGraph передбачає, що ви маєте базове знайомство з моделлю даних курсу, що курси є графами, зазвичай деревами, де кожен вузол є XBlock.
І що?
Чи виникали у вас такі запитання:
- Команди курсу (та інші!) можуть запитати…
- Де всі відеокомпоненти в моєму курсі? Які всі їхні назви та ідентифікатори?
- Які підрозділи ORA (оцінювання відкритих відповідей) мають неправильно налаштовані дати? (неправильно налаштовані дати можуть блокувати учням доступ до завдання)
- Які типи блоків (наприклад, проблемні чи ORA) я використовую в своєму курсі та як часто я використовую ці блоки?
- Розробники/оператори сайтів/служби підтримки можуть запитати…
- Скільки поточних курсів використовують певний тип блоку?
- Де всі відео організації та з якого джерела відео/URL-адреси вони надходять?
- Які курси використовують компоненти LTI, а які з них оцінюються?
Наразі важко відповісти на ці запитання, враховуючи те, як дані курсів зберігаються в Mongo. Split Mongo, який є серверною частиною майже всіх ваших запущених курсів, оптимізований для завантаження окремого курсу за раз, а не для широких запитів між кількома структурами курсу. Реконструкція графоподібної структури кожного курсу вимагала б значної обробки за межами чистого запиту Mongo. Ще одна перевага використання neo4j полягає в тому, що він постачається з вбудованим візуалізатором результатів запиту, тож ви можете бачити структуру графіків частин курсів.
Наступний запит підраховує кількість проблем jsinput у вашому екземплярі Open edX:
MATCH
(курс)-[:PARENT_OF*]->(p:проблема)
ДЕ
p.data
ЗМІСТ
'jsinput'
ПОВЕРНЕННЯ
count(p) як число
і повертає такий результат (31026):
Ви також можете побачити дані візуально, коли результатом запиту є вузли. Цей запит ідентичний попередньому, за винятком того, що ми ПОВЕРТАЄМО * і обмежуємо результат до 50 елементів. Вузли та їхні зв’язки PARENT OF показані на графіку. При наведенні курсора на вузол у нижній панелі відображаються атрибути, встановлені для цього вузла.
Що таке структура даних?
Neo4j — це база даних графів, тому, як і граф, має два основних типи даних: вузли та ребра. У випадку CourseGraph вузли — це XBlocks: блоки курсу, проблеми, вертикалі, html тощо. Атрибути цього вузла відповідають полям XBlock. Крім того, для кожного вузла встановлені атрибути course_key, org, course, run, edited_on і location.
Ребра відображають зв’язок між вузлами. Існує два типи зв’язків між блоками: «PARENT_OF», який пов’язує блок із дочірнім блоком, і «PRECEDES», який пов’язує блок із його братом. Таким чином, вертикаль може бути PARENT_OF відеоблоку; у послідовності двох вертикалей перша вертикаль буде «ПЕРЕДУВАТИ» другій.
Як мені писати запити проти нього?
Neo4j використовує власну мову запитів, cypher. Він схожий на SQL, тому для ознайомлення з ним не знадобиться надто багато часу. Перевірити ця зручна рефкард за корисні поради! В edX ми постійно звертаємо увагу на корисні запити; подивіться, що ми придумали – і додайте свій! - на Сторінка збору запитів CourseGraph.
Ось складніший запит, який проходить через курс на вашому екземплярі (тут, курс edx.org “DemoX”), і виводить усі видимі учнем XBlocks типу “problem” у курсі, позначені його відображуваною назвою, назва галузі, яка його містить, і час останнього редагування:
MATCH
(c:курс) -[:PARENT_OF*]-> (v:vertical) -[:PARENT_OF*]-> (n:item)
ДЕ
c.course_key = 'course-v1:edX+DemoX.1+2T2019'
І
n.block_type = 'проблема'
І
n.visible_to_staff_only = false
ПОВЕРНЕННЯ
n.block_type,
n.display_name,
v.display_name як unit_location,
n.edited_on
СОРТУВАТИ ЗА
n.edited_on;
Ось перші 16 результатів із 17, як зазначено в останньому рядку:
Як розгорнути та керувати CourseGraph?
Випуск Nutmeg (очікується на червень 2022 року) включатиме a Плагін CourseGraph для Tutor! Перегляньте файл README плагіна, щоб дізнатися, як оператори Nutmeg зможуть легко встановити, налаштувати та запустити CourseGraph як частину свого розгортання Open edX, керованого викладачем. (Для екземплярів Open edX із версією, старішою за Nutmeg, немає офіційно рекомендованого методу розгортання CourseGraph.)
Станом на Nutmeg плагін перебуває в статусі «бета», і його розробники активно шукають користувачів, які готові випробувати його в робочих умовах і надати відгук. Щоб поставити запитання, повідомити про помилки або поділитися своїм досвідом роботи з CourseGraph, будь ласка, відкрийте GitHub Issue у репозиторії tutor-contrib-coursegraph.
Сподіваємося, цей інструмент стане вам у нагоді!
![]()