我正在努力开发一个简单的"本体"使用RDF和RDF Schema。
目前,我已经编写了以下类和属性:
<rdfs:Class rdf:about="#Model">...</rdfs:Class>
<rdfs:Class rdf:about="#System">...</rdfs:Class>
<rdfs:Class rdf:about="#Concept">...</rdfs:Class>
<rdfs:Property rdf:about="#represents">
<rdfs:domain rdf:resource="#Model" />
<rdfs:range rdf:resource="#System" />
</rdfs:Property>
<rdfs:Property rdf:about="#includes">
<rdfs:domain rdf:resource="#Model" />
<rdfs:range rdf:resource="#Concept" />
</rdfs:Property>
我的想法是,我想定义一个&#34;模型&#34; (即模型实例)作为一组&#34;概念&#34; s。 因此,这样的&#34;模型&#34;实例将代表&#34; a&#34;系统&#34;:&#34;系统&#34;然后可以使用&#34;模型&#34; 中定义的&#34;概念来描述(我可以创建一个类&#34; SystemDescription&#34;用于此目的)。 / p>
现在,我怀疑如下:
我想将概念定义为&#34; Concept&#34;的子类,但&#34;包括&#34;属性需要它们作为实例才能与&#34;模型&#34;实例;换句话说,我的概念将rdf:type和rdfs:subClassOf设置为&#34; Concept&#34; - 这是一个好方法吗? (在我看来,问题需要我的概念既是实例又是类)
假设我想重用SKOS(简单知识组织系统)本体:可以定义&#34;模型&#34;作为skos的子类:ConceptScheme(或&#34; Concept&#34;作为skos的子类:Concept)?
而且,不那么具体地说,考虑到这样的建模问题,您对我的方法有什么建议吗?
答案 0 :(得分:3)
您的问题,按顺序:
1)当然,这在技术上是可行的,但在我看来,这不是一个好方法。它将立即使您的本体变得更加复杂,无论是从人类理解的角度还是从逻辑的角度来看:它将您的本体论置于推理工具无法处理的复杂性类(OWL Full)中。
OWL 2中有一种机制(特别是'punning' mechanism)在特定情况下为此问题提供了一种解决方法。但是,它确实增加了复杂性,所以我不明白为什么你会想要这个。你有一个类Concept
,它的一个重点就是它有个人概念作为它的实例。为什么你希望它们(也)是子类?
2)是的,这绝对没问题。
至于一般建议:我认为你现在的方法看起来很好。 KISS原理适用于本体建模,就像它对任何设计练习一样。但很大程度上取决于你的实际要求 - 请参阅我之前关于概念成为子类的说法:如果你有充分的理由想要这样做,你可能需要一种替代方法,但是如果没有我们知道要求的原因,那么不太可能推荐替代品。