gpt4 book ai didi

rdf - 可以执行这些类型的 SPARQL 查询吗?

转载 作者:行者123 更新时间:2023-12-01 11:46:47 24 4
gpt4 key购买 nike

假设我们有一个巨大的 RDF 图并想要执行以下操作:(我试过了但它不起作用 - 想知道我是否错误地构建了查询或 rdf 转储存在问题)。

select ?n ?o 
where {
?n <name_of_a_node> <name_of_this_node>.
?n ?p ?o.
?o <type_of_a_node> ?t.
FILTER(REGEX(STR(?t), "president")).
}

上面的查询表明我知道节点 n 的名称。所以,我得到了节点 n 的 URI。然后,我正在获取节点 n 的所有谓词和通过此谓词连接的其他节点。对于连接到节点 a 的每个节点 o,我想查看它们的属性(类型属性)并仅检索在其类型属性中具有子字符串的那些节点 o。

这在 SPARQL 中可行吗?基本上,站在一个节点上并查看该节点连接到的所有其他节点,然后仅检索那些在其属性上匹配另一个条件的节点。

否则,我是否应该只检索节点 n 连接到的所有节点,并为每个节点运行另一个 SPARQL 查询来执行此检查?

我正在使用 JENA 来存储数据。

最佳答案

是的,这是可能的,但编写这样的查询几乎总是非常不明智的。

您使用的任何 FILTER 都需要 SPARQL 引擎来查看每个可能的解决方案并评估其中的表达式,而许多表达式的评估速度又快又便宜,例如 REGEX非常昂贵。

本质上,您是在要求 SPARQL 引擎获取大量无限制的可能结果,然后针对每个可能的解决方案应用正则表达式。如果你对Java regex performance一无所知那么你就会知道这通常是一个非常糟糕的主意,无论它在 SPARQL 中的使用如何。

许多 SPARQL 引擎支持 full text extensions它允许您以一种让 SPARQL 引擎更有效地处理它们的方式来表达这些类型的查询。对于 Apache Jena,请参阅 LARQ

关于rdf - 可以执行这些类型的 SPARQL 查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14620245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com