是否可以使用if语句来确定在SPARQL中的where子句中使用哪种图模式?

问题描述 投票:1回答:1

所以我对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中的图模式计算成本很高,除非必要,我不想运行它。

sparql
1个回答
1
投票

你不能像你在例子中显示的那样做,但你可以使用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和图模式的绑定之间。

© www.soinside.com 2019 - 2024. All rights reserved.