我正在尝试构建一个本体来表示属性( Assets ),该属性应该具有诸如别墅或公寓之类的类型...
我的问题是我不知道别墅和公寓应该是类还是实例。 我怎么知道 ?
我正在考虑开设一个名为 Property
的类(class)和称为 isTypeOf
的关系和一个名为 PropertyType
的类,它有两个实例 apartment
和 villa
.请问这是正确的吗?或者我应该制作 Apartment
和 Villa
作为 PropertyType
的子类的类类(class)?
最佳答案
我认为,您在这里结合了两个区别,您可能想分别争论:
(1) 与旧的
inheritance or delegation
差不多问题。答案也或多或少相同:当歧视是所代表对象的固有属性,当歧视属性是你的知识模型的核心,当歧视属性没有独立存在的理由时,使用继承。另一方面,当区分属性仅向您的类/对象添加附加信息或有足够的理由“存在”其自身(即不完全仅与引用对象相关联)时,请使用委托(delegate)。在您的情况下:检查,有多少信息取决于
PropertyType
这取决于 PropertyType
本身而不是个人Property
.如果有诸如“带游泳池和环形车道的别墅”之类的东西,并且这种区别很重要并且可以重复使用,您可能会考虑委托(delegate)。(2) 遵循相同的函数依赖关系。
我个人的经验法则是
LuxuryApartment
或 Garden
只能附加到 Villa
等)。 但是,一般来说不一定有正确或错误。
专业类(class)
如果
Apartment
和 Villa
是类,那么很容易基于这些类制定额外的公理。例如,假设只有 Property
s 是 Villa
允许s拥有花园:(∃ hasPropertyFeature . Garden) ⊑ Villa
如果您尝试使用
hasPropertyType
data 属性,你最终会得到类似的东西(∃ hasPropertyFeature . Garden) ⊑ (∃ hasPropertyType . "villa"^^xsd:string)
这不仅更难掌握,而且推理起来也更慢。此外,可以对类进行子类化,即有一种直接的方法可以进行额外的分割。
反对类
但是,拥有
hasPropertyType
没有附加限制的属性允许您纯粹在实例级别添加附加属性值,而无需触及原始本体。如果
townHouse
只要是新的属性类型,基于类的版本需要改变原本体的TBox并添加一个新的TownHouse
类(class)。虽然这通常是没有问题的(大多数时候是保守的扩展),但它仍然是一个 TBox 更改,您基本上需要为此类更改创建一个新版本的本体。这是版本——然而——当属性引入功能依赖时变得不太可行;往上看。
关于rdf - OWL 我怎么知道某个东西应该是类还是实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29459108/