Rdf OWL我怎么知道某个东西应该是类还是实例?
我试图建立一个本体来表示属性(资产),属性应该有一个类型,如别墅或公寓 我的问题是,我不知道别墅和公寓应该是类还是实例我怎么知道Rdf OWL我怎么知道某个东西应该是类还是实例?,rdf,semantic-web,owl,ontology,rdfs,Rdf,Semantic Web,Owl,Ontology,Rdfs,我试图建立一个本体来表示属性(资产),属性应该有一个类型,如别墅或公寓 我的问题是,我不知道别墅和公寓应该是类还是实例我怎么知道 我正在考虑创建一个名为Property的类和一个名为isTypeOf的关系,以及一个名为PropertyType的类,它有两个实例公寓和别墅。请问对吗?或者我应该把公寓和别墅作为物业类型类的子类?我认为,您在这里结合了两个区别,您可能需要分别论证: 什么时候应该使用子类化,什么时候应该使用属性引用 我应该在何时在TBox级别(子类化)和何时在ABox级别(属性值、实例
我正在考虑创建一个名为
Property
的类和一个名为isTypeOf
的关系,以及一个名为PropertyType
的类,它有两个实例公寓
和别墅
。请问对吗?或者我应该把公寓
和别墅
作为物业类型
类的子类?我认为,您在这里结合了两个区别,您可能需要分别论证:
继承或委派问题或多或少相同。答案也大致相同:当歧视是所代表对象的固有属性时,当歧视属性是知识模型的核心时,当歧视属性没有独立的存在理由时,使用继承
另一方面,当discrimination属性仅向类/对象添加额外信息或有足够的理由单独“存在”时(即,没有完全绑定到引用对象),请使用委托。在您的情况下:检查有多少信息取决于PropertyType
,它取决于PropertyType
本身,而不是单个属性。如果有像“有游泳池和圆形车道的别墅”这样的区分很重要而且可以重复使用,你可以考虑委托。
(2) 遵循相同的函数依赖关系
我个人的经验法则是
- 如果您希望基于细分制定其他公理,即如果您需要参考细分集,如果您需要附加数据或对象属性,或者如果您希望进一步细化,请将其设置为类(想想看
LuxuryApartment
或者只能连接到别墅的花园
等等)
- 如果您希望本体明确,并且希望新的子分类很少,请将其设置为类。但是请注意,您的期望可能是错误的
- 如果属性值不引入或非常有限的函数依赖项,并且该区别本身不需要任何附加属性,则将其设置为属性
但是,总的来说,不一定有正确或错误
专业课程
如果公寓
和别墅
是类,那么很容易根据这些类制定额外的公理。例如,假设只有别墅
的物业
才允许有花园:
(∃ hasPropertyFeature . Garden) ⊑ Villa
如果您尝试使用hasPropertyType
data属性来表述此属性,那么最终会得到如下结果
(∃ hasPropertyFeature . Garden) ⊑ (∃ hasPropertyType . "villa"^^xsd:string)
这不仅很难理解,而且推理也很慢。此外,类可以被子类化,也就是说,有一种简单的方法可以进行额外的细分
对位类
但是,拥有一个没有附加限制的hasPropertyType
属性,您就可以纯粹在实例级别添加附加属性值,而无需接触原始本体
如果townHouse
作为一种新的属性类型出现很长时间,则基于类的版本需要更改原始本体的TBox并添加一个新的townHouse
类。虽然这通常没有问题(大多数情况下是保守的扩展)这仍然是一个TBox更改,您基本上需要为这些更改创建一个本体的新版本
然而,当属性引入函数依赖项时,这个版本就变得不太可行了;参见上文。RDF、RDF和OWL都有必要的t-box术语。OWL DL默认基于描述逻辑,它大量借鉴了集合论,因此它的自然优势在于使用类、交集和并集来描述t欣
话虽如此,我认为您更喜欢使用稍微软一点/松散一点的语义进行建模,并希望使用分类法(枚举),那么如果您对您的域了解不够,那么看看如何帮助方面的东西
使用SKOS,您可以创建ConceptScheme,其中包括描述为比其他概念和ConceptScheme更宽/更窄的各种类。此外,它与OWL完全兼容非常感谢您的详细回答。我这里还有另一个问题,请检查