'values' 块内具有大量值的 SPARQL 查询

SPARQL query with large number of values inside 'values' block

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

这是我目前所做的:

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。

非常感谢。

您现在所做的可能是最通用的方法。

个别 API,例如 Jena,可能支持其他方式来指定一组在功能上等同于值块的初始绑定,但可以让实际查询更短。例如,参见 my answer to Saving and reusing the result of a SPARQL query. The answer to Add text search where clause to SPARQL query 也有一个 Jena 中的初始绑定示例。