Группировка по пустым узлам
У меня есть следующие данные:
@prefix f: <http://example.org#> .
_:a f:trait "Rude"@en .
_:a f:name "John" .
_:a f:surname "Roy" .
_:b f:trait "Crude"@en .
_:b f:name "Mary" .
_:b f:surname "Lestern" .
Однако, если я выполню следующий запрос в Blazegraph:
PREFIX f: <http://example.org#>
SELECT ?s ?o
WHERE
{
?s f:trait ?o .
}
Я получаю шесть результатов:
s o
t32 Crude
t37 Crude
t39 Crude
t31 Rude
t36 Rude
t38 Rude
Если пустые узлы _:a
а также _:b
разные узлы, как мне написать запрос SPARQL, чтобы получить только два разных результата? я пытался SELECT DISTINCT
, но он по-прежнему возвращает шесть результатов. Я пробовал группировать по ?o
, но Blazegraph возвращает ошибку, говоря, что это плохая совокупность. Почему происходит такой вывод повторяющихся кортежей? И как этого избежать?
1 ответ
Проблема в том, что вы вставили данные, содержащие пустые узлы, несколько раз. Эта операция не идемпотентна.
Полезные цитаты
Из концепции RDF 1.1 и абстрактного синтаксиса:
Пустые идентификаторы узлов - это локальные идентификаторы, которые используются в некоторых конкретных синтаксисах RDF или реализациях хранилища RDF. Они всегда локально ограничиваются файлом или хранилищем RDF и не являются постоянными или переносимыми идентификаторами для пустых узлов.
Графы RDF можно рассматривать как соединения простых атомарных предложений в логике первого порядка, где пустые узлы являются свободными переменными, которые понимаются как экзистенциальные. Взятие объединения двух графов аналогично синтаксическому соединению в этом синтаксисе. Синтаксис RDF не имеет явных квантификаторов привязки переменных, поэтому условия истинности для любого графа RDF рассматривают свободные переменные в этом графе как экзистенциально количественные в этом графе. Взятие объединения графов, которые разделяют пустой узел, изменяет подразумеваемые области квантификатора.
Пустые метки узлов ограничиваются набором результатов.
Там не должно быть никакого отношения между этикеткой
_:a
в результирующем наборе и пустой узел в графе данных с одинаковой меткой.Разработчик приложения не должен ожидать, что пустые метки узлов в запросе будут ссылаться на определенный пустой узел в данных.
Пустые узлы... предполагаются не пересекающимися с пустыми узлами в хранилище графиков, т. Е. Будут вставляться со "свежими" пустыми узлами.
Некоторое обсуждение
Различные триплеты предоставляют решения для описанных "проблем". Например, Jena позволяет использовать псевдо-URI, такие как <_:b1>
и т.п.