找出缺少的属性资源

时间:2013-11-18 07:14:38

标签: 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.
}

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

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

1 个答案:

答案 0 :(得分:6)

您可以将NOT EXISTS子句与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. })
}

这会过滤掉?x模式也匹配的NOT EXISTS匹配。

或者,您可以使用MINUS子句,该子句与minor differences大致相同,但不会影响您的查询:

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