2

我正在尝试使用 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>

这个想法是我想将“模型”(即模型实例)定义为一组“概念”。因此,这样的“模型”实例将“表示”一个“系统”:然后可以使用该“模型”中定义的“概念”来描述一个“系统”(为此我可以创建一个类“SystemDescription”) .

现在,我的疑问如下:

  1. 我想将概念定义为“概念”的子类,但“包含”属性需要它们是实例才能与“模型”实例建立关系;换句话说,我的概念会将 rdf:type 和 rdfs:subClassOf 设置为“Concept”——这是一个好方法吗?(在我看来,这个问题需要我的概念既是实例又是类)

  2. 假设我想重用 SKOS(简单知识组织系统)本体:可以将“模型”定义为 skos:ConceptScheme 的子类(或“概念”作为 skos:Concept 的子类)吗?

而且,不太具体,你对我考虑到这样一个建模问题的方法有什么建议吗?

4

1 回答 1

3

您的问题,按顺序:

1)这在技术上当然是可行的,但在我看来,这不是一个好方法。无论从人类理解的角度还是从逻辑的角度来看,它都会立即使您的本体变得更加复杂:它将您的本体置于推理工具无法处理的复杂性类(OWL Full)中。

OWL 2 中有一种机制(特别是“双关语”机制)在特定情况下为这个问题提供了解决方法。但是,它确实增加了复杂性,所以我不明白你为什么想要这个。你有一个类Concept,它是一个类的全部意义在于它有单独的概念作为它的实例。为什么您希望它们成为(也是)子类?

2)是的,这绝对没问题。

至于一般建议:我认为您目前拥有的方法看起来不错。KISS 原则适用于本体建模,就像它适用于任何设计练习一样。但是很大程度上取决于您的实际要求 - 请参阅我之前关于概念成为子类的评论:如果您有充分的理由想要这样做,您可能需要另一种方法,但如果我们不知道要求的原因,它是不可能的推荐一个替代方案。

于 2014-04-23T23:54:26.070 回答