OWL 我怎么知道某些东西应该是 class 还是实例?
OWL how can I know if something should be class or instance?
我正在尝试构建一个 Ontology 来表示 properties(资产),属性 应该具有别墅或公寓等类型.. .
我的问题是,我不知道别墅和公寓应该是 class 还是实例。 我怎么知道?
我正在考虑有一个名为 Property
的 class 和一个名为 isTypeOf
的关系以及一个名为 PropertyType
的 class,它有两个实例 apartment
和 villa
。请问这是正确的吗?或者我应该将 Apartment
和 Villa
设为 classes,它们是 PropertyType
class?
的子class
我认为,你在这里结合了两个区别,你可能想单独争论:
- 什么时候应该使用 subclassing,什么时候应该使用 属性 引用?
- 我什么时候应该在 TBox 级别(subclassing)以及什么时候在 ABox 级别表示歧视(属性 个值,实例)?
(1) 与旧的 inheritance or delegation
问题大致相同。答案也大致相同:当歧视是所表示对象的固有 属性 时,当歧视 属性 是您的知识模型的核心时,当歧视 属性没有独立存在的理由。
另一方面,当歧视 属性 仅向您的 class/object 添加 额外 信息或有足够的理由 "exist" 时,请使用委派] 本身(即不完全依赖于引用对象)。在你的情况下:检查,有多少信息取决于 PropertyType
,而 PropertyType
取决于 PropertyType
本身,而不是个人 Property
。如果有诸如“带游泳池和环形车道的别墅”之类的东西,并且这种区别很重要并且可以重复使用,您可以考虑委派。
(2) 遵循 功能依赖性 .
的相同思路
我个人的经验法则是
- 如果您希望根据细分制定额外的公理,即如果您需要参考细分集,如果您需要附加数据或对象属性,或者如果您期望可能需要进一步细化(想想
LuxuryApartment
或只能附加到 Villa
等的 Garden
)。
- 如果您希望 ontology 是明确的并且如果新的子 class 化预计是 class稀有的。但请注意,您的期望可能是错误的。
- 如果 属性 值没有引入或引入非常有限的函数依赖性,并且如果该区别预计不会有任何附加属性,则将其设置为 属性本身。
不过,总的来说不一定是正确的或错误的。
专业版 类
如果 Apartment
和 Villa
是 classes 那么很容易根据这些 classes 制定额外的公理。例如,假设只有 Villa
的 Property
才允许拥有花园:
(∃ hasPropertyFeature . Garden) ⊑ Villa
如果您尝试使用 hasPropertyType
数据 属性 来制定此公式,您最终会得到类似
的结果
(∃ hasPropertyFeature . Garden) ⊑ (∃ hasPropertyType . "villa"^^xsd:string)
这不仅更难掌握,而且推理起来也更慢。此外,classes 可以被子classed,即有一种直接的方法来进行额外的细分。
魂斗罗类
但是,如果 hasPropertyType
属性 没有额外的限制,您可以完全在实例级别添加额外的 属性 值,而无需触及原始 ontology。
如果townHouse
作为新的属性类型出现,基于class的版本需要更改原始ontology的TBox并添加新的TownHouse
class。虽然这通常没有问题(大多数情况下是保守扩展),但它仍然是 TBox 更改,您基本上需要为此创建 ontology 的新版本变化。
这个版本——然而——变得不太可行,当属性引入功能依赖时;见上文。
RDF、RDFS 和 OWL 具有必要的 t-box 术语。 OWL 深度学习默认基于大量借鉴集合论的描述逻辑,因此其天然优势在于使用 类、交集和并集来描述事物。
话虽如此,我更喜欢使用稍微 softer/looser 语义进行建模并希望使用分类法(枚举),那么如果你不知道,看看 SKOS 来帮助分面的东西怎么样关于您的域已经足够了。
使用 SKOS,您可以创建包含各种 类 的 ConceptSchemes,这些 类 被描述为 broader/narrower 到其他 Concepts 和 ConceptScheme。此外,它与 OWL
完全兼容
我正在尝试构建一个 Ontology 来表示 properties(资产),属性 应该具有别墅或公寓等类型.. .
我的问题是,我不知道别墅和公寓应该是 class 还是实例。 我怎么知道?
我正在考虑有一个名为 Property
的 class 和一个名为 isTypeOf
的关系以及一个名为 PropertyType
的 class,它有两个实例 apartment
和 villa
。请问这是正确的吗?或者我应该将 Apartment
和 Villa
设为 classes,它们是 PropertyType
class?
我认为,你在这里结合了两个区别,你可能想单独争论:
- 什么时候应该使用 subclassing,什么时候应该使用 属性 引用?
- 我什么时候应该在 TBox 级别(subclassing)以及什么时候在 ABox 级别表示歧视(属性 个值,实例)?
(1) 与旧的 inheritance or delegation
问题大致相同。答案也大致相同:当歧视是所表示对象的固有 属性 时,当歧视 属性 是您的知识模型的核心时,当歧视 属性没有独立存在的理由。
另一方面,当歧视 属性 仅向您的 class/object 添加 额外 信息或有足够的理由 "exist" 时,请使用委派] 本身(即不完全依赖于引用对象)。在你的情况下:检查,有多少信息取决于 PropertyType
,而 PropertyType
取决于 PropertyType
本身,而不是个人 Property
。如果有诸如“带游泳池和环形车道的别墅”之类的东西,并且这种区别很重要并且可以重复使用,您可以考虑委派。
(2) 遵循 功能依赖性 .
的相同思路我个人的经验法则是
- 如果您希望根据细分制定额外的公理,即如果您需要参考细分集,如果您需要附加数据或对象属性,或者如果您期望可能需要进一步细化(想想
LuxuryApartment
或只能附加到Villa
等的Garden
)。 - 如果您希望 ontology 是明确的并且如果新的子 class 化预计是 class稀有的。但请注意,您的期望可能是错误的。
- 如果 属性 值没有引入或引入非常有限的函数依赖性,并且如果该区别预计不会有任何附加属性,则将其设置为 属性本身。
不过,总的来说不一定是正确的或错误的。
专业版 类
如果 Apartment
和 Villa
是 classes 那么很容易根据这些 classes 制定额外的公理。例如,假设只有 Villa
的 Property
才允许拥有花园:
(∃ hasPropertyFeature . Garden) ⊑ Villa
如果您尝试使用 hasPropertyType
数据 属性 来制定此公式,您最终会得到类似
(∃ hasPropertyFeature . Garden) ⊑ (∃ hasPropertyType . "villa"^^xsd:string)
这不仅更难掌握,而且推理起来也更慢。此外,classes 可以被子classed,即有一种直接的方法来进行额外的细分。
魂斗罗类
但是,如果 hasPropertyType
属性 没有额外的限制,您可以完全在实例级别添加额外的 属性 值,而无需触及原始 ontology。
如果townHouse
作为新的属性类型出现,基于class的版本需要更改原始ontology的TBox并添加新的TownHouse
class。虽然这通常没有问题(大多数情况下是保守扩展),但它仍然是 TBox 更改,您基本上需要为此创建 ontology 的新版本变化。
这个版本——然而——变得不太可行,当属性引入功能依赖时;见上文。
RDF、RDFS 和 OWL 具有必要的 t-box 术语。 OWL 深度学习默认基于大量借鉴集合论的描述逻辑,因此其天然优势在于使用 类、交集和并集来描述事物。
话虽如此,我更喜欢使用稍微 softer/looser 语义进行建模并希望使用分类法(枚举),那么如果你不知道,看看 SKOS 来帮助分面的东西怎么样关于您的域已经足够了。
使用 SKOS,您可以创建包含各种 类 的 ConceptSchemes,这些 类 被描述为 broader/narrower 到其他 Concepts 和 ConceptScheme。此外,它与 OWL
完全兼容