首页 文章

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

提问于
浏览
1

如果我有一个 SPARQL 查询说,

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

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

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

谢谢

1 回答

  • 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炫技支持他们。

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

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

    ...并以少量的 client-side 代码行以编程方式计算查询中所需的其余逻辑。

相关问题