如何在 OWL class 中添加 2 个子class?
How do you add 2 subclassof's in an OWL class?
我正在尝试为佳能相机做一个 class 声明。但我不知道在佳能相机 class 中是否允许 2 subclassOf 语句指向 "Camera" 和 "Canon Product".
这是我目前拥有的:
<owl:Class rdf:ID=”product”>
<rdfs:comment>Products form a class. </rdfs:comment>
</owl:Class>
<owl:Class rdf:ID=”Camera”>
<rdfs:comment>Photography device</rdfs:comment>
<rdfs:label>Device</rdfs:label>
<rdfs:subClassOf rdf:resource=”#product”/>
</owl:Class>
<owl:Class rdf:ID=”Canon Product”>
<rdfs:comment>A canon device</rdfs:comment>
<rdfs:label>Device</rdfs:label>
<rdfs:subClassOf rdf:resource=”#product”/>
</owl:Class>
我需要知道这是否可行且正确:
<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>
谢谢:)
除了空格在 IRI 中不是合法字符这一事实(因此 #Canon Product
和 Canon Camera
在句法上不是合法的标识符),你的例子很好。您表达了一个 ontology,其中 Canon Camera
的每个实例都被推断为 Canon Product
和 Camera
的实例。
但是请注意,您所捕获的 而不是 是反向推理:您的模型并未表达既是 "Camera" 又是 "Canon Product" 始终是 "Canon 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
的 class 扩展 完全等于 [=20= 的 class 扩展的交集] 和 :Camera
。换句话说:
- 所有同时一个
:CanonProduct
和一个:Camera
的东西被推断为一个:CanonCamera
- 所有属于
:CanonCamera
的事物都被推断为同时属于 :CanonProduct
和 :Camera
我正在尝试为佳能相机做一个 class 声明。但我不知道在佳能相机 class 中是否允许 2 subclassOf 语句指向 "Camera" 和 "Canon Product".
这是我目前拥有的:
<owl:Class rdf:ID=”product”>
<rdfs:comment>Products form a class. </rdfs:comment>
</owl:Class>
<owl:Class rdf:ID=”Camera”>
<rdfs:comment>Photography device</rdfs:comment>
<rdfs:label>Device</rdfs:label>
<rdfs:subClassOf rdf:resource=”#product”/>
</owl:Class>
<owl:Class rdf:ID=”Canon Product”>
<rdfs:comment>A canon device</rdfs:comment>
<rdfs:label>Device</rdfs:label>
<rdfs:subClassOf rdf:resource=”#product”/>
</owl:Class>
我需要知道这是否可行且正确:
<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>
谢谢:)
除了空格在 IRI 中不是合法字符这一事实(因此 #Canon Product
和 Canon Camera
在句法上不是合法的标识符),你的例子很好。您表达了一个 ontology,其中 Canon Camera
的每个实例都被推断为 Canon Product
和 Camera
的实例。
但是请注意,您所捕获的 而不是 是反向推理:您的模型并未表达既是 "Camera" 又是 "Canon Product" 始终是 "Canon 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
的 class 扩展 完全等于 [=20= 的 class 扩展的交集] 和 :Camera
。换句话说:
- 所有同时一个
:CanonProduct
和一个:Camera
的东西被推断为一个:CanonCamera
- 所有属于
:CanonCamera
的事物都被推断为同时属于:CanonProduct
和:Camera