Как изменить формулу запроса в зависимости от того, привязана переменная или нет?
Я вызываю магическое свойство следующим образом:
WHERE {
VALUES (?subj) {
([my bound positional parameter value goes here...])
}
?subj :myMagicProperty ?result .
}
Внутри магического свойства я делаю союз:
?result a :Rule .
{
?result :someProp ?subj .
}
UNION
{
FILTER NOT EXISTS {
?result :someProp ?anyValue .
}
}
Другими словами, получить все результаты, где :someProp
означает это значение, или :someProp
не определено.
Вот сложная часть. Если ?subj
не привязан (т. е. я установил его как UNDEF
в блоке VALUES
), приведенный выше запрос сходит с ума и возвращает все.
Вместо этого я хочу проверить, не привязан ли ?subj
. Если ?subj
не привязан, :myMagicProperty
должен только возвращать следующие результаты:
FILTER NOT EXISTS {
?result ?someProp ?anyValue .
}
Я экспериментировал с использованием FILTER
и функции BOUND
, но не могу понять, как добиться правильного поведения. Как удалить одно из предложений UNION
из моего запроса, если ?subj
не привязано?
Обновления
В первый запрос добавлен блок VALUES
.
Добавлен отсутствующий оператор ?result a :Rule .
.
Исправлено ?someProp
на :someProp
.