如果我有一个 SPARQL 查询说,
PREFIX foaf <http://xmlns.com/foaf/0.1/> SELECT ?name WHERE { ?x foaf:name ?name. ?x foaf:knows ?y. }
选择一些 x 的名字,谁知道一些 y。我怎样才能只选择那些确切知道其他 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 代码行以编程方式计算查询中所需的其余逻辑。
1 回答
你可以通过SPARQL 1.1实现这一点,它有新功能:GROUP BY,HAVING 和 SUBQUERIES。像这样的东西可以完成这项工作:
不幸的是,并非所有 SPARQL 引擎都支持所有这些功能。我知道Jena/ARQ和炫技支持他们。
如果您正在使用不支持这些功能的 SPARQL 引擎,那么我建议您运行查询:
...并以少量的 client-side 代码行以编程方式计算查询中所需的其余逻辑。