2016-06-21 126 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)。 –