找出缺少的属性资源

Ama*_*mar 3 sparql dbpedia

我对这个语义网很新,我正在用Sparql和DBPEDIA做一些实验.我编写了一个查询来查找具有firstName(givenName)和lastName(surName)的所有记录.

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
select count(DISTINCT ?x) where {
?x foaf:givenName ?y;
foaf:surname ?z.
}
Run Code Online (Sandbox Code Playgroud)

当我运行此查询时,我得到了9,80,000条记录.但是当我运行单个查询(对于firstName和lastName)时,我获得了firstName的9,92,000条记录和lastName的9,80,000条记录.

在这里我的问题是如何获得只有firstName但不是lastName的资源...... ???

Rob*_*obV 6

您可以使用NOT EXISTS带有a 的子句FILTER来实现此目的:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT (COUNT(DISTINCT ?x) AS ?count)
WHERE
{
  ?x foaf:givenName ?y .
  FILTER(NOT EXISTS { ?x foaf:surname ?z. })
}
Run Code Online (Sandbox Code Playgroud)

这种过滤掉比赛?x,其中NOT EXISTS图案也匹配.

或者,你可以使用MINUS大致相同的条款来解决一些不会影响你的查询的细微差别:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT (COUNT(DISTINCT ?x) AS ?count)
WHERE
{
  ?x foaf:givenName ?y .
  MINUS { ?x foaf:surname ?z. }
}
Run Code Online (Sandbox Code Playgroud)