【发布时间】:2015-10-12 20:49:14
【问题描述】:
如何根据变量是否绑定来改变查询公式?
我正在像这样调用魔法属性:
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 未绑定(即,我在VALUES 块中将其设置为UNDEF),则上述查询会变得疯狂并返回所有内容。
相反,我想检查?subj是否未绑定。如果?subj 未绑定,:myMagicProperty 应该仅返回以下结果:
FILTER NOT EXISTS {
?result ?someProp ?anyValue .
}
我已经尝试过使用FILTER 和BOUND 函数,但我不知道如何获得正确的行为。当?subj 未绑定时,如何从查询中删除UNION 子句之一?
更新
修改了第一个查询以添加 VALUES 块。
添加了缺少的 ?result a :Rule . 语句。
将?someProp 更正为:someProp。
【问题讨论】:
标签: sparql topbraid-composer spin-rdf