所以我对SPARQL相当陌生。我知道if语句在SPARQL中不能这样使用,但我想知道是否有一些方法可以实现我想达到的目的,即根据绑定的值在不同的图形模式上进行匹配。
SELECT ...
WHERE {
// ...set ?x to some count
IF (?x = 0) {
// series of graph patterns
}
ELSE {
// different series of graph patterns
}
}
我见过的大多数例子都只是基于if语句设置特定绑定的值,这不是我想做的。else中的图模式计算成本很高,除非必要,我不想运行它。
你不能像你在例子中显示的那样做,但你可以使用UNION模式,比如下面。
SELECT ...
WHERE {
{
// ... set ?x to some value
// series of graph patterns
FILTER(?x = 0)
}
UNION
{
// ... set ?x to some value
// different series of graph patterns
FILTER(?x != 0)
}
}
请注意,如果你想让过滤器在子图模式中工作,你必须要有 ?x
绑定在图型内。如果SPARQL引擎优化得很好,过滤器应该在图模式匹配之前被评估,但你也可以玩弄过滤器的位置,例如,在?x和图模式的绑定之间。