OWL 双关语代表占位符或摘要 class

OWL punning to represent a placeholder or abstract class

我正在尝试开发一个 ontology 来代表一个课程,在这个课程中,学生必须选修 6 门选修课(并且有一长串课程可供选择)。

现在我有这个 classes:

- Course
--- Elective (defined class by isElective = true && type = Course)

而且我所有可能的选修课都是 Course 类型的实例,数据 属性 isElective 设置为 true。

但是我想表达的是这6门选修课必须按照一定的方式来上,比如一个学生最后一年需要上4门这门课(Year是一个class) 的课程。

我一直在想如何定义这个placeholder/abstractclass,我读过isn't possible and doesn't make sense,遇到了双关语,但我不知道它是什么我在找。

假设我定义了一个 Course 的子 class 称为 ElectivePlaceholder,然后是这个 class 的 4 个实例,其中:

ElectiveX instanceOf ElectivePlaceholder
Year5 instanceOf Year
ElectiveX isPartOf Year5

然后我想有一种方法来表示学生选择 AdvancedMathsElective 的实例,也就是 Course 的实例 isElective 设置为真)因为它是 ElectiveX

我该怎么做?双关语有用吗?因为它允许一个对象同时被视为一个 class 和一个个体。

更新

我要模拟的不是学生的选择,而是课程本身。

每个课程个体对学生必须选修多少门选修课以及在哪一年选修都有不同的要求。我需要以某种方式在 Curricula 个人或 Year 个人上表示这一点(因此可以推断出 Curricula)。

现在:

YearX partOf CurriculaX

Punning不会解决你的问题。双关语允许您将 Course 称为 OWL class 和 OWL 个体。

您可以通过如下定义 ontology 来实现您想要的结果:

ObjectProperty: hasCourse
    Domain: Curricula
    Range: Course

Class: Curricula
    SubClassOf: 
        taughtInYear some xsd:integer,
        hasCourse some Course 

Class: CurriculaDifficult
    SubClassOf: 
        Curricula,
        hasCourse min 4 ElectiveCourse,
        hasCourse max 9 Course

Class: CurriculaEasy
    SubClassOf: 
        Curricula,
        hasCourse min 1 ElectiveCourse,
        hasCourse max 3 Course

Class: ElectiveCourse
    SubClassOf: Course    
    DisjointWith: NonElectiveCourse

Class: NonElectiveCourse
    SubClassOf: Course    
    DisjointWith: ElectiveCourse

Class: Course

Individual: AdvancedMaths
    Types: ElectiveCourse

Individual: curriculaEasy2018
   Types: CurriculaEasy

   Facts:
     taughtInYear 2018,
     hasCourse someCourseA,
     hasCourse someCourseB,
     hasCourse someElectiveCourseA        

Class Student:
  SubClassOf: takeCurricula some Curricula

Individual: student123
   Types: Student
   Facts:
      takeCurricula curriculaEasy2018

有两点需要注意:

(1) 摘要 classes(被广泛接受的编程概念)无法在 OWL 中表示。我从编程背景 here.

解释了一些 OWL 缺乏的令人惊讶的事情

(2) 与其将 isElective 作为与 Course 关联的 属性,不如将其建模为 ElectiveCourse 而不是 NonElectiveCourse 是不相交的。原因是如果你想扩展 NonElectiveCourse 的定义,你可以这样做。这也是在编码时最好避免flags的原因。

(3) 由于 开放世界假设,推理者将无法知道您 not 至少指定了 4 ElectiveCourses。我已经写过这个 here.

** 更新 ** 因此,您可以添加 CurruculaEasyCurruculaDifficult class 具有不同数量的选修课要求,如上所示。您可以添加一个 Curricula,它是 CurruculaEasyCurriculaDifficult 的超级 class。对于 Curricula,您添加它 subclasses taughtInYear some xsd:integer,如上所示。