stringtranslate.com

SPARQL

SPARQL (произносится как «sparkle», рекурсивная аббревиатура [2] для SPARQL Protocol и RDF Query Language ) — это язык запросов RDF , то есть семантический язык запросов для баз данных , способный извлекать и обрабатывать данные, хранящиеся в формате Resource Description Framework (RDF) . [3] [4] Он был принят в качестве стандарта рабочей группой RDF Data Access Working Group (DAWG) Консорциума Всемирной паутины и признан одной из ключевых технологий семантической паутины . 15 января 2008 года SPARQL 1.0 был признан W3C в качестве официальной рекомендации, [5] [6] а SPARQL 1.1 — в марте 2013 года. [7]

SPARQL позволяет создавать запросы, состоящие из тройных шаблонов , конъюнкций , дизъюнкций и дополнительных шаблонов . [8]

Существуют реализации для нескольких языков программирования . [9] Существуют инструменты, которые позволяют подключаться и полуавтоматически конструировать запрос SPARQL для конечной точки SPARQL, например ViziQuer. [10] Кроме того, существуют инструменты для перевода запросов SPARQL на другие языки запросов, например на SQL [11] и на XQuery . [12]

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

SPARQL позволяет пользователям писать запросы, которые следуют спецификации RDF W3C . Таким образом, весь набор данных представляет собой тройки "субъект-предикат-объект". Субъекты и предикаты всегда являются идентификаторами URI, но объекты могут быть URI или литеральными значениями. Эта единая физическая схема из 3 "столбцов" гиперденормализована в том смысле, что то, что было бы 1 реляционной записью с 4 полями, теперь является 4 тройками, в которых субъект повторяется снова и снова, предикат по сути является именем столбца, а объект — значением поля. Хотя это кажется громоздким, синтаксис SPARQL предлагает следующие возможности:

1. Субъекты и объекты могут быть использованы для поиска друг друга, в том числе рекурсивно.

Ниже представлен набор триплетов. Должно быть ясно, что ex:sw001и ex:sw002ссылка на ex:sw003, которая сама по себе имеет ссылки:

ex : sw001  ex : linksWith  ex : sw003  . ex : sw002  ex : linksWith  ex : sw003  . ex : sw003  ex : linksWith  ex : sw004  ,  ex : sw006  . ex : sw004  ex : linksWith  ex : sw005  .

В SPARQL, когда переменная встречается в конвейере выражений в первый раз, она заполняется результатом. Во второй и последующие разы она используется как входные данные. Если мы назначаем («привязываем») URI ex:sw003к ?targetsпеременной, то она направляет результат в ?src; это сообщает нам все, что ссылается на ex:sw003 (зависимость вверх по течению):

SELECT  * WHERE  {  BIND ( ex : sw003  AS  ?targets )  ?src  ex : linksWith  ?targets  . }

Но с простым переключением переменной привязки поведение меняется на противоположное. Это произведет все то, от чего ex:sw003зависит (нисходящая зависимость):

SELECT  * WHERE  {  BIND ( ex : sw003  AS  ?src )  ?src  ex : linksWith  ?targets  .  # ВНИМАНИЕ! Синтаксис не изменился! }

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

SELECT  * WHERE  {  BIND ( ex : sw003  AS  ?src )  ?src  ex : linksWith +  ?targets  .  # Обратите внимание на +; теперь SPARQL найдет ex:sw005 через ex:sw004 }

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

Если  ?S  привязан  к  ( ex : A , ex : B ), то ?S ex : linksWith ?O ведет  себя следующим образом : для каждого s в ?S : извлечь s ex : linksWith , захватить o и добавить o к ?O                     Если  ?O  привязан  к  ( ex : A , ex : B ), то ?S ex : linksWith ?  O ведет себя следующим образом : для каждого o в ?O : fetch ex : linksWith o , capture s добавляет s к ?S                     


2. Выражения SPARQL представляют собой конвейер

В отличие от SQL, в котором есть подзапросы и CTE, SPARQL гораздо больше похож на MongoDB или SPARK. Выражения оцениваются точно в том порядке, в котором они объявлены, включая фильтрацию и объединение данных. Модель программирования становится тем, чем был бы оператор SQL с несколькими предложениями WHERE. Сочетание субъектов и объектов, поддерживающих списки, и конвейерного подхода может дать чрезвычайно выразительные запросы, охватывающие множество различных доменов данных.


В отличие от реляционных баз данных, столбец объекта неоднороден: тип данных объекта, если не URI, обычно подразумевается (или указывается в онтологии ) значением предиката . Литеральные узлы несут информацию о типе, согласующуюся с базовым пространством имен XSD, включая короткие и длинные целые числа со знаком и без знака, числа с плавающей точкой одинарной и двойной точности, дату и время, точные десятичные числа, логические значения и строки. Реализации тройного хранилища в традиционных реляционных базах данных обычно сохраняют значение в виде строки, а четвертый столбец определяет реальный тип. Полиморфные базы данных, такие как MongoDB и SQLite, могут сохранять собственное значение непосредственно в поле объекта.

Таким образом, SPARQL предоставляет полный набор аналитических операций запроса, таких как JOIN, SORT, AGGREGATEдля данных, схема которых является неотъемлемой частью данных, а не требует отдельного определения схемы. Однако информация о схеме (онтология) часто предоставляется извне, чтобы обеспечить однозначное объединение различных наборов данных . Кроме того, SPARQL предоставляет определенный синтаксис обхода графа для данных, которые можно рассматривать как граф.

В приведенном ниже примере демонстрируется простой запрос, использующий определение онтологииfoaf («друг друга»).

В частности, следующий запрос возвращает имена и адреса электронной почты каждого человека в наборе данных :

ПРЕФИКС  foaf :  <http://xmlns.com/foaf/0.1/> ВЫБРАТЬ  ?имя  ?email ГДЕ  {  ?person  a  foaf : Персона  .  ?person  foaf : имя  ?имя  .  ?person  foaf : mbox  ?email  .  }

Этот запрос объединяет все триплеты с соответствующим субъектом, где предикат типа « a» — это человек ( foaf:Person), а у человека есть одно или несколько имен ( foaf:name) и почтовых ящиков ( foaf:mbox).

Для удобства чтения автор этого запроса решил ссылаться на субъект, используя имя переменной " ?person". Поскольку первым элементом триплета всегда является субъект, автор мог бы с таким же успехом использовать любое имя переменной, например " ?subj" или " ?x". Какое бы имя ни было выбрано, оно должно быть одинаковым в каждой строке запроса, чтобы обозначить, что механизм запроса должен объединить триплеты с одним и тем же субъектом.

Результатом соединения является набор строк – ?person, ?name, ?email. Этот запрос возвращает ?nameи , ?emailпоскольку ?personчасто является сложным URI, а не понятной человеку строкой. Обратите внимание, что any ?personможет иметь несколько почтовых ящиков, поэтому в возвращаемом наборе ?nameстрока может появляться несколько раз, по одному разу для каждого почтового ящика.

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

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

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

В случае запросов, считывающих данные из базы данных, язык SPARQL определяет четыре различных варианта запросов для разных целей.

SELECTзапрос
Используется для извлечения необработанных значений из конечной точки SPARQL, результаты возвращаются в табличном формате.
CONSTRUCTзапрос
Используется для извлечения информации из конечной точки SPARQL и преобразования результатов в допустимый RDF.
ASKзапрос
Используется для предоставления простого результата «Истина/Ложь» для запроса к конечной точке SPARQL.
DESCRIBEзапрос
Используется для извлечения RDF-графа из конечной точки SPARQL, содержимое которого определяется конечной точкой на основе того, какую информацию обслуживающий персонал считает полезной.

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

SPARQL 1.1 определяет язык для обновления базы данных с несколькими новыми формами запросов. [13]

Пример

Еще один пример запроса SPARQL, моделирующий вопрос «Каковы столицы всех стран Африки?»:

ПРЕФИКС  например :  <http://example.com/exampleOntology#> ВЫБРАТЬ  ?столица  ?страна ГДЕ  {  ?x  например : название города  ?столица  ;  например : isCapitalOf  ?y  .  ?y  например : название страны  ?страна  ;  например : isInContinent  например : Африка  .  }

Переменные обозначаются префиксом ?или $. Привязки для ?capitalи ?countryбудут возвращены. Когда тройка заканчивается точкой с запятой, субъект из этой тройки неявно завершит следующую пару до целой тройки. Так, например, ex:isCapitalOf ?yсокращение от ?x ex:isCapitalOf ?y.

Процессор запросов SPARQL будет искать наборы триплетов, которые соответствуют этим четырем шаблонам триплетов, связывая переменные в запросе с соответствующими частями каждого триплета. Важно отметить здесь «ориентацию свойств» (соответствия классов могут проводиться исключительно через атрибуты классов или свойства – см. Утиная типизация ).

Чтобы сделать запросы краткими, SPARQL позволяет определять префиксы и базовые URI способом, похожим на Turtle . В этом запросе префикс " ex" означает " http://example.com/exampleOntology#".

Расширения

GeoSPARQL определяет функции фильтрации для запросов географических информационных систем (ГИС), используя общеизвестные стандарты OGC ( GML , WKT и т. д.).

SPARUL — это еще одно расширение SPARQL. Оно позволяет обновлять хранилище RDF с помощью этого декларативного языка запросов, добавляя INSERTи DELETEметоды.

XSPARQL — это интегрированный язык запросов, объединяющий XQuery и SPARQL для одновременного запроса источников данных XML и RDF. [14]

Реализации

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

Более полную информацию см. в разделе Список реализаций SPARQL , включая TripleStore , API и другие хранилища, в которых реализован стандарт SPARQL.

Смотрите также

Ссылки

  1. ^ abcd Хебелер, Джон; Фишер, Мэтью; Блейс, Райан; Перес-Лопес, Эндрю (2009). Программирование семантической паутины . Индианаполис : John Wiley & Sons, Inc. стр. 406. ISBN 978-0-470-41801-7.
  2. ^ Беккет, Дэйв (6 октября 2011 г.). «Что означает SPARQL?». [email protected] .
  3. Джим Рапоза (2 мая 2006 г.). «SPARQL заставит Интернет сиять». eWeek . Получено 17 января 2007 г.
  4. ^ Сегаран, Тоби; Эванс, Колин; Тейлор, Джейми (2009). Программирование семантической паутины . O'Reilly Media, Inc., 1005 Gravenstein Highway North, Севастополь, Калифорния 95472. стр. 84. ISBN 978-0-596-15381-6.
  5. ^ «Новости активности семантической паутины W3C – SPARQL является рекомендацией». W3.org. 15 января 2008 г. Архивировано из оригинала 20 января 2008 г. Получено 1 октября 2009 г.
  6. ^ "XML и семантическая паутина. Хронология стандартов W3C" (PDF) . 4 февраля 2012 г. Получено 27 ноября 2013 г.
  7. ^ «Одиннадцать спецификаций SPARQL 1.1 являются рекомендациями W3C». w3.org. 21 марта 2013 г. Получено 25 апреля 2013 г.
  8. ^ "XML и веб-сервисы в новостях". xml.org . 6 октября 2006 г. Получено 17 января 2007 г.
  9. ^ "SparqlImplementations – ESW Wiki". Esw.w3.org . Получено 1 октября 2009 г. .
  10. ^ "ViziQuer — инструмент для автоматического построения запросов SPARQL". lumii.lv . Получено 25 февраля 2011 г.
  11. ^ "D2R Server" . Получено 4 февраля 2012 г.
  12. ^ "SPARQL2XQuery Framework" . Получено 4 февраля 2012 г.
  13. ^ Ю, Лиян (2014). Руководство разработчика по семантической паутине . Springer. стр. 308. ISBN 9783662437964.
  14. ^ "XSPARQL опубликован как W3C Submission". W3.org. 23 июня 2009 г. Получено 22 мая 2022 г.

Внешние ссылки