Дэн Винчестер управляет 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 уменьшает вариации, но в целом позволяет использовать более широкий диапазон данных.
Профили данных предназначены для решения этой проблемы путем обобщения потока данных:
- Какие поля доступны?
- Как устроены эти поля?
- Какая информация содержится в каждом поле?
Потребители данных могут использовать профиль данных для:
- Оцените, может ли фид быть полезным для их приложения.
- Сопоставьте поля фида с их собственной структурой данных.
- Определите, какие значения они могут ожидать для данного поля.
Вы можете найти список доступных профилей данных здесь.