Что такое «набор данных» в контексте запроса SPARQL?

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

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

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

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

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 выполняется для набора данных по умолчанию. Но тогда почему пропуск всех наборов данных по-прежнему приводит к данным, возвращаемым запросом?


person Zach Smith    schedule 21.02.2020    source источник
comment
Ах. Я вижу, что указание нескольких предложений FROM фактически определено в документации: w3.org/TR / sparql11-query / # un namedGraph. If a query provides more than one FROM clause, providing more than one IRI to indicate the default graph, then the default graph is the RDF merge of the graphs obtained from representations of the resources identified by the given IRIs.   -  person Zach Smith    schedule 21.02.2020
comment
И это кажется уместным обсуждением, чтобы связать WRT с тем, как объединяются графы. w3.org/2011/rdf-wg/track/issues/17 < / а>. кажется сложным   -  person Zach Smith    schedule 21.02.2020


Ответы (2)


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

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

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

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

Репозиторий - это набор данных, о котором вы говорите.

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

SPARQL

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

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

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

person bastbijl    schedule 21.02.2020

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

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

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

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

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

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

person AndyS    schedule 21.02.2020