'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 中的初始绑定示例。
我有一个节点列表,我想检索包含这些节点之间所有关系的三元组。
这是我目前所做的:
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 中的初始绑定示例。