SPARQL 1.1 режимы подключения и запрос с предложением FROM
В настоящее время я документирую / тестирую режимы включения SPARQL 1.1, и в рекомендации неоднократно говорится, что
График области видимости граф эквивалентен активному графу
но он не указывает, на что ссылается активный граф: это набор данных, используемый в запросе? объединение всех графиков в магазине?
В качестве теста, чтобы определить это, я получил этот граф URIed <http://www.example.org/>
в хранилище Sesame Memory с RDF-схемой и хранилищем прямого вывода (v2.7.14)
@prefix ex:<http://www.example.org/> .
ex:book1 rdf:type ex:Publication .
ex:book2 rdf:type ex:Article .
ex:Article rdfs:subClassOf ex:Publication .
ex:publishes rdfs:range ex:Publication .
ex:MITPress ex:publishes ex:book3 .
Я пытался следующий запрос (что означает использование графика по умолчанию, таким образом, механизм вывода)
SELECT ?s WHERE { ?s a ex:Publication . }
Как и ожидалось, он возвращает мне все три экземпляра
<http://www.example.org/book1>
<http://www.example.org/book2>
<http://www.example.org/book3>
в то время как запрос:
SELECT ?s FROM ex: WHERE { ?s a ex:Publication . }
только возвращается
<http://www.example.org/book1>
При указанных обстоятельствах, не должны ли оба результата быть одинаковыми?
Что должно произойти (согласно рекомендации), если данные и схема разделены между двумя графиками в магазине (например, <urn:rdfs-schema>
а также <urn:data>
или даже разбросаны по большему количеству графиков), и запрос использует оба графика (или подмножество связанных со схемами графиков) в предложении FROM вместо графика по умолчанию?
То есть вывод должен быть глобальным по всему магазину или зависит от набора данных запроса?
Или, может быть, рекомендация достаточно свободна, чтобы сделать ее зависимой от реализации проблемой?
Спасибо за ваши огни,
Максимум.
РЕДАКТИРОВАТЬ этот вопрос перенаправляется в режимы включения SPARQL 1.1 и выполняется запрос с предложением FROM (продолжение)
2 ответа
Ваш второй запрос только возвращает book1
потому что в выводчике RDFS Сезама вложенные операторы вставляются в граф по умолчанию, а не в именованные графы, из которых исходят предпосылки для вложения. Таким образом, соответствующие результаты просто не представлены на графике, который вы запрашиваете.
Причина такого выбора дизайна, по крайней мере, отчасти историческая, так как механизм логических выводов Sesame RDFS предшествует представлению W3C о режимах реализации. В то время обоснованием было то, что в случае вывода на несколько именованных графов (где, например, одна посылка происходит от графа A, а другая от B), вставка в граф по умолчанию (а не в A, или B, или в оба) Проще всего с наименьшим количеством путаницы.
Кунжут в настоящее время явно не поддерживает спецификацию режимов подключения W3C. Однако, если вы чувствуете, что можно сделать простое улучшение, чтобы сделать его более совместимым, во что бы то ни стало зарегистрируйте запрос функции.
(раскрытие: кунжутный разработчик)
Что именно находится в графике по умолчанию, не определено стандартом SPARQL 1.1. В частности, см. 13.1 Примеры наборов данных RDF, в которых упоминается, что:
Определение набора данных RDF не ограничивает отношения именованных и графов по умолчанию. Информация может повторяться на разных графиках; отношения между графиками могут быть выставлены. Два полезных соглашения:
- иметь информацию в графе по умолчанию, которая включает информацию о происхождении названных графов
- включить информацию в названные графы в граф по умолчанию.
Однако с помощью предложений FROM, чтобы указать, какой граф должен быть графом по умолчанию, или с помощью нескольких предложений FROM, чтобы указать, какие графы должны быть объединены, чтобы быть графом по умолчанию.
Это все, что касается графика по умолчанию. Активный граф - это еще один термин, который вы увидите в спецификации SPARQL 1.1:
Граф, который используется для сопоставления базового графического шаблона, является активным графом. В предыдущих разделах все запросы были показаны выполненными для одного графа, графа по умолчанию набора данных RDF в качестве активного графа.
GRAPH
Ключевое слово используется, чтобы сделать активный граф одним из всех названных графов в наборе данных для части запроса.
Таким образом, вы можете использовать from (возможно, несколько раз) для управления графом по умолчанию и, тем самым, начальным активным графом, а затем графом { … } в запросе, чтобы изменить активный граф.