如何限制SPARQL查询中特定变量的结果数?

时间:2012-01-17 16:50:29

标签: query-optimization sparql

假设我有一个像这样的SPARQL查询,寻找具有焦点资源的共享属性的资源,并获得关于焦点资源的其他一些陈述:

CONSTRUCT {
  ?focal pred:icate ?shared .
  ?other pred:icate ?shared .
}
WHERE {
  ?focal pred:icate ?shared ;
         more:info ?etc ;
         a "foobar" .
  ?other pred:icate ?shared .
}
LIMIT 500

如果有超过500个其他资源,LIMIT可能会排除该more:info语句和对象。那么,有没有办法说“我只想要最多500个?other”,或者我是否必须将此查询分成多个部分?

2 个答案:

答案 0 :(得分:11)

您可以在子查询中使用LIMIT,例如以下内容:

CONSTRUCT {
  ?focal pred:icate ?shared .
  ?other pred:icate ?shared .
}
WHERE {
    ?focal pred:icate ?shared ;
           more:info ?etc ;
           a "foobar" .
    { 
      SELECT ?shared {
        ?other pred:icate ?shared .
      }
      LIMIT 500
    }
}

答案 1 :(得分:1)

http://www.w3.org/TR/2012/WD-sparql11-query-20120105/#modResultLimit

  

LIMIT子句对解决方案的数量设置上限   回。如果在应用OFFSET后实际解决方案的数量,   大于极限,则最多为极限数量的解   将被退回。

您只能限制查询的解决方案数量,而不是其特定子集。您可以使用带有LIMIT子句的子查询:http://www.w3.org/TR/sparql-features/#Subqueries

相关问题