SPARQL查询中包含大量值'值'块

时间:2016-05-10 11:19:05

标签: sparql rdf subgraph

我有一个节点列表,我想检索包含这些节点之间所有关系的三元组。

这是我到目前为止所做的:

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。

非常感谢。

1 个答案:

答案 0 :(得分:0)

你现在正在做的可能是最常用的方法。

单个API(例如,Jena)可能支持其他方式来指定一组功能上等同于值块的初始绑定,但可以让实际查询更短。例如,请参阅my answerSaving and reusing the result of a SPARQL queryAdd text search where clause to SPARQL query的答案也有一个耶拿初始绑定的例子。