2016-06-21 118 views
0

在一個OWL本體中,給定一個類Student;我想定義另一個類StudentsPair,這是任何一對學生,以這樣的方式,可以自動計算的Student所有可能的雙重組合,即定義一個類作爲另一個類個體的組合

Student(x) and Student (y) --> StudentsPair(x,y) 

我想StudentsPair爲一類,而不是一個屬性,因爲它可能有其他功能(如averagePerformanceForPair等)。

例如,

前提

Student(John) 
Student(Alex) 
Student(Mary) 
----------------- 

結論

StudentPair((John, Alex)) 
StudentPair((John, Mary)) 
StudentPair((Alex, Mary)) 

的推理以某種方式創建這些新的個體!這可能嗎?

+0

起初,它可能會更容易嘗試創建9雙(3×3),因爲可能沒有很好的方法來限制排序,並且可能很難防止自我配對。但正如AKSW所說,很容易達到可以讓每個學生與其他學生相關聯的程度,但可能無法讓其他班級的實例存在。 –

回答

1

你需要一個額外的角色student,那麼你可以使用描述邏輯規則,這樣的事情可能的工作:

Student ≡ ∃student.Self 
student ◦ U ◦ student ⊑ StudentPair 
+0

代碼的第二行是什麼'U',並且你是否打算將'StudentPair'作爲一個屬性?因爲我想要一堂課,就像我在我的問題中所說的那樣。 –

+0

如果你有一個二元關係,它不能是一個類,它是一元關係。而'U'將是通用角色。你應該知道OWL沒有變量,所以你通常必須使用規則。但對於你的情況,我不確定推理者應該如何創建一對本身就是一個類的實例的實例。這聽起來像是高階邏輯而不是一階邏輯。但我不確定,也許別人可以幫助你。 – AKSW

+0

此處使用的構造被稱爲rolification,並已在其他許多問題中進行了討論,其中包括[OWL 2 rolification](http://stackoverflow.com/questions/16989042/owl-2-rolification)。 –