Вместо Neosemantics: обзор Python-библиотеки rdflib-neo4j для графовой СУБД Neo4j

Neo4j Python RDF rdflib-neo4j, RDF триплеты графы Neo4j Neosemantics, графовые алгоритмы на больших данных примеры курсы обучение, графы графовые базы данных СУБД NoSQL примеры курсы обучение, обработка графовых данных графы, обучение NoSQL Neo4j Neosemantics RDF курсы, NoSQL Neo4j Neosemantics для архитекторов аналитиков инженеров данных и разработчиков, NoSQL Neo4j Neosemantics RDF Data Science, хранение и аналитика больших данных графовые базы данных NoSQL, Школа Больших Данных Учебный центр Коммерсант

Что не так с Neosemantics и зачем нужна очередная библиотека для Neo4j: знакомство с Python-пакетом для RDF-графов rdflib-neo4j. Возможности, ограничения и пример использования.

Что не так с Neosemantics и зачем нужна очередная библиотека для Neo4j

Что такое RDF-графы, триплеты и плагин Neosemantics для работы с этими концепциями в графовой СУБД Neo4j, мы уже рассматривали здесь. Именно этот плагин был идеальным решением для импорта/экспорта RDF-данных в/из Neo4j и сопоставления моделей. Он также обеспечивал проверку графов с помощью языка SHACL (Shapes Constraint Language), разработанного консорциумом WWW для описания RDF-графов, чтобы улучшить уровни семантической и технической совместимости онтологий.

Для пользователей Neo4j плагин Neosemantics был единственным способом принять любые данные в формате RDF и преобразовать их в размеченный граф свойств в Neo4j. Однако, Neosemantics недоступен в облачных развертываниях Neo4j, т.е. serverless-решении Aura DB. Чтобы устранить это ограничение, пару лет назад была разработана Python-библиотека rdflib-neo4j с открытым исходным кодом. Она представляет эволюцию Neosemantics на стороне клиента, расширяя возможности приема данных не только в локальных сценариях, но и в облачной Neo4j-экосистеме Aura.

Библиотека rdflib-neo4j основана на проекте RDFLib, Python-пакете для работы с RDF, который содержит следующие компоненты:

  • парсеры и сериализаторы для RDF/XML, N3, NTriples, N-Quads, Turtle, TriX, JSON-LD, HexTuples, RDFa и микроданных;
  • реализации хранилища данных в памяти и на диске с использованием BerkeleyDB, а также удаленные конечные точки SPARQL;
  • графический интерфейс к одному графу или к нескольким именованным графам в наборе данных;
  • реализация SPARQL 1.1, языка запросов к данным, представленным по модели RDF, а также протокол для передачи этих запросов и ответов на них, с поддержкой запросов и обновлений.

Чтобы понять основные принципы работы библиотеки rdflib-neo4j, далее рассмотрим пару примеров ее использования.

Пример использования rdflib-neo4j

Напомним, основным объектом данных RDFLib является Graph, который представляет собой Python-коллекцию из RDF-субъектов, предикатов и троек объектов. В основе RDF лежит понятие триплета – тройки из трех элементов, представляющих две вершины, соединенные ребром: субъект-предикат-объект. Субъект будет ресурсом или узлом в графе. Предикат будет представлять ребро (отношение), а объектом будет другой узел или буквальное значение. В модели RDF ресурсы (вершины/узлы) и отношения (ребра) идентифицируются в виде URI, который является уникальным идентификатором. Поэтому в RDF-триплетах узлы и ребра не имеют внутренней структуры, а маркируются уникальной меткой.

В RDF-модели могут быть разные стратегии преобразования триплета в узлы, связи и свойства, включая пользовательские префиксы, сопоставления и массивы с несколькими значениями. Например, сохранить полные URI или сократить их, используя префиксы для имен свойств, имен отношений и меток. В следующем простом примере будем использовать стратегию игнорирования, при которой глобальные URI игнорируются и сохраняются только локальные имена элементов графа.

Сперва надо установить библиотеку rdflib-neo4j с помощью менеджера Python-пакетов pip:

$ pip установить rdflib-neo4j

Затем импортировать нужные модули:

from rdflib_neo4j import Neo4jStoreConfig, Neo4jStore, HANDLE_VOCAB_STRATEGY
from rdflib import Graph

Далее надо настроить подключение к базе данных Neo4j в облачной платформе Aura, указав данные аутентификации: URI базы данных, имя пользователя и пароль. Эти данные можно занести в словарь auth_data, чтобы потом использовать его при подключении.

# set the confguration to connect to your Aura DB
AURA_DB_URI = "your_db_uri"
AURA_DB_USERNAME = "neo4j"
AURA_DB_PWD = "your_db_pwd"

auth_data = {'uri': AURA_DB_URI,
             'database':"neo4j"
             'user':AURA_DB_USERNAME,
             'pwd':AURA_DB_PWD}

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

# Define your custom mappings & store config
config = Neo4jStoreConfig(auth_data=auth_data,
                          custom_prefixes=prefixes,
                          handle_vocab_uri_strategy=HANDLE_VOCAB_URI_STRATEGY.IGNORE
                          batching=True)

Далее следует указать источник данных RDF, которые нужно принять. Сделаем это с помощью переменной file_path:

file_path = 'https://github.com/jbarrasa/gc-2022/raw/main/search/onto/concept-scheme-skos.ttl'

В этом примере исходные данные хранятся в TTL-файле, который используется для RDF. Обычно он содержит разметку графа, модели или онтологии, используемой библиотеками и приложениями, такими как библиотека семантической веб-разработки Jena и WebVOWL.

Теперь создадим граф RDF под названием neo4j_aura, используя класс Graph из библиотеки rdflib. Также инициализируем хранилище Neo4j, используя класс Neo4jStore из библиотеки rdflib-neo4j, настраивая его с использованием ранее определенных учетных данных подключения (auth_data) и других параметров. При этом используется метод синтаксического анализа для чтения и приема данных RDF из файла, размещенного по адресу, заданном в переменной file_path, в граф neo4j_aura. По сути, это и есть импорт RDF-данных в Neo4j на платформе Aura.

# Create the RDF Graph, parse & ingest the data to Neo4j, and close the store(If the field
# batching is set to True in the Neo4jStoreConfig, remember to close the store to prevent the loss
# of any uncommitted records.)
neo4j_aura = Graph(store=Neo4jStore(config=config)

# Calling the parse method will implicitly open the store
neo4j_aura.parse(file_path, format="ttl")

Наконец, надо закрыть хранилище, чтобы гарантировать сохранение всех незафиксированных записей. Это особенно важно, если в конфигурации хранилища включена пакетная обработка (batching=True), которая предотвращает потерю незафиксированных данных.

neo4j_aura.close(True)

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

Критерий

Neosemantics

Rdflib-Neo4j

Год первого выпуска

2016

2023

Архитектура

На стороне сервера (Server-Side)

На стороне клиента (Client-Side)

Размещение

Только в Neo4j

В Neo4j и в облачном развертывании Aura

Поддержка импорта и экспорта

Да

Только импорт

RDF-базис

SHACL-валидация и вывод

Основана на Python-библиотеке rdflib

Узнайте больше про использование графовых алгоритмов и средств работы с ними для практического применения в реальных проектах аналитики больших данных на специализированных курсах нашего лицензированного учебного центра обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://www.w3.org/RDF/
  2. https://neo4j.com/developer-blog/rdflib-neo4j-rdf-integration-neo4j/
  3. https://github.com/RDFLib/rdflib
  4. https://rdflib.readthedocs.io/en/stable/
Поиск по сайту