我对这个语义网很新,我正在用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的资源...... ???
答案 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. }
}