2016-06-21 34 views
0

In einer OWL-Ontologie, mit einer Klasse Student; Ich möchte eine andere Klasse StudentsPair, definieren, die jedes Paar von Studenten ist, in einer solchen Art und Weise, die automatisch alle möglichen Zweierkombinationen von Student berechnet, dhDefinieren einer Klasse von Individuen als eine Kombination aus einer anderen Klasse von Individuen

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

Ich möchte StudentsPair als Klasse, nicht eine Eigenschaft, weil Es kann zusätzliche Funktionen haben (wie averagePerformanceForPair, etc.).

Zum Beispiel

Premise

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

Fazit

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

Die reasoner muss irgendwie diese neuen Menschen schaffen! Ist das möglich?

+0

Zunächst wäre es wahrscheinlich einfacher zu versuchen, neun Paare zu erstellen (3 × 3) seit Es gibt wahrscheinlich keine gute Möglichkeit, die Reihenfolge zu beschränken, und es könnte schwierig sein, Selbstpaare zu verhindern. Aber wie AKSW sagt, ist es leicht, zu dem Punkt zu kommen, an dem Sie jeden Schüler mit jedem anderen Schüler in Verbindung bringen können, aber es ist vielleicht nicht möglich, Instanzen einer anderen Klasse zu verursachen. –

Antwort

1

Sie benötigen eine zusätzliche Rolle student, dann können Sie Beschreibung Logic-Regeln verwenden, wie etwas, das funktionieren könnte:

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

Was ist 'U' in der zweiten Zeile Ihres Codes, und hatten Sie' StudentPair' als Eigenschaft? Weil ich es eine Klasse will, wie ich in meiner Frage feststelle. –

+0

Es kann keine Klasse sein, die eine unäre Beziehung ist, wenn Sie eine binäre Relation haben. Und "U" wäre die universelle Rolle. Sie sollten wissen, dass OWL keine Variablen hat, daher müssen Sie normalerweise Regeln verwenden. Aber für Ihren Fall bin ich mir nicht sicher, wie ein Reasoner Paare von Instanzen erstellen soll, die selbst Instanzen einer Klasse sind. Das klingt nach Logik höherer Ordnung und nicht nach Logik erster Ordnung. Aber ich bin mir nicht sicher und vielleicht kann jemand anderes dir helfen. – AKSW

+0

Die hier verwendete Konstruktion ist als Rolifizierung bekannt und wurde in einer Reihe anderer Fragen diskutiert, einschließlich [OWL 2 rolification] (http://stackoverflow.com/questions/16989042/owl-2-rolification). –