2014-09-30 44 views
3

我在尋找一個可以返回OWL層次結構中指定子類位置的SPARQL查詢。我已經研究了幾個例子,但是我能達到的最好結果是計算指定的超類和它的子類(thanks to Joshua Taylor)之間的相對路徑。而不是我需要計算給定子類的「絕對」深度。計算OWL本體中子類的深度

我的本體包含幾個頂級類,每個類都有一個單獨的子類樹。這裏是我的OWL的一部分(轉換與rdfcat實用程序TTL):

@prefix :  <http://www.semanticweb.org/administrator/ontologies/2014/7/untitled-ontology-9#> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 

:depression a    owl:Class ; 
    rdfs:subClassOf :pit . 

:pit a    owl:Class ; 
    rdfs:subClassOf :on_the_road . 

:on_the_road a   owl:Class ; 
    rdfs:subClassOf :traffic_accident . 

:traffic_accident a owl:Class . 

在這種情況下,對於一個給定depression類我希望得到,pit - > ,on_the_road - > ,traffc_accident(頂級類) - > 0

回答

3

同樣的方法可用於查找層次結構中類的深度(當然,假設每個類都具有到根的唯一路徑)。訣竅就是你首先需要找到層次結構的根源。您可以使用以下查詢來獲得以下結果。

prefix : <http://www.semanticweb.org/administrator/ontologies/2014/7/untitled-ontology-9#> 
prefix owl: <http://www.w3.org/2002/07/owl#> 
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> 

select ?class (count(?mid)-1 as ?depth) { 
    #-- Select root classes (classes that have no 
    #-- superclasses other than themselves). 
    { 
    select ?root { 
     ?root a owl:Class 
     filter not exists { 
     ?root rdfs:subClassOf ?superroot 
     filter (?root != ?superroot) 
     } 
    } 
    } 

    ?class rdfs:subClassOf* ?mid . 
    ?mid rdfs:subClassOf* ?root . 
} 
group by ?class 
order by ?depth 
----------------------------- 
| class    | depth | 
============================= 
| :traffic_accident | 0  | 
| :on_the_road  | 1  | 
| :pit    | 2  | 
| :depression  | 3  | 
----------------------------- 

注意的東西可能是一個比較複雜一點,如果你已經有了一個推理。如果你有一個推理者,那麼每個類,包括你的根,都是owl:Thing的一個子類,所以實際上只有一個根,所有的深度都會被一個在問題中提到)。您可以通過調整查找找到?root的值的過濾器來避免這種情況。

+0

謝謝約書亞,我會更新能夠弄清楚我自己的... – 2014-09-30 11:45:56

+1

這可能不是真的;習慣將事物的「直觀」描述(層次結構的根)映射到SPARQL描述(沒有傳出rdfs:subClassOf邊緣的節點(自身除外))需要一些時間。隨着時間的推移它變得更容 – 2014-09-30 11:47:47