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

Rdf 一个属性在SPARQL中应用了多少次?,rdf,sparql,Rdf,Sparql,如果我有一个SPARQL查询 PREFIX foaf <http://xmlns.com/foaf/0.1/> SELECT ?name WHERE { ?x foaf:name ?name. ?x foaf:knows ?y. } 前缀foaf 选择?名称 在哪里{ x foaf:名称?名称。 x foaf:知道吗。 } 选择某个x的名称,谁知道某个y。我怎么能只选择那些确切认识3个人(或任何其他数字)的人的名字 另外,作为一个附带问题,这个问题有更好的标题吗?用更好的

如果我有一个SPARQL查询

PREFIX foaf <http://xmlns.com/foaf/0.1/>
SELECT ?name
WHERE {
  ?x foaf:name ?name.
  ?x foaf:knows ?y.
}
前缀foaf
选择?名称
在哪里{
x foaf:名称?名称。
x foaf:知道吗。
}
选择某个x的名称,谁知道某个y。我怎么能只选择那些确切认识3个人(或任何其他数字)的人的名字

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


谢谢

您可以通过it和新功能实现这一点:分组方式、拥有和子查询。像这样的东西可以完成这项工作:

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引擎都支持所有这些特性。我知道并支持他们

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

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

。。。并通过编程计算查询中所需的其余逻辑,只需几行客户端代码。

是的,标题可能有点混乱。但是如果你不知道聚合的存在,那么我认为这并不是那么糟糕。最后重要的是问题的内容,在这种情况下是好的。@MSALVADORS谢谢。我不知道这个术语适用于SPARQL和SQL,不知道,所以使用SPARQL 1.1。这是否取决于端点,或者我的Jena/ARQ库,或者两者都有?另外,可能会是==,而不是>@Aidan Yes,对于3个朋友,将其更改为
=
(注意SPARQL中的单个相等表示相等)。SPARQL 1.1的支持取决于端点,您是否需要支持它的库取决于库在将查询发送到端点之前是否解析/验证查询。如果库不这样做,那么只有端点需要支持SPARQL 1.1,因为端点用于编码结果的结果格式看起来完全相同,并且可以由不知道SPARQL 1.1的库进行解释