3

我对使用域、范围和限制来定义本体的正确方法有疑问。如果我想表示“学生必须只有一个身份证明”,我认为我可以执行以下操作之一:

  1. 定义属性的域和范围(例如:hasId rdfs:domain :Student; rdfs:range :Identification)并使属性起作用。

  2. 定义属性并在学生类中创建一个限制:“hasId 恰好为 1 标识”。

在语义方面,这些是否意味着同一件事?如果是这样,在约定或最佳实践方面是否有首选方案?最后,这同样适用于数据类型属性吗?我可以简单地定义域/范围和/或我应该在类中创建限制以将其与属性链接吗?

4

1 回答 1

13

OWL2 有量化限制,这意味着你可以有形式的类表达式

∃PC

它表示对C类型的属性p具有值的个体类别。同样,您可以使用限制

∀pD

这是一类个人,其所有属性p的值(尽管可能没有)都是D类型。还有数字限制,因此您可以指定值的最小数量、值的最大数量或值的确切数量。

n pC
n pC
= n pC

您还可以使用公理来声明属性的域和范围。例如,如果你有公理

p 具有域 C

那么任何与p相关的东西都必须是C。同样,如果你有公理

p 的范围为 D

那么任何与p相关的东西都必须是D。有趣的是,范围公理实际上可以重铸为涉及通用限制的子类公理。您可以将p 的范围 D写为

⊤ ⊑ ∀pD

它说 ⊤ (或owl:Thing,即一切)是这样的,它的每个p值都必须是D。通过使用逆属性,您也可以获得域公理。 p 具有域 C等价于

⊤ ⊑ ∀p -1 .C

所有这些都是您问题答案的一些背景知识:

如果我要表示“一个学生必须只有一个身份证明”,我认为我可以:

  1. 定义属性的域和范围(例如,:hasId rdfs:domain :Student;:hasId rdfs:range :Identification)并使属性起作用。

  2. 定义属性并在学生类中创建一个限制:“hasId 恰好为 1 标识”。

那么,就语义而言,这是否相同?如果相同,在约定或最佳实践方面是否有首选方案?

首先,这些不一样。选项 1 将确保您在任何时候

x hasId y
x hasId z

您将能够推断出 x 是学生,y 和 z 是标识,并且 y 必须与 z 相同(因为该属性是功能性的),但您无法推断出每个学生有身份证。在 OWL 中声明一个属性是有功能的表示每个人对该属性最多有一个值,即没有值或一个值。它实际上相当于最大基数限制。说 hasId 是功能性的就等于说

⊤ ⊑ ≤1 hasId.⊤

您的第二个选择是更好的选择。如果你想说学生只有一个身份,那么你可以明确断言

学生⊑ =1 hasId.Identification

但是,这里有一些多余的信息,如果你已经声明 hasId 的域和范围分别是 Student 和 Identification,因为你已经知道作为 hasId 断言对象的每件事都是一个 Identification,你可以等效地说

学生⊑ =1 hasId.⊤

我认为这里最好的选择是对你的域和范围更宽容一点,对你的子类公理更明确一点。毕竟,非学生通常可以拥有身份证明(例如,驾驶执照),而学生实际上可以拥有多个身份证明(例如,学生证和驾驶执照)。鉴于此,您可能会执行以下操作,然后:

课程

    • 学生 {⊑ =1 hasId.StudentIdentification}
  • 鉴别
    • 学生身份

特性

  • hasId {域:人,范围:标识}

(即使这样也有一些问题,因为一个学生可能是多所学校的学生,但这是一个单独的问题。)

于 2014-02-18T15:41:33.850 回答