如果我有一个SPARQL查询说,
PREFIX foaf <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE {
?x foaf:name ?name.
?x foaf:knows ?y.
}
选择某些x的名称,谁知道某些y。我怎样才能只选择那些确切知道其他3个人(或任何其他数字)的人的姓名?
此外,作为一个附带问题 - 这个问题有更好的标题吗?哪一个使用更好的术语来澄清问题?
由于
答案 0 :(得分:3)
你可以通过SPARQL 1.1及其新功能实现这一目标:GROUP BY,HAVING和SUBQUERIES。这样的事情可以胜任:
SELECT ?name
WHERE {
?x foaf:name ?name .
{
SELECT ?x (count(?y) as ?count_y) WHERE {
?x foaf:knows ?y.
} GROUP BY ?x
HAVING count(?y) > 3
}
}
不幸的是,并非所有SPARQL引擎都支持所有这些功能。我知道Jena/ARQ和Virtuoso支持他们。
如果您使用的是不支持这些功能的SPARQL引擎,那么我建议您运行查询:
SELECT ?name
WHERE {
?x foaf:name ?name.
?x foaf:knows ?y.
}
...并以几行客户端代码以编程方式计算查询中所需的其余逻辑。