SPARQL

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 15:55, 28 мая 2019.
SPARQL
Разработчики: W3C
Постоянный выпуск: 1.1 / 21 марта 2013 года
Веб-сайт https://www.w3.org/TR/sparql11-query/

SPARQL (рекурсивный акроним от англ. SPARQL Protocol and RDF Query Language) — язык запросов к данным, представленным по модели RDF, а также протокол для передачи этих запросов и ответов на них. SPARQL является рекомендацией консорциума W3C и одной из технологий семантической паутины. Предоставление SPARQL-точек доступа (англ. SPARQL-endpoint) является рекомендованной практикой при публикации данных во всемирной паутине.


Стандарты W3C

Обзор: http://www.w3.org/standards/techs/sparql  (англ.)

Общая схема запроса

Как и в SQL, SPARQL декларирует не только чтение, но и манипуляцию данными. Стандарт SPARQL Update описывает команды INSERT и DELETE для добавления и удаления триплетов в хранилище. Однако, обе эти команды оперируют той или иной выборкой, так что основа SPARQL — это команда SELECT.

Общая схема SPARQL-запроса SELECT выглядит так:

PREFIX
  # префиксные объявления - служат для указания сокращений универсальных идентификаторов ресурса (URI), 
  # используемых в запросе.
FROM ...
  # источники запроса - определяют какие RDF-графы запрашиваются.
SELECT ...
  # состав результата - определяет возвращаемые элементы данных.
WHERE {...}
  # шаблон запроса - определяет, что запрашивать из набора данных.
ORDER BY ...
  # модификаторы запроса - ограничивают, упорядочивают, преобразуют результаты запроса


Преимущества

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

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?name ?email
WHERE {
 ?person a foaf:Person.
 ?person foaf:name ?name.
 ?person foaf:mbox ?email.
}

Приведённые параметры используются для описания человека, включенного в FOAF. Это иллюстрирует видение Семантической паутины как единой огромной базы данных. Каждый идентификатор в SPARQL, URI, глобально однозначен, в отличие от «email» или «e-mail», обычно используемых в SQL.

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

Формы запросов

Язык SPARQL определяет четыре различных варианта запросов для различных целей:

SELECT запрос

Извлекает необработанные значения из точки доступа SPARQL и возвращает результаты в формате таблицы.

CONSTRUCT запрос

Извлекает информацию из точки доступа SPARQL в формате RDF и преобразовывает результаты к определенной форме.

ASK запрос

Формирует запрос типа Истина/Ложь.

DESCRIBE запрос

Получает описание RDF-ресурса. Реализация поведения DESCRIBE-запросов определяется разработчиком точки доступа SPARQL.

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

Ключевые слова

Ниже приведена часть используемых ключевых слов в SPARQL запросах, полный перечень доступен в официальной документации.

PREFIX — служит для сокращения URI.

OPTIONAL — обозначает необязательный шаблон.

GRAPH — применяет шаблон к именованным графам.

DISTINCT — обеспечивает уникальность решений в ответе на запрос.

LIMIT — задает максимальное количество выводимых результатов.

OFFSET — опускает в результате первые n решений.

ORDER BY — позволяет отсортировать результат по возрастанию (ASC()) или по убыванию (DESC())

Сравнение языков запросов к RDF

  • DQL — основан на XML, запросы и результаты выражаются в DAML+OIL;
  • R-DEVICE;
  • RDFQ — основан на XML;
  • RDQ — похож на SQL;
  • RDQL — похож на SQL;
  • SeRQL — похож на SQL, близок к RDQL;
  • Versa — компактный синтаксис (не SQL), исключительно для 4Suite (язык Python).


Элементы языка SPARQL

  • 1.IRI

В SPARQL имеется возможность указывать IRI двумя способами:

  • Prefixed names (используя ключевое слово PREFIX и «:»)

Пример:

PREFIX  vCard: <http://www.w3.org/2001/vcard-rdf/3.0#>
SELECT $y $x
WHERE
{
   $x vCard:FN $y.
   FILTER regex($y, "Jo", "i")
}
  • Relative IRIs

Используя символы «<» и «>» Пример:

 BASE <http://somewhere/>
 PREFIX  vCard: <http://www.w3.org/2001/vcard-rdf/3.0#>
 SELECT $x
 WHERE
 {
   <SarahJones/> vCard:FN $x.
 }

При запросе (к 1.rdf) выводит:

-----------------
| x             |
=================
| "Sarah Jones" |
-----------------
  • 2. Литералы

Литералы (не зависимо от типа) указываются в двойных "" или одинарных кавычках. Также к литералам можно прикручивать тег языка: через @: "текст на русском"@ru Тип указываем посредствам ^^ (по умолчанию — plain text). Пример:

 PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
 SELECT $x
 WHERE
 {
   <http://example.org/item01> $x "123"^^<xsd:integer> .
 }

Короткой записью для литерала "42"^^<http://www.w3.org/2001/XMLSchema#integer> является просто 42

На сегодняшний день литералом может быть только объект, но RDF Work Group рассматривает возможность того, чтобы субъект тоже мог быть литералом.

  • 3. Переменные

Переменные в SPARQL имеют глобальную область действия. Они отмечаются при помощи $ или ?.

  • 4. Blank nodes («промежуточные узлы»)

Blank nodes — пришли из RDF. В общем, на русский термин blank node можно перевести примерно как «промежуточный узел». Пример RDF/XML, blank node обозначается посредством атрибута rdf:nodeID:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:ex="http://example.org/stuff/1.0/">
  <rdf:Description rdf:about="http://www.w3.org/TR/rdf-syntax-grammar"

dc:title="RDF/XML Syntax Specification (Revised)">

    <ex:editor rdf:nodeID="abc"/>
  </rdf:Description>
  <rdf:Description rdf:nodeID="abc"
                  ex:fullName="Dave Beckett">
   <ex:homePage rdf:resource="http://purl.org/net/dajobe/"/>
  </rdf:Description>
</rdf:RDF>

Промежуточный узел — это локальный ресурс, который не виден за пределами документа.

  • 5. Шаблоны

Подробнее о шаблонах: http://www.semanticweb.narod.ru/3.html#c5 (англ.)

Версии

SPARQL 1.0 стал стандартом в январе 2008 и включал:

SPARQL 1.0 Язык запросов;
SPARQL 1.0 Протокол;
SPARQL Формат результатов XML.

SPARQL 1.1 является актуальной версией и включает:

SPARQL язык запросов и протокол обновлены до 1.1;
SPARQL 1.1 Обновления;
SPARQL 1.1 HTTP-протокол для управления RDF графами;
SPARQL 1.1 Описания служб;
SPARQL 1.1 Логические следствия(Entailments);
SPARQL 1.1 Основные Федеративные запросы

Пример

Другой пример запросов SPARQL: «Найти даты выхода серий всех сезонов сериала „Клан Сопрано“:

PREFIX dbpo: <http://dbpedia.org/ontology/> SELECT *
WHERE
{
 ?e dbpo:series         <http://dbpedia.org/resource/The_Sopranos>.
 ?e dbpo:releaseDate   ?date.
 ?e dbpo:episodeNumber  ?number.
 ?e dbpo:seasonNumber   ?season.
}
ORDER BY DESC(?date)

Переменные обозначаются префиксом «?» или «$».

Чтобы сделать запросы краткими, SPARQL позволяет определять префиксы и основные URI способом, подобным Turtle. В этом запросе префикс «dbpo» обозначает «http://dbpedia.org/ontology/».

Точка доступа SPARQL

Точка доступа SPARQL — это служба, поддерживающая протокол запросов SPARQL. Точка доступа позволяет пользователю делать запросы к базе знаний. Сервер обрабатывает запрос и возвращает ответ в некотором, обычно машиночитаемом, формате. Таким образом, точки доступа SPARQL в первую очередь являются API к базам знаний, а представление результатов должно быть реализовано программным обеспечением вызывающей стороны.

Различают два вида точек доступа: общего назначения и локальные.

Точки доступа общего назначения могут производить запросы по любым указанным RDF-документам, находящимся в Сети. А локальные точки доступа способны получать данные только от одного ресурса.

Примеры

Автоматическое исполнение запросов

На данный момент для ряда языков программирования существует возможность вызывать SPARQL-запросы, существуют инструменты, позволяющие подключать и в полуавтоматическом режиме строить SPARQL-запросы для точки доступа SPARQL, например ViziQuer.

Ссылки