Дэн Винчестер управляет GetTheData — веб-сайтом, который демонстрирует и указывает открытые данные с использованием информационных панелей и примеров приложений. GetTheData также публикует подборку открытых наборов данных.

Введение в OpenActive для потребителей данных

OpenActive — это набор стандартов, позволяющих организаторам деятельности публиковать открытые данные о своей деятельности, а потребителям данных — брать эти данные и включать их в свои приложения.

Стандартом, охватывающим сами данные о деятельности, является спецификация моделирования OpenActive. Есть две версии, данные в настоящее время публикуются по обеим версиям. Первоначальная версия 1.0 была довольно либеральным стандартом, достаточно гибким, чтобы вместить широкий спектр данных издателя. Это привело к некоторым различиям в том, как данные одного и того же типа могут быть структурированы в фиде, например. физический адрес. Последняя версия 2.0 ужесточает ситуацию, чтобы уменьшить этот разброс.

Знакомство с профилями данных

При работе с фидами OpenActive мне нужен был способ быстро понять, какие данные были доступны в фиде и как эти данные были структурированы в этом фиде.

Профили данных — это сводная страница для каждого фида, которая объясняет именно это — какие данные доступны и как они структурированы.

Для канала, опубликованного в соответствии со спецификацией моделирования 1.0, существует несколько допустимых способов структурирования данных. В версии 2.0 меньше гибкости, но все же есть некоторые вариации, и есть механизм включения настраиваемых полей, предоставляемых профилем данных.

В настоящее время профили данных создаются один раз в день. Вы можете найти полный список профилей данных здесь.

Давайте рассмотрим пример для activeNewham: здесь вы можете увидеть профиль данных activeNewham и сравнить его с необработанным фидом в их Feed Explorer.

Профиль данных начинается со сводки о количестве элементов в ленте и количестве элементов в каждом состоянии. В случае с activeNewham также сообщается о количестве событий в день. Эта информация может помочь вам получить представление о размере фида и о том, насколько он может быть уместным для вашего приложения.

Далее представлена ​​структура данных. В самой ленте данные хранятся в формате JSON. Чтобы обобщить структуру, я взял поля JSON и сопоставил их как пути.

Вот как выглядят пути для activeNewham:

Само имя поля выделено жирным шрифтом, а каждый уровень в пути разделен косой чертой.

Следующие правила используются для сопоставления JSON с путями:

  • Простые переменные, такие как числа, строки, логические значения и значения NULL, представлены как их имена полей.
  • Объекты представлены в виде нескольких путей. Первый путь — это имя объекта. Все члены объекта затем представлены в виде имен полей под именем объекта. Уровень поля внутри объекта преобразуется в уровень внутри пути.
  • Массивы представлены в виде нескольких путей. Первый путь — это имя массива. Затем элементы массива представляются с [0] под именем массива.

В приведенном ниже примере показано, как относительно простая структура OpenActive JSON будет преобразована в структуру пути профиля данных.

Первое, что вы можете заметить, это то, что массив items игнорируется в структуре пути. Профили данных предназначены для обобщения данных по отдельным элементам фида. Проверяются все элементы фида, извлекаются поля, а структура пути представляет каждое поле, найденное в любом элементе.

Другими словами, если у одного элемента есть поле местоположение, но нет поля имя, а у другого элемента есть поле имя, но нет местоположения структура пути будет иметь поля местоположение и имя в любом случае.

Возвращаясь к примеру, вы можете видеть, что у нас есть пять полей верхнего уровня для данные, id, вид, модифицированный и состояние. Поле data — это объект, который сам содержит простые переменные, массивы и другие объекты.

Давайте посмотрим, как некоторые поля разных типов данных представлены в структуре пути:

Пример строки

state – это строка, имя поля представлено в виде одного пути.

Пример объекта

geo — это объект. Имя объекта представлено в виде одного пути, а имена полей элементов объекта перечислены в иерархическом порядке ниже.

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

Activity – это массив строк. Имя массива представлено в виде одного пути, а затем второй путь, представленный [0] в разделе Activity, представляет элементы массива.

subEvent – это массив объектов. Имя массива представлено в виде одного пути. Элементы массива представлены как [0]под subEvent. Поскольку каждый элемент массива является объектом, члены этого объекта затем перечислены в разделе [0].

Типы данных и значения

Профили данных создаются путем изучения каждого элемента в фиде. Это позволяет нам предоставлять некоторую дополнительную информацию о поле на основе значений, которые мы находим во всех элементах, содержащих это поле.

В качестве простого примера, если поле представляет собой строку, и каждый элемент, содержащий это поле, имеет значение URL-адреса, мы можем сделать вывод, что это поле принимает URL-адрес.

Углубившись в наш пример, если мы посмотрим на тип данных для поля активности (путь=данные/активность), мы увидим следующее:

  • Это поле присутствует для всех элементов.
  • Это поле представляет собой массив (мы уже знаем это из структуры пути).
  • Для всех элементов массив содержит минимум один элемент и максимум четыре элемента.

Элементы массива представлены [0] (path=data/activity/[0]):

  • Каждый элемент представляет собой строку длиной от 3 до 17 символов.
  • Для всех элементов существует более десяти возможных значений.
  • Пример значения: «Афро-танец».

Вот еще один пример, когда поле содержит несколько типов данных. В этом примере также достаточно мало значений для всех элементов, чтобы мы могли перечислить их все:

Если бы вы потребляли этот фид, вы бы знали, что не все элементы должны иметь номер телефона.

Если вы публиковали этот фид, вы могли бы проверить, почему 3% элементов имеют нулевой номер телефона — это так задумано или что-то идет не так?

Опираясь на существующие ресурсы OpenActive

В OpenActive есть несколько отличных существующих инструментов, которые дополняют профили данных.

В зависимости от характера задачи один из этих инструментов может оказаться более актуальным, чем профиль данных.

Одним из таких инструментов является Панель данных OpenActive Opportunity Data Dashboard, в которой перечислены все каналы вместе с некоторой ключевой информацией:

  • Конечная точка.
  • Подкормка есть или нет?
  • Соответствует ли фид спецификации обмена постраничными данными в реальном времени?
  • Соответствует ли фид спецификации моделирования?
  • Содержит ли фид географические координаты?
  • Сводка данных в фиде.
  • Любые вопросы, обсуждаемые на GitHub.

Данные на приборной панели также доступны в виде JSON-фида.

Что дальше для профилей данных?

В нашем случае мы рассмотрели местоположения и действия — эти два элемента имеют решающее значение для объединения нескольких каналов — нам нужно знать, что такое действие и где оно происходит.

В дальнейшем профили данных будут расширять эти две части информации, чтобы потребителям данных было проще объединять несколько каналов.

Вы можете увидеть, как это происходит, в разделе Действия профиля данных — здесь я перечисляю каждое отдельное действие в ленте с указанием количества элементов, связанных с этим действием. Например, вот действия из таблицы действий activeNewhams:

Вывод

Спецификация моделирования OpenActive привносит долгожданные стандарты для данных о деятельности.

Гибкость исходной спецификации позволяет структурировать одни и те же типы данных в ленте различными способами и при этом соответствовать стандарту. Версия 2.0 уменьшает вариации, но в целом позволяет использовать более широкий диапазон данных.

Профили данных предназначены для решения этой проблемы путем обобщения потока данных:

  • Какие поля доступны?
  • Как устроены эти поля?
  • Какая информация содержится в каждом поле?

Потребители данных могут использовать профиль данных для:

  • Оцените, может ли фид быть полезным для их приложения.
  • Сопоставьте поля фида с их собственной структурой данных.
  • Определите, какие значения они могут ожидать для данного поля.

Вы можете найти список доступных профилей данных здесь.