SPARQL (Спаркл) — язык запросов к графу знаний
SPARQL — это стандартный язык запросов и протокол для баз данных Linked Open Data и RDF (Protocol and RDF Query Language). С его помощью вы можете делать запросы к большому количеству неоднородных данных в различных форматах и источниках, чтобы эффективно извлекать скрытую в них информацию.
Стандарт SPARQL разработан и одобрен W3C и помогает пользователям и разработчикам сосредоточиться на смысле информации, а не на архитектуре базы данных.
SPARQL против SQL
Так же, как с SQL пользователи извлекают и изменяют данные в реляционной базе данных, SPARQL предоставляет те же функции для графовых баз данных NoSQL.
Запрос SPARQL может выполняться в любой базе данных, которую можно рассматривать как RDF через промежуточное программное обеспечение. Например, к реляционной базе данных можно обращаться с помощью SPARQL и ПО для преобразования реляционной базы данных в RDF (RDB2RDF ).
Именно это делает SPARQL таким мощным языком для вычислений, фильтрации, агрегирования и подзапросов.
В отличие от SQL, запросы SPARQL не ограничены работой в рамках одной базы данных и могут обращаться к нескольким хранилищам данных (конечным точкам).
Это возможно потому, что SPARQL не просто язык запросов, но и транспортный протокол на основе HTTP, где к любой конечной точке SPARQL можно получить доступ через стандартизированный транспортный уровень. Результаты RDF могут возвращаться в нескольких форматах обмена данными, а объекты RDF идентифицируются универсальными идентификаторами ресурсов (URI).
Связывание данных с помощью URI позволяет однозначно ссылаться на дних в приложениях и преодолевать ограничения, налагаемые локальным поиском. Следовательно, могут быть разработаны дополнительные API для конкретных приложений, которые могут ссылаться на эти данные.
SPARQL предназначен для включения связанных данных для Semantic Web. Его цель — обогащать данные, связывая их с другими глобальными семантическими ресурсами, таким образом обмениваясь, объединяя и повторно используя данные более осмысленным образом.
В результате мощность SPARQL в сочетании с гибкостью RDF может снизить затраты на разработку приложений за счет упрощения объединения результатов из нескольких источников данных.
SPARQL позволяет пользователям писать глобально однозначные запросы, что иллюстрирует видение Семантической паутины как единой огромной базы данных. Каждый идентификатор URI в SPARQL глобально однозначен, в отличие от «email» или «e-mail», обычно используемых в SQL. Такой запрос может быть распределён на несколько конечных точек SPARQL, разных компьютеров, и сбор результатов осуществляется федеративным поиском, который извлекает информацию из различных источников с помощью поискового приложения, созданного поверх одной или нескольких поисковых систем.
SPARQL изнутри
SPARQL рассматривает ваши данные как направленный размеченный граф, который внутренне выражается в виде троек, состоящих из субъекта, предиката и объекта.
Запрос SPARQL состоит из набора триплетов, в которых каждый элемент (субъект, предикат и объект) может быть переменной (шаблоном). Затем решения для переменных находятся путем сопоставления шаблонов в запросе с триплетами в наборе данных.
4 типа запросов при использовании SPARQL
- Спросить. Есть ли хотя бы одно совпадение шаблона запроса в данных графа RDF?
- Выбрать все или некоторые из этих совпадений в табличной форме (включая агрегацию, выборку и разбиение на страницы через OFFSET и LIMIT);
- Построить граф RDF, заменив переменные в этих совпадениях набором триплетов;
- Описать совпадения, найденные путем построения соответствующего RDF-графа.
Ведущие базы данных семантических графов, поддерживающие SPARQL, имеют интуитивно понятные редакторы SPARQL с автозаполнением, проводником и многими другими функциями, облегчающими создание мощных запросов SPARQL.
SPARQL на примере
Самая сильная сторона SPARQL — навигация по отношениям (ребрам графа) в графических данных RDF посредством сопоставления графических шаблонов. В этом процессе простые шаблоны могут быть объединены в более сложные, которые исследуют более сложные отношения в данных.
Отношения можно исследовать, используя базовые шаблоны, соединения шаблонов, объединения, добавляя необязательные шаблоны, которые могут расширить информацию о найденных решениях и т. д. Кроме того, пути свойств допускают последовательную композицию (упорядочивание), параллельную композицию (альтернативы), итерации, инверсию и т.д.
Как уже упоминалось, базовый шаблон графа состоит из триплета, в которой каждый элемент (субъект, предикат и объект) может быть переменной (шаблоном).
Запись «Иван» (субъект) -> «имеет сына» (предикат) -> X (объект) будет иметь в качестве решения триплет в графе RDF, который соответствует субъекту и предикату и имеет любой объект.
И если у Ивана есть два сына — Дима и Коля, триплет «Иван» -> «имеет сына» -> «Дмитрий» и «Иван» -> «имеет сына» -> «Николай» будут результатами запроса SPARQL.
Запрос SPARQL также может выражать объединение альтернативных шаблонов графов. Любое решение хотя бы одного из шаблонов является решением объединения.
Например, объединение шаблонов «Иван» -> «имеет сына» -> X и «Иван» -> «имеет дочь» -> X будет иметь в качестве решений всех сыновей и всех дочерей Ивана.
Шаблон группового графа представляет собой объединение двух (или более) базовых графических шаблонов. В отличие от союза, он требует совпадения обоих (или всех) шаблонов. Таким образом, соединение «Иван» -> «имеет сына» -> Y и Y-> «имеет сына»->Z будет иметь в качестве подходящих решений сыновей Ивана.
Однако сыновья дочерей Ивана не будут возвращены запросом, потому что первый базовый шаблон в запросе, а именно «Иван» -> «имеет сына» -> Y , не будет соответствовать тройке в данных, таких как «Иван» -> «имеет дочь» -> «Анна».
Таким образом, даже если «Анна» -> «имеет сына» -> «Гена», Гена не будет отображаться как решение вышеуказанного соединения. Однако, альтернативный шаблон графа и шаблон группового графа можно легко комбинировать. Таким образом, союз «Иван» -> «имеет сына» -> Y и «Иван» -> «имеет дочь» -> «Y», сгруппированный с Y-> «имеет сына»->Z , найдет всех внуков Ивана.
Расширения SPARQL
SPARQL — это не просто язык запросов, а исчерпывающий набор спецификаций. Например, SPARQL UPDATE включает запросы на удаление или вставку данных и управление графами. Протокол SPARQL определяет, как получить доступ к конечным точкам SPARQL и форматам результатов, и может быть дополнительно расширен для использования уникальности различных типов данных.
Стандартизированные расширения включают GeoSPARQL для запроса геопространственных данных.
Некоторые пользовательские расширения включают полнотекстовый поиск, выполнение запросов к внешним полнотекстовым и фасетным механизмам ( Lucene , SOLR , ElasticSearch), RDFRank для заказа, SPARQL MM для мультимедиа и т. д.
SPARQL-звезда
Хранилища триплетов RDF часто подвергались критике за то, что они не позволяют привязывать описания или свойства к ребрам в графе (когда набор троек объединяется вместе, они образуют естественный граф, где предикаты интерпретируются как ребра, а субъекты и объекты являются узлами). Некоторые считают это недостатком по сравнению с графами свойств. Однако эта проблема была решена с помощью RDF-Star (сокращенно RDF*), который позволяет делать утверждения о других утверждениях и, таким образом, присоединять метаданные к ребрам графа.
Таким образом, SPARQL был соответствующим образом расширен с помощью SPARQL-star (сокращенно SPARQL*), чтобы приспособиться к обновлениям RDF* в модели RDF, т. е. разрешить запрашивать метаданные о ребрах в графе.
Зачем использовать SPARQL?
Как видите, существует множество шаблонов графов, которые можно сопоставить с помощью запросов SPARQL, что отражает разнообразие данных, для которых был разработан SPARQL. В результате SPARQL может эффективно извлекать информацию, скрытую в неоднородных данных и хранящуюся в различных форматах и источниках.
«Попытка использовать Semantic Web без SPARQL подобна попытке использовать реляционную базу данных без SQL. SPARQL позволяет запрашивать информацию из баз данных и других разнообразных источников через Интернет».— Тим Бернерс-Ли, директор W3C, создатель и сторонник Semantic Web