在 Protege 上使用 class 表达式进行类型推断

Type inference using class expresions on Protege

我希望我可以这样定义 Elective_Course,即所有属于 partOfKnowledge_Unit 且不属于 Core_Course 类型的个体都是 Elective_Courses.

对于 Course 我有这个:

我想也许 (partOf only Knowledge_unit) and not(Core_Course) 行的东西可以解决问题,但它不起作用。

也许是因为我需要 onlypartOf 的逆 属性,但我没有定义 属性 因为我不需要其余的。所以我可以在 Knowledge_Unit 中说 hasPart only Course,然后在 Elective_Course.

中说 not(Core_Course)

但是我迷路了,所以欢迎提供任何帮助或示例链接。

完整 ontology 可用 here

您遇到的问题是由于 OWL 和描述逻辑中的开放世界假设。这意味着推理者只会从明确陈述的信息中推断出新的推论,而不会从信息的缺失中推断出新的推论。

因此,为了达到您想要的结果,您必须声明 Core_CourseElective_Course 是不相交的。然后你可以做以下两件事之一:

(1) 为选修课的每个人声明其类型为 not (Core_Course)。但是你也可以像 Elective_Course.

类型一样声明它

(2) 将你所有的知识单元个体定义为core1, core2, ... coren, elective1, elective2, ..., electivek。然后设置Knowledge_Unit相当于所有个人,Core_Course相当于所有核心课程个人,即

 Class: Knowledge_Unit
   EquivalentTo: {core1, core2, ... coren, elective1, elective2, ..., electivek}
 Class: Core_Course
    SubClassOf: Knowledge_Unit,
    EquivalentTo: {core1, core2, ... coren}

更新:20180510

Wrt 通用 属性 限制,如 partOf only KnowledgeUnit,重要的是要了解它还包括已知他们不参与任何 partOf 关系的个人。这可能导致难以理解的蕴涵。我已经写过这个 here.