我怀疑使用域,范围和限制来定义本体的正确方法。如果我想表示“学生必须只有一个身份证明”,我认为我可以做以下其中一项:
定义属性的域和范围(例如,:hasId rdfs:domain :Student; rdfs:range :Identification
)并使属性正常运行。
定义属性并在学生班级中创建限制:“hasId恰好是1个身份证明”。
就语义而言,这些意味着同样的事情吗?如果是这样,在惯例或最佳做法方面是否有首选方案?最后,这同样适用于数据类型属性吗?我可以简单地定义域/范围和/或我应该在类中创建限制以将其与属性链接吗?
答案 0 :(得分:11)
OWL2已经量化了限制,这意味着您可以拥有表单
的类表达式∃p.C
表示具有属性 p 的值的个人类,其类型为 C 。同样,您可以使用限制
∀p.D
这是个人的类,所有属性的值 p (可能没有任何值)都属于 D 类型。还有数字限制,因此您可以指定最小数量的值,最大值数或精确数值。
≤ n p.C
≥ n p.C
= n p.C
您还可以拥有声明属性的域和范围的公理。例如,如果你有公理
p有域C
然后 p 与其他内容相关的任何内容都必须是 C 。同样,如果你有公理
p的范围为D
然后 p 与之相关的任何内容都必须是 D 。值得注意的是,范围公理实际上可以作为涉及通用限制的子类公理重铸。您可以将 p的范围D 写为
⊤⊑∀p.D
表示⊤(或owl:Thing
,即所有内容), p 的每个值都必须是 D 。通过使用逆属性,您也可以获得域公理。 p具有域C 等同于
⊤⊤⊑p -1 .C
所有这些都是您问题答案的背景:
如果我想表示“学生必须只有一个 识别“,我认为我可以:
定义属性的域和范围(例如:hasId rdfs:domain:学生; :hasId rdfs:range:Identification)并制作 财产功能。
- 醇>
定义属性并在学生班级中创建限制: “只有1个身份证明。”
那么,就语义而言,这是一样的吗?如果它是相同的,是 在惯例或最佳实践方面有一个首选方案吗?
首先,这些不一样。选项1将确保您随时
x hasId y
x hasId z
你将能够推断x是学生,y和z是标识,并且y必须与z相同(因为属性是有效的),但你不是有能力推断每个学生都有身份证明。声明一个属性在OWL中起作用表示每个人最多一个属性的一个值,即没有值或一个值。它实际上相当于最大基数限制。说hasId功能与说
相同⊤⊤≤1hasId.⊤
你的第二个选择是更好的选择。如果你想说学生只有一个身份证明,那么你可以明确并断言
学生⊑= 1 hasId.Identification
但是,如果你已经声明hasId的域和范围分别是Student和Identification,那么这里有一些冗余信息,因为你已经知道hasId断言的所有东西都是识别,你可以等同地说
学生⊑= 1hasId.⊤
我认为这里最好的选择是对你的域和范围更加宽容,对你的子类公理更加明确。毕竟,非学生通常可以具有身份证明(例如,驾驶执照),并且学生实际上可以具有多于一个身份证明(例如,学生证和驾驶执照)。鉴于此,您可能会这样做,然后:
(即使这有一些问题,因为学生可能是多所学校的学生,但这是一个单独的问题。)