2016-11-01 39 views
0

是否可以在单个查询中获取多个关系的数量?例如SPARQL一次计算关系数

SELECT (COUNT(?friendid) as ?friends) (COUNT(?cousinid) as ?cousins) (COUNT(?sonid) as ?sons) 
WHERE 
{ 
    ex:person1 ex:friendOf ?friendid . 
    ex:person1 ex:cousinOf ?cousinid . 
    ex:person1 ex:fatherOf ?sonid . 
} 

如果需要一个包含多个查询的复杂查询,当然这是 - 理论上 - 应该比执行不同的SELECT更快?

+0

我不认为你的查询有效。它会为我猜测的每个关系返回相同的数字。 – AKSW

+0

是的,这就是发生了什么......以及我的问题的原因:) – user1156544

回答

2

下面的查询检索所有谓词和它们的数量:

`SELECT ?p (COUNT(?p) as ?pCount) WHERE { ex:person1 ?p ?o} GROUP BY ?p` 

这一个限制谓词(AKSW的建议):

SELECT ?p (COUNT(?p) as ?pCount) WHERE { ex:person1 ?p ?o. VALUES (?p) {(:p1)}} GROUP BY ?p 

下面是一个例子:

SELECT ?p (COUNT(?p) as ?pCount) WHERE 
{ 
    <http://dbpedia.org/resource/Category:Museums_in_Italy> ?p ?o . 
    VALUES (?p) {(skos:altLabel) (owl:sameAs)} 
} 
GROUP BY ?p 

这里是结果:

Results

+2

另外,如果他/她想限制属性,那么'VALUES?p(:p1:p2 ...)'可以是使用 – AKSW

+0

这适用于VALUES的建议!谢谢! – user1156544

+0

有一件事 - 如果我使用'VALUES?p(:p1:p2 ...)'并且没有:p1例如,我总是会得到一个“1”而不是“0”的计数。难道我做错了什么? – user1156544