Что такое «набор данных» в контексте запроса SPARQL? - PullRequest
1 голос
/ 21 февраля 2020

В спецификации SPARQL упоминается, что для указания набора данных можно использовать предложение FROM.

В запросе SPARQL можно указать набор данных, который будет использоваться для сопоставления с помощью предложение FROM и предложение FROM NAMED для описания набора данных RDF.

Что такое "набор данных" в контексте SPARQL? Я очень хорошо знаком с базами данных в целом, и я в принципе понимаю, что запрос данных, выраженных на языке, таком как SQL, затем выполняется для набора данных для разрешения некоторого подмножества этого набора данных.

I пытаюсь понять следующий запрос:

prefix cpmeta: <...some_domain>

select distinct
?uri
?label
?stationId

from <...some_domain>
from <...some_domain>
from <...some_domain>
from <...some_domain>
from named <...some_domain>

where {

    { ?uri rdfs:label ?label }

    UNION

    { ?uri cpmeta:hasName ?label }

    UNION 

    {
        graph <...some_domain> {
            ?uri a cpmeta:Station .
            ?uri cpmeta:hasName ?label .
        }
    }

    ?uri cpmeta:hasStationId ?stationId
}

limit 100

Итак, из документации по спецификации я в принципе понимаю, что

  1. Указано 4 набора данных и (я думаю)
  2. Определен один «набор данных RDF»

Однако. Запрос фактически выполняется (но с немного отличающимися результатами), если я пропущу предложения FROM и FROM NAMED:

prefix cpmeta: <...some_domain>

select distinct
?uri
?label
?stationId

where {

    { ?uri rdfs:label ?label }

    UNION

    { ?uri cpmeta:hasName ?label }

    UNION 

    {
        graph <...some_domain> {
            ?uri a cpmeta:Station .
            ?uri cpmeta:hasName ?label .
        }
    }

    ?uri cpmeta:hasStationId ?stationId
}

limit 100

Так ясно ??? уже указан набор данных. Это через prefix?

Вопросы:

  1. Почему RDF dataset идентифицируется иначе, чем обычный набор данных (FROM против FROM NAMED)
  2. URI для префикса фактически повторно используется в операторе FROM. В чем разница между префиксом и предложением FROM?

Этот вопрос - Указание набора данных в запросе SPARQL - показывает, как указать набор данных, но не объясняется, что это означает в контексте запроса SPARQL и, тем не менее, в контексте того, что запрос SPARQL разрешается для фактических данных.

Этот вопрос - Предложение FROM в запросах SPARQL - упоминает, что запрос SPARQL без предложения FROM выполняется для набора данных по умолчанию. Но тогда почему пропуск всех наборов данных по-прежнему приводит к данным, возвращаемым запросом?

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

RDF Dataset представляет собой набор графиков. Он имеет один по умолчанию, безымянный граф и ноль или более именованных графов.

Конечная точка SPARQL имеет набор данных для запроса. Если вы ничего не делаете, запрос выполняется для любой конечной точки, которой вы отправляете запрос, в качестве набора данных RDF.

Вот почему запрос OP вернул результаты. Конечная точка уже имела набор данных RDF для запроса.

Некоторые (меньшинство, не все) конечные точки позволяют запросу изменять набор данных RDF для запроса, используя FROM и FROM NAMED. Эти два раздела описывают требуемый набор данных RDF. URI могут ссылаться на графики в Интернете или графики в наборе данных по умолчанию в зависимости от реализации (графики в наборе данных по умолчанию более распространены в моем опыте).

Протокол SPARQL для запроса также необязательный default-graph-uri и named-graph-uri параметры, которые функционируют как FROM или FROM NAMED. Опять же, не все конечные точки соответствуют параметрам.

Правильный способ доступа к именованному графу во время выполнения запроса - с помощью GRAPH, а не FROM.

1 голос
/ 21 февраля 2020

Сравнение выполнения запроса SPARQL с запросами SQL немного сложнее. SPARQL - более высокий уровень.

Наборы данных

Конечная точка (например, база данных, такая как Virtuoso, GraphDB) имеет некоторую свободу (не) для реализации концепций SPARQL.

Набор данных такая концепция. Обычно графовая база данных позволяет вам создать репозиторий , который эквивалентен базе данных в мире SQL. Внутри этой тройки хранятся, и эти тройки могут быть сгруппированы в именованные графы . Конструкция GRAPH помогает вам выбрать набор для поиска.

Хранилище - это набор данных, на который вы ссылаетесь.

Очень немногие базы данных поддерживают запросы к наборам данных / репозиториям, которые не размещены в той же базе данных. По очень очевидным причинам.

SPARQL

Чем менее точен ваш запрос, тем больше данных ему соответствует. Использование GRAPH <...> {} может сузить наборы, чтобы они соответствовали некоторым тройкам, без необходимости указывать полный подзапрос

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

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

...