在SPARQL中应用了多少次属性?

时间:2011-05-13 22:26:05

标签: rdf sparql

如果我有一个SPARQL查询说,

PREFIX foaf <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE {
  ?x foaf:name ?name.
  ?x foaf:knows ?y.
}

选择某些x的名称,谁知道某些y。我怎样才能只选择那些确切知道其他3个人(或任何其他数字)的人的姓名?

此外,作为一个附带问题 - 这个问题有更好的标题吗?哪一个使用更好的术语来澄清问题?

由于

1 个答案:

答案 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/ARQVirtuoso支持他们。

如果您使用的是不支持这些功能的SPARQL引擎,那么我建议您运行查询:

SELECT ?name
WHERE {
  ?x foaf:name ?name.
  ?x foaf:knows ?y.
}

...并以几行客户端代码以编程方式计算查询中所需的其余逻辑。