Mul*_*one 6 random sample sparql dbpedia
如何使用sparql端点从DBpedia中选择随机样本?
这个查询
SELECT ?s WHERE { ?s ?p ?o . FILTER ( 1 > bif:rnd (10, ?s, ?p, ?o) ) } LIMIT 10
Run Code Online (Sandbox Code Playgroud)
(在这里找到)似乎在大多数SPARQL端点上都可以正常工作,但在http://dbpedia.org/sparql上它会被缓存(因此它总是返回相同的10个节点).
如果我从JENA尝试,我会得到以下异常:
Unresolved prefixed name: bif:rnd
Run Code Online (Sandbox Code Playgroud)
我找不到'bif'名称空间是什么.
关于如何解决这个问题的任何想法?
Mulone
Ste*_*ris 10
在SPARQL 1.1中,您可以执行以下操作:
SELECT ?s
WHERE {
?s ?p ?o
}
ORDER BY RAND()
LIMIT 10
Run Code Online (Sandbox Code Playgroud)
我不知道有多少商店会优化,甚至实现这一点.
[见下面的评论,这不太有效]
另一种选择是:
Run Code Online (Sandbox Code Playgroud)SELECT (SAMPLE(?s) AS ?ss) WHERE { ?s ?p ?o } GROUP BY ?s
但我认为更不可能进行优化.
bif:rnd
不是SPARQL标准,因此不能移植到任何SPARQL端点.您可以使用LIMIT,ORDER和OFFSET来模拟带有标准查询的随机样本.就像是 ...
SELECT * WHERE { ?s ?p ?o }
ORDER BY ?s OFFSET $some_random_number$ LIMIT 10
Run Code Online (Sandbox Code Playgroud)
some_random_number
您的应用程序生成的数字在哪里.这应该避免缓存问题,但这个查询反正非常昂贵,我不知道公共端点是否会支持它.
尽量避免完全打开模式?s ?p ?o
,您的查询将更加高效.