鉴于这个非常简单的模型:
@prefix : <http://example.org/tags#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
:tag rdf:type rdf:Property .
:item1
rdf:type owl:Thing ;
:tag "a"^^xsd:string .
:item2
rdf:type owl:Thing ;
:tag "a"^^xsd:string , "b"^^xsd:string .
:item3
rdf:type owl:Thing ;
:tag "a"^^xsd:string , "b"^^xsd:string , "c"^^xsd:string .
我正在尝试获取每个项目的列表和标签数量:
item tagCount
===== ========
item1 1
item2 2
item3 3
这是我的问题:
SELECT ?item (count(?tag) as ?tagcount)
WHERE {
?item :tag ?tag
}
然而它正在回归:
item tagCount
===== ========
6
根据我的阅读,这应该有效。我正在使用Jena 2.6.4
答案 0 :(得分:6)
我没试过,但尝试在查询结尾添加GROUP BY ?item
。我认为没有GROUP BY
它只计算总行数。
答案 1 :(得分:3)
要使绑定显示在结果中,您需要使用group by keyword,这样就变成了
SELECT?item(count(?tag)as?tagcount) 在哪里{ ?item:tag?标签 } by by item
如果您想在查询中间计算一些内容,请执行以下操作,请注意您必须如何将内部选择查询放入其自己的块{}
SELECT * {
?item a owl:Thing .
{
SELECT ?item (count(?tag) as ?tagcount)
WHERE {
?item :tag ?tag
} group by ?item
}
}
答案 2 :(得分:0)
@ user2316243的子选择是不必要的,因此以下查询是等效的:
SELECT ?item (count(?tag) as ?tagcount)
WHERE {
?item a owl:Thing .
?item :tag ?tag .
} GROUP BY ?item