在下面的查询中,我提取了所有具有: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}
}
}
}