我有一个请求来统计记录数;请求返回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条记录。非常感谢您的回复。我感谢您的帮助。
请注意,您的第一个查询使用了无效的 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)
对于您的第二个查询,需要了解的事情——
OFFSET意思是“从总结果集中跳过这么多行”LIMIT意思是“只给我这么多行(从任何之后开始OFFSET)”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)
我把中介的疑问留给你...