2015-05-12 37 views
1

我想計算OWL文件中特定關係的斷言。如果下面是我的整個本體論: -使用sparql查詢計算OWL文件中的特定關係

<owl:NamedIndividual rdf:about="file:/C:/myOnt.owl#comfort"> 
    <SynonymOf rdf:resource="file:/C:/myOnt.owl#impunity"/> 
    <SynonymOf rdf:resource="file:/C:/myOnt.owl#sooth"/> 
    <SynonymOf rdf:resource="file:/C:/myOnt.owl#ease"/> 
</owl:NamedIndividual> 

<owl:NamedIndividual rdf:about="file:/C:/myOnt.owl#population"> 
    <SynonymOf rdf:resource="file:/C:/myOnt.owl#habitation"/> 
</owl:NamedIndividual> 

然後SPARQL查詢應該給我這樣的: -

 SynonymOf = 4 (i.e 4 assertions for <SynonymOf> relation 

我打算上運行耶拿fuzeki查詢。

回答

3

一個簡單的方法是:

PREFIX : <http://example.com#> 
SELECT (count(?o) as ?count) 
WHERE { 
    ?s :SynonymOf ?o 
} 

然而,對於結合被分配到特定的對象,你可能要考慮使用Group By

PREFIX : <http://example.com#> 
SELECT ?s (count(?o) as ?count) 
WHERE { 
    ?s :SynonymOf ?o 
} 
GROUP BY ?s 
0
SELECT (COUNT(?s) as ?SynonymOf) 
WHERE { 
    GRAPH ?g {?s SynonymOf ?o } 
    } 
+0

你真的不需要''g'。 – Artemis

+1

取決於你正在使用的triplestore。使用Stradog,除非直接使用默認圖形,否則需要它。許多其他三聯商店在默認圖表中的每個圖表中都放置了每個三元組的副本,因此您確實不需要它。我不熟悉jena fuzeki,但使用'?g'是更保守的假設。 – ffa

+1

@ffa但是,如果三元組在默認圖中,而不在任何指定圖中,但不會'graph?g {...}'排除它們?規範說「當查詢一組圖形時,GRAPH關鍵字用於匹配指定圖形的模式,GRAPH可以提供一個IRI來選擇一個圖形或使用一個變量,該變量將覆蓋查詢中所有指定圖形的IRI RDF數據集「。所以真的,你需要'{graph?g {...}} union {...}'。但是如果默認值是已命名圖的聯合(但不能保證),那麼這可能會有一些事情發生兩次。 –