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
然后我想有一种方法来表示学生选择 AdvancedMaths
(Elective
的实例,也就是 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 ElectiveCourse
s。我已经写过这个 here.
** 更新 **
因此,您可以添加 CurruculaEasy
和 CurruculaDifficult
class 具有不同数量的选修课要求,如上所示。您可以添加一个 Curricula
,它是 CurruculaEasy
和 CurriculaDifficult
的超级 class。对于 Curricula
,您添加它 subclasses taughtInYear some xsd:integer
,如上所示。
我正在尝试开发一个 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
然后我想有一种方法来表示学生选择 AdvancedMaths
(Elective
的实例,也就是 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 ElectiveCourse
s。我已经写过这个 here.
** 更新 **
因此,您可以添加 CurruculaEasy
和 CurruculaDifficult
class 具有不同数量的选修课要求,如上所示。您可以添加一个 Curricula
,它是 CurruculaEasy
和 CurriculaDifficult
的超级 class。对于 Curricula
,您添加它 subclasses taughtInYear some xsd:integer
,如上所示。