在执行任意路径查询之前过滤sparql结果

问题描述 投票:1回答:1

为了解释我的问题,我将给出一个果味的例子:

假设我们有一个RDF三重商店,里面有3个类:

:Apple
:Orange
:Pear

我们有1个属性:

:friendsWith

苹果,橘子和梨可以与其他苹果,橘子和梨成为朋友。我想要实现的查询是:

“考虑到苹果/ 123,请给我所有的苹果和梨,除了橘子之外,苹果/ 123是朋友。”

我对此SPARQL查询的当前版本如下所示:

SELECT DISTINCT ?appleOrPear WHERE {
    <apple/123> :friendsWith* ?appleOrPear .
    FILTER NOT EXISTS {?appleOrPear a :Orange.}
}

这个查询确实只给我连接到apple / 123的苹果和梨。然而它也会给我苹果和梨通过橙子连接,我不想要。

所以我需要的是在查询的任意路径部分完成之前过滤结果的方法。换句话说,我想忽略整个:整个查询的橙色类。

有没有办法在SPARQL中执行此操作?

filter path sparql rdf
1个回答
1
投票

您可以检查:Orange:friendsWith之间的<apple/123>链中没有?appleOrPear类型的节点。

SELECT distinct ?appleOrPear WHERE {
    <apple/123> :friendsWith* ?appleOrPear .
    filter not exists {
        <apple/123> :friendsWith* ?x .
        ?x :friendsWith* ?appleOrPear .
        ?x a :Orange .
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.