2014-03-03 39 views
2

我在TopBraidComposer中構建了一個本體,它有一個類層次結構和一些獨立工作的規則。在我的本體論中,我正在研究一個班級,所以我創建的所有定義只與班級有關,而不是個人。現在我想推斷出這樣的一個子類定義:使用SPIN規則推斷匿名超類

anonymous subclass

我嘗試以下SPARQL查詢這似乎做的工作:

SPARQL test

然後我說所說查詢作爲SPIN治以貓頭鷹:類事情是這樣的:

SPIN rule 1

之後按Enter,它會自動轉換爲以下形式:

SPIN rule 2

它看起來合理,但是當我現在開始推理過程,它不會再當它沒有之前我加入了測試規則終止。當我強行停止推理時,我可以看到期望的三元組已經多次添加到Test類中。

如何推斷SPIN中的匿名超類?

編輯:

一種解決方法是結合限制類。這個邏輯似乎可行,但它並不像匿名超類所顯示的那樣;在TBC和Protege中都沒有。

+0

'旋轉'標籤與'SPIN:形式方法技術'有關。這似乎並不是你使用SPIN的原因。如果不是,請刪除標籤。 – GoZoner

回答

3

經過長時間的搜尋後,我找到了解決辦法非常簡單:

一個簡單的檢查了現有的關係將阻止無限循環:

FILTER NOT EXISTS { 
    ?test rdfs:subClassOf _:b0 . 
} . 

將由TBC進行自動修正

FILTER NOT EXISTS { 
    ?test rdfs:subClassOf _:0 . 
} . 

就是這樣,規則將起作用。

+0

我認爲這是因爲你不能重複使用空白節點,所以你可能必須在CONSTRUCT和WHERE子句中輸入帶有空白節點的限制。 – casualcoder