OWL惩罚代表占位符或抽象类

时间:2018-04-14 20:05:05

标签: owl ontology

我正在尝试开发一个本体来代表课程,在这个课程中,学生必须参加6门选修课程(并且有很多课程可供选择)。

现在我有这个课程:

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

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

但我想表示这6门选修课必须以某种方式进行,例如,学生需要在去年(Year是一堂课)的课程中选修4门课程

我一直在考虑如何定义这个占位符/抽象类,正如我所读到的isn't possible and doesn't make sense,并且遇到了双关语,但我不知道它是否是我正在寻找的对

假设我定义了一个名为Course的{​​{1}}的子类,然后是该类的4个实例,其中:

ElectivePlaceholder

然后,我希望有一种方法来表示学生选择ElectiveX instanceOf ElectivePlaceholder Year5 instanceOf Year ElectiveX isPartOf Year5 AdvancedMaths的实例,Elective的实例,Course设置为true)正如它isElective

我该怎么做?惩罚会有用吗?因为它允许一个对象被视为一个类和一个人。

更新

我试图建模的不是学生选择的,而是课程本身。

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

现在:

Curricula

1 个答案:

答案 0 :(得分:2)

Punning无法解决您的问题。 Punning允许您将Course称为OWL类和OWL个体。

您可以通过如下定义本体来实现所需的结果:

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)抽象类(很好的编程概念)不能用OWL表示。我解释了OWL缺少来自编程背景here的一些令人惊讶的事情。

(2)不要将isElective作为与Course关联的属性,而是将其建模为ElectiveCourseNonElectiveCourse的不相交关系。原因是,如果您想扩展NonElectiveCourse的定义,您可以这样做。这也是为什么最好避免标记的原因。

(3)由于开放世界的假设,您必须以某种方式关闭您的Curricula,并说明最多的课程数量,推理者将无法知道您指定至少4 ElectiveCourse s。我已经写过here

**更新** 因此,您可以添加具有不同选修要求数量的CurruculaEasyCurruculaDifficult类,如上所示。您可以添加Curricula的超级CurruculaEasyCurriculaDifficult。对于Curricula,您可以将其添加为子类taughtInYear some xsd:integer,如上所示。