我对这个语义网很新,我正在用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的资源...... ???
您可以使用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)
| 归档时间: |
|
| 查看次数: |
556 次 |
| 最近记录: |