Что такое триплеты, чем они отличаются от обычных графов свойств и где используются на практике. Знакомимся с RDF и возможностями графовой СУБД Neo4j работать с этой структурой описания веб-ресурсов с помощью плагина Neosemantics.
Что такое триплеты и при чем здесь RDF
Триплеты (triples) — это текстовый формат, используемый для хранения и передачи графов RDF (Resource Description Framework). Спецификация RDF представляет собой структуру описания веб-ресурсов и стандартную модель обмена данными в Интернете. Данный формат является рекомендованным Консорциумом Всемирной паутины (W3C).
RDF имеет функции, облегчающие слияние данных, даже если базовые схемы различаются, и специально поддерживает эволюцию схем с течением времени, не требуя изменения всех потребителей данных. RDF расширяет структуру ссылок в Интернете, чтобы использовать URI для обозначения отношений между вещами, а также двух концов ссылки, что и называют триплетом, т.е. группой 3-х связанных сущностей. Тройки состоят из структуры данных субъект-предикат-объект. Используя тройки, можно фиксировать такие факты, как «Катя дружит с Федей» и «Федя работает аналитиком». Таким образом, модель триплета описывает широкий набор данных, из которого можно собирать знания и делать выводы о связях. Эта простая модель очень эффективна: она позволяет смешивать, отображать и совместно использовать структурированные и полуструктурированные данные в различных приложениях. Такая связующая структура образует направленный размеченный граф, ребра которого представляют собой именованную связь между двумя ресурсами, представленными узлами графа. Это графовое представление является самой простой наглядной моделью RDF и часто используется для объяснения.
Хранилища триплетов моделируются на основе спецификаций RDF, изложенных W3C, с использованием SPARQL в качестве языка запросов. RDF является стандартом W3C для обмена данными в Интернете, которая представляет данные в виде графа, похожего на типовой граф свойств или граф знаний в Neo4j. Сегодня хранилище триплетов называется базой данных семантических графов. Однако, в отличие от графа свойств в Neo4j, модель RDF ориентирована на обмен данными, а размеченный граф свойств сфокусирован исключительно на хранении графовых данных и запросах к ним. Это обусловливает отличия между этими графовыми моделями, что мы рассмотрим далее.
5 отличий триплета от графа свойств
Первое отличие графа свойств от триплета заключается в структуре и семантике узлов. В размеченном графе свойств вершины называются узлами, которые имеют уникально идентифицируемый идентификатор и набор пар ключ-значение или свойств, которые их характеризуют. Аналогично ребра, т.е. отношения (соединения) между узлами имеют идентификатор, чтобы их однозначно идентифицировать, а также у них есть тип и набор пар ключ-значение как свойства, характеризующие эти соединения.
Таким образом, узлы и отношения графа свойств имеют внутреннюю структуру (набор пар ключ-значение), которая отличает эту модель от модели RDF. В основе RDF лежит понятие триплета – тройки из трех элементов, представляющих две вершины, соединенные ребром: субъект-предикат-объект . Субъект будет ресурсом или узлом в графе. Предикат будет представлять ребро (отношение), а объектом будет другой узел или буквальное значение. Но с точки зрения графа свойств, это будет другая вершина
В модели RDF ресурсы (вершины/узлы) и отношения (ребра) идентифицируются в виде URI, который является уникальным идентификатором. Это означает, что в RDF-триплетах узлы и ребра не имеют внутренней структуры, а маркируются уникальной меткой.
Второе отличие между RDF и графой свойств также связано с уникальностью компонентов графа: RDF не идентифицирует уникальным образом экземпляры отношений одного и того же типа. В RDF невозможно однозначно идентифицировать экземпляры отношения: невозможно иметь соединения одного и того же типа между одной и той же парой узлов, потому что это будет точно такая же тройка субъект-предикат-объект без дополнительной информации.
Отсюда следует третье отличие: невозможность квалифицировать экземпляры отношений в RDF. Например, расстояние, стоимость или время движения от одного узла к другому отлично показывается в графе свойств, поскольку является глобальным свойством отношения. Но в RDF показать это нельзя. RDF может иметь многозначные свойства (много-ко-многим), когда субъект и предикат одинаковы, но объект различен. В размеченном графе свойств придется использовать массивы.
Четвертое отличие триплета от графа свойств связано с тем, что RDF использует квадроциклы для определения именованного графа, чему нет эквивалента в размеченном графе свойств. В триплете можно добавить контекст или дополнительные значения к тройкам, которые идентифицируют их и упрощают определение подграфов или именованных свойств. Однако, из-за атомарной декомпозиции данных в RDF будут более длинные шаблоны при выполнении запросов.
Таким образом, пятое отличие хранилища триплетов RDF и от размеченного графа свойств в том, что хранилища RDF базируются на индексах, а графовые СУБД — на навигации. Как мы писали здесь, нативно графовые СУБД реализуют безиндексную смежность через хранение отношений между связанными сущностями (узлами) на диске. Это означает, что при запросе к графу используются указатели, а не индексы. Хранилище на основе индексов подходит для не очень глубоких запросов, но не для поиска путей, глубоких обходов или обходов переменной длины. Справедливо сказать, что хранилища триплетов изначально не предназначались для использования в операционных и транзакционных сценариях. Их следует использовать в основном в аддитивных, обычно медленно меняющихся или даже неизменных наборах данных, характерных для декларативных высказываний, например, столица России — Москва. А графовые базы данных, например, Neo4j подходят для динамичных и транзакционных сценариев, где важна целостность данных.
Поэтому несмотря на то, что хранилища триплетов относят к графовым СУБД, фактически они не поддерживают архитектурные принципы этих систем. В частности, хранилища триплетов не поддерживают безиндексную смежность, а их механизмы хранения не оптимизированы для хранения графов свойств. Хранилища триплетов хранят тройки как независимые элементы, что позволяет им масштабироваться по горизонтали, но не позволяет быстро перемещаться по отношениям. Чтобы выполнять запросы к графу, хранилище триплетов должно создавать соединения из отдельных независимых фактов, что увеличивает задержку для каждого запроса. Из-за таких компромиссов между масштабом и задержкой наиболее распространенным вариантом использования хранилища триплетов является офлайн-аналитика, а не онлайн-транзакции.
Поэтому RDF отлично подходит для описания онтологий, семантических фактов, основанных на словарном запасе и обмене данными в веб-ресурсах. Если определить отношения с URI, можно определить согласованные словари, такие как Schema.org и Google Knowledge Graph (GKG), что соответствует основному сценарию применения RDF. Еще одним вариантом использования триплетов является семантика, основанная на выводах и правилах, включая OWL. Например, когда надо выразить, что означают данные, чтобы вывести факты, сделать некоторые рассуждения или проверить согласованность набора данных.
Как работать с триплетами в Neo4j
Несмотря на целый ряд отличий графа свойств от триплета, нативно графовая СУБД Neo4j может работать с RDF. Для этого следует использовать специальный плагин Neosemantics. Он позволяет сохранять RDF-данные в Neo4j без потерь: импортированный RDF можно экспортировать, не теряя при этом ни одной тройки. Также Neosemantics поддерживает экспорт данных графа свойств по запросу из Neo4j в виде RDF и отображение моделей и вывод на графах Neo4j.
Прежде чем импортировать данные RDF и работать с ними в Neo4j, необходимо определиться с тем, эти данные будут обрабатываться в графе:
- Надо ли сохранить полные имена (URI) элементов схемы?
- Отбрасывать многозначные свойства или сохранять их в виде массивов в Neo4j?
Эти настройки хранятся в конфигурации графа и являются глобальными. Они остаются в силе в течение всего срока службы графа и управляют поведением функций и процедур в Neosemantics. В дополнение к глобальным настройкам в конфигурации графа можно задать ограничение на количество триплетов, которые будет принимать конкретная процедура, языковой фильтр или запрос SPARQL для отправки в конечную точку, производящую RDF. Также перед импортом данных в Neo4j с помощью Neosemantics нужно определить характеристики графа, который будет создаваться. Эти метаданные также хранятся в конфигурации графа GraphConfig.
Все методы, которые сохраняют данные в Neo4j, имеют необходимое условие уровня схемы: наличие ограничения уникальности свойства URI узлов с меткой Resource. Если ограничение еще не существует, нужно запустить команду CREATE CONSTRAINT в базе данных. Иначе все процедуры импорта RDF будут выдавать сообщение об ошибке, указывающее, что это должно быть сделано в первую очередь. Цель этого ограничения — гарантировать уникальность ресурсов по URI, а также ускорить процесс приема за счет их добавления в индекс. Если запустить процедуру импорта RDF без предварительного создания GraphConfig, импорт завершится ошибкой с сообщением об ошибке.
В заключение отметим, что плагин Neosemantics позволяет не только импортировать RDF-триплеты в Neo4j, но и удалить их, определить свою онтологию, просмотреть и экспортировать данные RDF, а также выполнить сопоставление между графом свойств и триплетом. Как это сделать, описано в руководстве по Neosemantics в справочной документации Neo4j. А в новой статье мы рассказываем об альтернативной Python-библиотеке, которая позволяет работать с RDF-триплетами в облачном развертывании Neo4j на serverless-платформе Aura DB.
Узнайте больше про использование графовых алгоритмов и средств работы с ними для практического применения в реальных проектах аналитики больших данных на специализированных курсах нашего лицензированного учебного центра обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:
Источники