random - 如何从 SPARQL 中选择随机 DBPedia 节点?

标签 random sample sparql dbpedia

如何使用 sparql 端点从 DBpedia 中选择随机样本?

这个查询

SELECT ?s WHERE { ?s ?p ?o . FILTER ( 1 > bif:rnd (10, ?s, ?p, ?o) ) } LIMIT 10

(找到 here )
似乎在大多数 SPARQL 端点上都可以正常工作,但在 http://dbpedia.org/sparql 上它被缓存(所以它总是返回相同的 10 个节点)。

如果我从 JENA 尝试,我会收到以下异常:
Unresolved prefixed name: bif:rnd

而且我找不到'bif'命名空间是什么。

关于如何解决这个问题的任何想法?

穆龙

最佳答案

我遇到了同样的问题,这里的解决方案都没有解决我的问题。这是我的解决方案;这是不平凡的,而且相当黑客。到目前为止,这适用于 DBPedia,并且可能适用于其他 SPARQL 端点,但不保证适用于 future 的版本。

DBPedia 使用 Virtuoso,它支持 RAND 的未记录参数。功能;该参数有效地指定了用于 PRNG 的范围。游戏是欺骗 Virtuoso 相信在计算每个结果行之前不能对输入参数进行静态评估,从而迫使程序评估 RAND()对于每个绑定(bind):

select * {
    ?s dbo:isPartOf ?o .  # Whatever your pattern is
    bind(rand(1 + strlen(str(?s))*0) as ?rid)
} order by ?rid

奇迹发生在 rand(1 + strlen(str(?s))*0)生成等价于 rand() ;但是通过利用程序无法预测涉及某些变量的表达式的值这一事实强制它在每次匹配时运行(在这种情况下,我们只是将 IRI 的长度计算为字符串)。实际的表达式并不重要,因为我们将它乘以 0完全忽略它,然后添加 1制作 rand正常执行。

这只是因为开发人员在表达式的静态代码评估中没有走这么远。他们本可以很容易地为“乘以零”编写一个分支,但可惜他们没有:)

关于random - 如何从 SPARQL 中选择随机 DBPedia 节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5677340/

相关文章:

Sparql - 如果任何一个变量未绑定(bind),则串联失败

c - Linux下socket如何生成随机文件名?

java - 如何将 ArrayList 的随机索引相互配对

r - 如何显示R中删除的观测值的数量?

python - 无法让 Google App Engine OAuth2-sample(适用于 Python)工作 - 400 错误 : redirect_uri_mismatch

c# - 好的/简单的 asp.net mvc 应用程序与流利的 nhibernate

rdf - Sparql:在 dbpedia.org 上列出史蒂文斯 PIL 伯格的电影

sparql - 为什么我们需要 Fuseki 服务器?

c# - 使用静态方法生成随机数是一种好习惯吗?

python - Python 上的随机模块