【问题标题】:Problems in using Existential restrictions in Protege在 Protege 中使用存在限制的问题
【发布时间】:2015-05-19 22:57:48
【问题描述】:

我想知道属于 A 类的个人是否与 B 类的所有个人至少有一种关系。

我无法找到合适的表达式来提供我想要的 DL 查询结果。对于以下示例:

Classs: Course {CourseA, CourseB, CourseC, CourseD}
Class: Program {UG_CE, G_CE}
Class: Student {John}

ObjectProperty: is-PartOf (Course,Program)

ObjectProperty: hasEnrolledIn (Student, Course)

对于个人:CourseA 和 CourseB,我断言了属性:

is-PartOf UG_CE

对于个体 John,断言了以下 3 个属性:

hasEnrolledIn CourseA
hasEnrolledIn CourseB
hasEnrolledIn CourseC

我也加了个别类型

hasEnrolledIn only ({CourseA , CourseB , CourseC}) 

解决 OWA 问题。

我想知道 John 是否已注册 UG_CE 所需的所有课程,请注意 John 已注册所有课程和其他课程。

调用推理器后,以下查询不会给我想要的结果:

Student that hasEnrolledIn only (is-PartOf value UG_CE)

由于“仅”仅限于定义关系的确切数量,因此它不符合预期目的。另外,我不能使用 Max 或 Min,因为课程数量是推断出来的,并且事先不知道。

另一种方法可以解决我的问题吗?

【问题讨论】:

  • “请注意,John 已注册 [for UG_CE] 的所有课程和其他课程。”我们怎么知道?我们怎么知道没有尚未提及的 UG_CE 附加课程?
  • 对于未来的读者,stackoverflow.com/questions/37380729/… 的解决方案可能也适用于此。

标签: semantic-web owl ontology protege dlquery


【解决方案1】:

虽然在 John 所学的课程方面“关闭”世界很好,但在 UG_CE 所需的课程方面关闭世界同样重要。我认为您需要这样的方法:

    M 需要 A。
M 需要 B。
M : 只需要 {A, B}。

    J 注册了 A。
J 就读于 B.
J 就读于 C.
J :仅注册 {A, B, C}。

对于单个学生 J,您可以通过询问 M 所需的课程集是否是该学生注册的课程集的子集来了解他们是否注册了 M 所需的所有课程:

    (inverse(需要) value M) SubClassOf (inverse(enrolledIn) value J)

或者,在 DL 表示法中,使用枚举类(有很多可能的表达方式):

    ∃ 需要-1。{M} ⊑ ∃ enrolledIn-1.{J}

现在,如果 OWL 有属性否定,你可以得到一组学生,他们只参加这样的表达式所需的课程

    not(enrolledIn) only not(inverse(需要)value M)

这要求他们注册的唯一课程是M要求的课程。但是,OWL没有属性否定表达式,所以我不知道这会把我们留在哪里。最简单的做法是添加一个“未注册”属性,尽管这看起来不那么优雅。

【讨论】:

  • 我仍在考虑如何准确地返工最后一点并获得一组个体的一般查询。很容易要求为 M (但这还不够)或只为 M 上课的学生(但这太严格了)。在这里,我们需要询问学生只有没有注册的课程不是必需的。不需要的课程很容易(not(inverse(requires) value M)),但“未注册”更棘手。
  • 我之前也想过类似的方法,但是,我想避免自己断言负面的对象属性。这种情况是,如果推理器推断出对象属性“J registeredIn A”,我想避免手动添加“J:仅注册 {A}”,然后否定断言“J注册 B”和 J注册 C。它似乎没有选择假设推理者能够推断断言 J 没有注册的课程作为否定对象属性。
  • @user3689319 嗯,OWL2 有一个否定的ObjectPropertyAssertions,所以如果一个推理器可以确定 J 没有在 B 中注册,它可以确认 NegativeObjectPropertyAssertion(J,enrolledIn,B)。问题是没有否定的属性表达式,所以推理器不能肯定 ObjectPropertyAssertion(J,not(enrolledIn),B)。
  • 我同意,当我在 OWL2 中使用negativeObjectPropertyAssertions 时,它可以工作,但是正如您所说,我真正的问题在于没有负属性表达式。我不确定如何解决这个问题。
  • @user3689319 您仍然可以对联合类、不相交的类、不相交的属性等做一些事情。我不确定。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-27
相关资源
最近更新 更多