如何在OWL类中添加2个子类?

时间:2015-10-08 10:27:59

标签: rdf owl

enter image description here

我正试图为佳能相机制作一个课堂陈述。但是我不知道Canon Camera类中是否允许2个subclassOf语句指向" Camera"和"佳能产品"。

这是我到目前为止所做的:

<owl:Class rdf:ID="Canon Camera">
    <rdfs:comment>A canon camera</rdfs:comment>
    <rdfs:subClassOf rdf:resource="#Canon Product"/>
    <rdfs:subClassOf rdf:resource="#Camera"/>
</owl:Class>

我需要知道这是否可行和正确:

{{1}}

谢谢:)

1 个答案:

答案 0 :(得分:2)

除了IRI中的空格不是合法字符这一事实(因此#Canon ProductCanon Camera不是语法上合法的标识符),您的示例很好。您已经表达了一种本体论,其中Canon Camera的每个实例都被推断为Canon ProductCamera的实例。

但请注意,你所拥有的内容是相反的推论:你的模型并不表示既是“相机”又是“佳能产品”的所有东西都是“佳能”相机”。

如果您想捕获此反向关系,则需要使用OWL特定的构造,而不是仅添加rdfs:subClassOf关系。表达它的一种简单方法是使用owl:intersectionOf,如下所示:

<owl:Class rdf:ID="CanonCamera">
    <rdfs:comment>A canon camera</rdfs:comment>
    <owl:intersectionOf rdf:parseType="Collection">
      <owl:Class rdf:about="#CanonProduct"/>
      <owl:Class rdf:about="#Camera"/>
    </owl:intersectionOf>
</owl:Class>

或使用Turtle语法(比RDF / XML更容易阅读):

  :CanonCamera a owl:Class ;
      owl:intersectionOf ( :CanonProduct :Camera ) .

这表示:CanonCamera的类扩展与<{1}}和:CanonProduct的类扩展的交集完全相同。换句话说:

  1. 所有 :Camera:CanonProduct的内容都被推断为:Camera
  2. 所有:CanonCamera的内容都被推断为:CanonCamera:CanonProduct