OWL我怎么知道某些东西应该是类还是实例?

Mar*_*oli 5 rdf semantic-web owl ontology rdfs

我正在尝试构建一个Ontology来表示属性(资产),该属性应该有一个类型,如别墅或公寓......

我的问题是,我不知道别墅和公寓是否应该是班级或实例.我怎么知道

我正在考虑有一个被调用的类Property和一个被调用的关系isTypeOf和一个被调用的类PropertyType,它有两个实例apartmentvilla.那是对的吗?或者我应该ApartmentVilla类作为类的子PropertyType类?

dhk*_*hke 3

我认为,您在这里结合了两个区别,您可能想分别争论:

\n\n
    \n
  1. 什么时候应该使用子类化以及什么时候应该使用属性引用?
  2. \n
  3. 我什么时候应该在TBox级别(子类化)以及什么时候在ABox级别(属性值、实例)表示歧视?
  4. \n
\n\n

(1) 与老问题大致相同inheritance or delegation。答案也或多或少相同:当歧视是所表示的对象的固有属性时,当歧视属性是您的知识模型的核心时,以及当歧视属性没有独立的存在理由时,请使用继承。

\n\n

另一方面,当区分属性仅向您的类/对象添加附加信息或有足够的理由自行“存在”时(即不完全仅与引用对象绑定),请使用委托。就您的情况而言:检查有多少信息取决于 ,而该信息PropertyType取决于自身PropertyType而不是个人Property。如果有诸如“带游泳池和环形车道的别墅”之类的东西,并且这种区别很重要并且可以重复使用,那么您可能会考虑授权。

\n\n

(2) 遵循同样的函数依赖思路。

\n\n

我个人的经验法则是

\n\n
    \n
  • 如果您希望基于细分制定额外的公理,即如果您需要引用细分集,如果您需要附加数据或对象属性,或者如果您希望可能需要进一步细化(想想LuxuryApartment或者Garden可以仅附加到 aVilla等)。
  • \n
  • 如果您希望本体是明确的并且新的子分类预计很少见,请将其设为一个类。但请注意,您的期望可能是错误的。
  • \n
  • 如果属性值不引入或引入非常有限的功能依赖性,并且如果预计该区别本身不会有任何其他属性,则将其设为属性。
  • \n
\n\n

不过,一般来说并不一定有正确错误之分

\n\n

专业课程

\n\n

如果ApartmentVilla是类,那么很容易根据这些类制定附加公理。例如,假设只有Propertys 才Villa允许拥有花园:

\n\n
(\xe2\x88\x83 hasPropertyFeature . Garden) \xe2\x8a\x91 Villa\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果您尝试使用hasPropertyType数据属性来表达这一点,您最终会得到类似的结果

\n\n
(\xe2\x88\x83 hasPropertyFeature . Garden) \xe2\x8a\x91 (\xe2\x88\x83 hasPropertyType . "villa"^^xsd:string)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这不仅更难掌握,而且推理起来也更慢。此外,类可以进行子类化,即有一种直接的方法可以进行额外的细分。

\n\n

魂斗罗课程

\n\n

但是,拥有hasPropertyType没有附加限制的属性允许您纯粹在实例级别添加附加属性值,而无需触及原始本体。

\n\n

如果townHouse出现新的属性类型,基于类的版本需要更改原始本体的TBox并添加新的TownHouse类。虽然这通常没有问题(大多数时候是保守的扩展),但它仍然是TBox更改,您基本上需要为此类更改创建本体的新版本。

\n\n

然而,当属性引入功能依赖性时,这个版本就变得不太可行;往上看。

\n