使用SPARQL筛选默认图(所有命名图之外)中的三元组



在下面的查询中,我提取了所有具有:Entity类的实体,无论它们是否存在于特定的上下文(命名为graph)中。

SELECT ?s
WHERE {
?s a :Entity .
}

我想在这些实体中过滤,只保留那些不在任何命名图内的实体,即只存在于所有命名图之外的实体(EDIT:)我想正确的术语是,我想搜索三元组只在默认图) .

我该怎么做?

您可以利用FILTER NOT EXISTS(见这里)。

特别地,您正在寻找存在于默认图中,但不存在于任何命名图中的资源(我假设是IRIs)。

所以像这样的查询可以工作:

SELECT ?s
WHERE {
?s a :Entity
FILTER NOT EXISTS {
GRAPH ?g {
?s ?p ?o 
}
}
}

这是说?s不是任何命名图中任何三元组的主题。我们可以扩展上面的查询,以包括?s不是任何三重too的对象的情况:

SELECT ?s
WHERE {
?s a :Entity
FILTER NOT EXISTS {
GRAPH ?g {
{?s ?p ?o}
UNION
{?x ?p ?s}
}
}
}

最新更新