我有一个节点列表,我想检索包含这些节点之间所有关系的三元组。
这是我到目前为止所做的:
PREFIX myPrefix: <http://example.org/myPrefix/>
SELECT ?a ?relation ?b
WHERE{
values ?a { myPrefix:id_00083184 myPrefix:id_00083187
myPrefix:id_00083189 myPrefix:id_00083182
myPrefix:id_09463313 myPrefix:id_00000790
myPrefix:id_00073965 myPrefix:id_00073966
myPrefix:id_00016990 myPrefix:id_08380001
myPrefix:id_00019131 myPrefix:id_03739215
myPrefix:id_00019129 myPrefix:id_00034482
myPrefix:id_00098617
}
values ?b { myPrefix:id_00083184 myPrefix:id_00083187
myPrefix:id_00083189 myPrefix:id_00083182
myPrefix:id_09463313 myPrefix:id_00000790
myPrefix:id_00073965 myPrefix:id_00073966
myPrefix:id_00016990 myPrefix:id_08380001
myPrefix:id_00019131 myPrefix:id_03739215
myPrefix:id_00019129 myPrefix:id_00034482
myPrefix:id_00098617
}
?a ?relation ?b .
}
有了这个,我得到了我想要的东西,即我(外部)列表上节点之间的所有关系;使用values
并重复?a
和?b
的节点。但问题是,我的节点列表可能非常大;有时它可以有多达1000个节点,这只是一个小案例;并且该查询执行时间太长。
有没有更好的方法来做我需要的?这是我发现的唯一方法,但我对SPARQL不是很流利,所以,任何方式都能正确地做到这一点?
PS:我从另一个数据库的查询外部获取节点列表并使用Java我构建了附加列表中每个节点的查询。
这对我来说听起来非常穴居人,但正如我所说,我开始使用SPARQL。
非常感谢。
答案 0 :(得分:0)
你现在正在做的可能是最常用的方法。
单个API(例如,Jena)可能支持其他方式来指定一组功能上等同于值块的初始绑定,但可以让实际查询更短。例如,请参阅my answer至Saving and reusing the result of a SPARQL query。 Add text search where clause to SPARQL query的答案也有一个耶拿初始绑定的例子。