sparql 中的偏移量

Min*_*yễn 0 sparql

我有一个请求来统计记录数;请求返回129980条记录

SELECT count distinct ?url
  WHERE {
  ?url a dbo:Film.
  } 
Run Code Online (Sandbox Code Playgroud)

因为每次SPARQL只返回10000条记录;所以我必须使用“偏移”。

SELECT distinct ?url
  WHERE {
  ?url a dbo:Film.
  }limit 10000 offset 1000
Run Code Online (Sandbox Code Playgroud)

问题:如果我想取所有记录,我需要设置offset=12;但是为什么当我设置offset = 1000时我仍然得到1000条记录。非常感谢您的回复。我感谢您的帮助。

Tal*_*Ted 7

请注意,您的第一个查询使用了无效的 SPARQL 语法。您只能得到结果,因为您正在查询的引擎(如果您正在查询 DBpedia,正如它所显示的那样,那就是 Virtuoso)对许多错误非常宽容。正确且完整的语法是——

PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ( COUNT ( DISTINCT ?url ) AS ?HowManyFilms )
  WHERE {
  ?url a dbo:Film .
  } 
Run Code Online (Sandbox Code Playgroud)

对于您的第二个查询,需要了解的事情——

  1. OFFSET意思是“从总结果集中跳过这么多行”
  2. LIMIT意思是“只给我这么多行(从任何之后开始OFFSET)”
  3. 行可以按任何顺序传递,并且如果您不包含ORDER BY. 这可能意味着OFFSET当所有部分结果集组合在一起时,多个不同的查询可能无法获取所有行,并且可能会提供重复的行。因此,无论何时您使用OFFSETand/or LIMIT,最好也使用ORDER BY.

总之,将其添加到第一个查询中以获取前 10,000 行——

ORDER BY ?url LIMIT 10000 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

-- 这是为了获取最后 9,980 行 --

ORDER BY ?url LIMIT 10000 OFFSET 120000
Run Code Online (Sandbox Code Playgroud)

我把中介的疑问留给你...