我正试图为佳能相机制作一个课堂陈述。但是我不知道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}}
谢谢:)
答案 0 :(得分:2)
除了IRI中的空格不是合法字符这一事实(因此#Canon Product
和Canon Camera
不是语法上合法的标识符),您的示例很好。您已经表达了一种本体论,其中Canon Camera
的每个实例都被推断为Canon Product
和Camera
的实例。
但请注意,你所拥有不的内容是相反的推论:你的模型并不表示既是“相机”又是“佳能产品”的所有东西都是“佳能”相机”。
如果您想捕获此反向关系,则需要使用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
的类扩展的交集完全相同。换句话说:
:Camera
和:CanonProduct
的内容都被推断为:Camera
:CanonCamera
的内容都被推断为:CanonCamera
和:CanonProduct