Как изменить формулу запроса в зависимости от того, связана ли переменная?Условный подзапрос в функции SPIN (SPARQL)
Я вызова магическим свойством, как это:
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
.
Ralph, Я обновил свое определение магии в вопросе, чтобы добавить термин, отсутствующий в примере кода. Цель состоит в том, что «с учетом некоторого значения? Subj для всех ресурсов Rule найдите правила, которые имеют правило .someProp == subj OR rule.someProp == null (свойство не определено). Если входное значение? Subj равно null, return only Rules, где rule.someProp == null. " – RMorrisey
Я попытался использовать что-то вроде «FILTER (BOUND (? Property))», но я обнаружил, что свойство «свойство» связано с инструкцией, приведенной ниже, в том же блоке, поэтому он не отфильтровывает результаты таким образом Я хочу их. – RMorrisey