Проблема Sparql в предложении BIND
В настоящее время я пытаюсь отсортировать некоторые клиенты по приоритету (те, которые имеют действующую подписку, а затем другие.
Для этого я использую предложение BIND в этом запросе:
SELECT DISTINCT ?context ?priority ?label {
?s a my:Client .
?s rdfs:label ?label .
BIND ( IF(EXISTS {?s rdf:type my:Subscriber}, 1, 0) AS ?priority )
} ORDER BY DESC(?priority) ASC(?label)
Мне кажется, что? Priority var всегда должен быть привязан либо к 0, либо к 1, но всякий раз, когда я выполняю запрос, я получаю (вместе с ожидаемым выходным результатом) несвязанные приоритетные "строки" для тех элементов, которые должны получить 1 для приоритета, поэтому я Мне нужно добавить FILTER (bound(?priority)) в мой запрос, чтобы получить то, что я ожидаю.
Это нормально или я что-то упустил?
Заранее спасибо, Макс.
Редактировать:
=> подал проблему сортировки в трекер
Я отредактировал запрос, чтобы проверить, что prority является связанным и несвязанным на одном и том же узле.
Вот пример вывода результатов, которые я получаю
?context = urn:graph:1772#844 , ?priority = 1^^http://www.w3.org/2001/XMLSchema#integer , ?sort1 = client 2@fr
?context = urn:graph:1772#1690 , ?priority = 1^^http://www.w3.org/2001/XMLSchema#integer , ?sort1 = client 1@fr
?context = urn:graph:1772#742 , ?priority = 0^^http://www.w3.org/2001/XMLSchema#integer , ?sort1 = client 4@fr
?context = urn:graph:1772#1010 , ?priority = 0^^http://www.w3.org/2001/XMLSchema#integer , ?sort1 = client 3@fr
?context = urn:graph:1772#1690 , ?sort1 = client 1@fr
?context = urn:graph:1772#844 , ?sort1 = client 2@fr
В последних двух строках переменная? Priority вообще не связана. Кстати, вы заметите, что второе предложение ORDER также не учитывается, если первое предложение не связано
1 ответ
Была ошибка с использованием EXISTS
как дочернее выражение другого выражения, которое может привести к неверным результатам, как в вашем примере.
Теперь это исправлено в исходном коде и будет включено в следующий выпуск