如何从SPARQL中选择随机DBPedia节点?
|
如何使用sparql端点从DBpedia中选择随机样本?
这个查询
SELECT ?s WHERE { ?s ?p ?o . FILTER ( 1 > bif:rnd (10, ?s, ?p, ?o) ) } LIMIT 10
(在这里找到)
在大多数SPARQL端点上似乎都可以正常工作,但是在http://dbpedia.org/sparql上,它已被缓存(因此它总是返回相同的10个节点)。
如果我从JENA尝试,则会收到以下异常:
Unresolved prefixed name: bif:rnd
而且我找不到\'bif \'名称空间是什么。
关于如何解决这个问题的任何想法?
慕罗尼
没有找到相关结果
已邀请:
6 个回复
卧沫
不是SPARQL标准,因此不能移植到任何SPARQL端点。您可以使用LIMIT,ORDER和OFFSET来模拟带有标准查询的随机样本。就像是 ...
其中
是您的应用程序生成的数字。这样可以避免缓存问题,但是此查询无论如何都是昂贵的,而且我不知道公共端点是否会支持它。 尽量避免使用完全开放的模式(例如
),您的查询会更加高效。
扭湘阀柿蹄
我不知道有多少家商店会优化,甚至还没有实施。 [请参阅下面的评论,这不太有效] 替代方法是:
但是我认为优化的可能性更低。
澳绍能
席陋临拈
函数的未记录参数。该参数有效地指定了用于PRNG的范围。游戏的目的是欺骗Virtuoso相信输入的参数不能在计算每个结果行之前进行静态求值,从而迫使程序对每个绑定求
:
魔力发生在
中,它等效于
;但是通过利用程序无法预测涉及某个变量的表达式的值来强迫它在每次匹配上运行(在这种情况下,我们只是将IRI的长度计算为字符串)。实际表达式并不重要,因为我们将其乘以
即可完全忽略它,然后加上
以使
正常执行。 这之所以起作用,是因为开发人员在表达式的静态代码评估中没有走得那么远。他们可以很容易地为“乘以零”编写一个分支,但是可惜他们没有:)
勘掸府迫路
显然,这不会选择随机三元组,但是前k个按MD5排序的受试者组应具有统计学上显着的样本的相关特征(即样本代表整个人群,没有特定的选择偏差)。
久纳禾澎
这个怎么样?