2016-11-01 41 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