Одиночная четверка + самый простой запрос SPARQL = 1 результат в Йене, 2 результата в Сезаме - кто прав?

Добавьте только этот четырехугольник в пустой магазин:

<http://x.com/s> <http://x.com/p> 2 <http://x.com/g> .

Затем выполните этот запрос SPARQL (взят из книги Боба Дучарма "Learning SPARQL", так что это должен быть стандартный SPARQL для получения всех четырехугольников в наборе данных, независимо от реализации, верно!?):

SELECT ?g ?s ?p ?o
WHERE {
{ ?s ?p ?o }
UNION
{ GRAPH ?g { ?s ?p ?o } } }

Но Джена и Сезам отвечают разными ответами!! Вот что я вижу:

Консоль Jena Fuseki на Tomcat 6.0.37 (версия 2.10.0 - из коробки, без изменений конфигурации!) - (правильный ответ, насколько я понимаю):

--------------------------------------------------------------
| g                | s                | p                | o |
==============================================================
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 |
--------------------------------------------------------------

Sesame Workbench на Tomcat 6.0.37 (версия 2.7.3 - из коробки, без изменений конфигурации!): Просто использовали функцию "Добавить" в рабочей среде, чтобы вручную добавить вышеуказанный квад (с выбранным "N-Quad") в раскрывающемся списке "Формат данных"), в поле "Введите данные RDF, которые вы хотите загрузить", затем запустите приведенный выше запрос:

--------------------------------------------------------------
| g                | s                | p                | o |
==============================================================
|                  | <http://x.com/s> | <http://x.com/p> | 2 |
| <http://x.com/g> | <http://x.com/s> | <http://x.com/p> | 2 |
--------------------------------------------------------------

Так что это немного пугает тех, кто начинает смотреть на RDF - чего мне здесь не хватает? Я полагаю, что "Сезам" не может быть "неправильным", поэтому, я полагаю, это должна быть моя "интерпретация" (или запрос Боба не "стандартный SPARQL", и поэтому разные реализации могут возвращать разные результаты) - любое просвещение было бы очень добро пожаловать:)!

1 ответ

Решение

Как отмечает @Joshua Taylor в своем комментарии, причина в том, что Сезам и Йена используют разные интерпретации графа по умолчанию.

В Сезаме весь репозиторий считается графом по умолчанию: все операторы во всех именованных графах, а также все операторы без именованного графа. Следовательно, первый аргумент вашего объединения, который запрашивает график по умолчанию, завершается успешно и связывается ?s, ?p а также ?o (но нет ?g). Второй аргумент вашего объединения, очевидно, также успешен, потому что исходный четырехугольник, конечно, находится в именованном графе, и поэтому вы получите два ответа.

Jena по умолчанию использует "эксклюзивный" граф по умолчанию: только графы, которые явно не добавлены в какой-либо конкретный именованный граф, находятся в графе по умолчанию. Следовательно, в Jena первая часть вашего объединения завершается неудачно (на графике по умолчанию Jena нет соответствующих операторов), вторая часть завершается успешно, и поэтому вы получаете только 1 результат.

Как бы странно это ни звучало, оба верны. Разница заключается лишь в том, как настроен набор данных, по которому выполняется запрос.

Конечно, есть способы справиться с этим. И в Йене, и в Сезаме вы можете добавить FROM (NAMED) пункты, чтобы сделать его явным, что такое запрашиваемый набор данных (Сезам предлагает sesame:nil имя графа, чтобы явно запросить те операторы, с которыми не связан именованный граф). Кроме того, вы можете программно изменить определение набора данных, по которому выполняется запрос. Точные механизмы в Йене и Сезаме немного отличаются, но у них обоих есть опция (в Сезаме вы можете создать и предоставить Dataset Я полагаю, что вы можете перенастроить реальное хранилище или модель, в которой вы выполняете запрос, по-другому).

Другие вопросы по тегам