2017-08-27 43 views
1

我正在嘗試編寫一個SPIN-Rule來計算傳入引用的數量,並將此數字設置爲屬性值。例如,計算特定機器上發生的問題的數量。因此,我需要計算類型rdfs:occuredOn(域:問題,範圍:機器)的傳入參考的數量。在SPARQL的CONSTRUCT函數中使用COUNT

CONSTRUCT { 
?machine rdfs:numberOfIssues ?n . 
} 

WHERE { 
?machine a ex:Machine . 
?issue a ex:Issue . 
?issue ?r ?machine . 
(COUNT(?r) AS ?n) //Error 
}  

預先感謝您!

+0

我不明白你爲什麼使用rdfs和owl前綴爲你自己的實體。 – AKSW

+0

我實際上不認爲它會更容易閱讀。 – Boris

+0

我建議在您的示例中更改'rdfs:'和'owl:'前綴爲'ex:' – TallTed

回答

4

只有GroupGraphPattern是允許的,也就是說,你有WHERE子句中使用子查詢SELECT

CONSTRUCT 
    { 
    ?machine rdfs:numberOfIssues ?n . 
    } 
WHERE 
    { { SELECT ?machine (COUNT(?r) AS ?n) 
     WHERE 
     { ?machine a owl:Machine . 
      ?issue a owl:Issue ; 
        ?r  ?machine 
     } 
     GROUP BY ?machine 
    } 
    } 

注意,你應該從未用戶內置的命名空間/前綴(如owl:,rdfs:,rdf:,xsd:等)爲您的域名本體!

+0

感謝您的幫助和建議! – Boris