【发布时间】:2018-09-11 09:26:35
【问题描述】:
为了解释我的问题,我举个例子:
假设我们有一个包含 3 个类的 RDF 三元存储:
:Apple
:Orange
:Pear
我们有 1 个属性:
:friendsWith
苹果、橙子和梨可以与其他苹果、橙子和梨成为朋友。 我要实现的查询是:
“给定 apple/123,给我所有与 apple/123 成为朋友的苹果和梨,除了橙子。”
我当前版本的 SPARQL 查询如下所示:
SELECT DISTINCT ?appleOrPear WHERE {
<apple/123> :friendsWith* ?appleOrPear .
FILTER NOT EXISTS {?appleOrPear a :Orange.}
}
这个查询确实只给了我连接到 apple/123 的苹果和梨。但是,它也会给我通过橙子连接的苹果和梨,这是我不想要的。
所以我需要一种在查询的任意路径部分完成之前过滤结果的方法。换句话说,我想忽略整个查询的整个 :orange 类。
在 SPARQL 中有没有办法做到这一点?
【问题讨论】:
-
子 SELECT 查询?
-
你将如何使用 sub SELECT 来解决这个问题?能举个例子吗?