是否可以在 OWL 2 中对 class 级别进行 属性 断言?
Is it possible to make property assertions on class level in OWL 2?
我有一个 OWL 2 ontology,其中包含几个属于 class 的具名个体,它们需要具有具有相同值的相同对象 属性。
我想以这样一种方式做出这个 属性 断言 "on the class" ,即推理者可以推断出 属性 其所有成员都拥有,因此不需要每个的明确断言。 (获得类似于基于 class 的面向对象 属性 继承的东西)
一个简单的例子可以是 ontology 包含属于 class Milk
的个人 milkBottle1
、milkBottle2
、milkBottle3
.他们应该都有 属性 containsNutrient
和值 protein
,但显然这是 Milk
class 的所有成员共享的东西,应该只被明确断言一次。
我只发现了同样的问题 here,但唯一的答案提出了一个不合适的解决方案:使 class 成为 属性 限制的子class class。这导致推理者推断 class 等同于 Nothing class(因为没有命名的个体具有这样的 属性),因此由于将个体分配给它。
我知道这是一个简单的任务,使用像
这样的 SWRL 规则
Milk(?a) → containsNutrient(?a, protein)
但我想尽可能避开它们。
在 OWL 2 中如果没有解决方法,这是否可能?如果可以,怎么办?
I would like to make this property assertion "on the class" in such a
way that a reasoner could infer the property to be had by all of its
members, thus without needing an explicit assertion for each.
(obtaining something similar to a class-based object-oriented property
inheritance)
如果你想说一些 class C 的每个成员都有单独的 v 作为 属性 p 的值,你可以写:
C subClassOf (p value v)
现在,关于您的补充评论:
I have found the same question only here, but the only answer suggests an inappropriate solution: to make the class a subclass of a
property restriction class. This leads the reasoner to infer the class
to be equivalent to the Nothing class (since there are no named
individuals with such property), thus creating an inconsistence
because of the assignment of individuals to it.
我刚才的建议与该答案中描述的相同。说 "C subClassOf (p value v)" 没有什么不一致的,即使没有声明的 C 类型的命名个体。如果你 运行 遇到这种解决方案的一些特殊问题,你可能想要详细说明它(也许再问一个问题);公理 C subClassOf (p value v) 包含 SWRL 规则 C( ?c) 右箭头; p(?c,v)。 (SWRL 规则不太通用,因为它仅适用于 具名 个人,而公理适用于所有个人。)
例子
图 1:C 是 (p value v) 的子class。
图 2:启用推理器后,推断类型 C 的个体 c 具有 v 作为 属性 p. 的值
Ontology(TTL 和 RDF/XML)
@prefix : < .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:c a owl:NamedIndividual , :C .
:C a owl:Class ;
rdfs:subClassOf [ a owl:Restriction ;
owl:hasValue :v ;
owl:onProperty :p
] .
:p a owl:ObjectProperty .
: a owl:Ontology .
:v a owl:Thing , owl:NamedIndividual .
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns=""
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about=""/>
<owl:Class rdf:about="C">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="p"/>
</owl:onProperty>
<owl:hasValue>
<owl:Thing rdf:about="v">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#NamedIndividual"/>
</owl:Thing>
</owl:hasValue>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:NamedIndividual rdf:about="c">
<rdf:type rdf:resource="C"/>
</owl:NamedIndividual>
</rdf:RDF>
我有一个 OWL 2 ontology,其中包含几个属于 class 的具名个体,它们需要具有具有相同值的相同对象 属性。
我想以这样一种方式做出这个 属性 断言 "on the class" ,即推理者可以推断出 属性 其所有成员都拥有,因此不需要每个的明确断言。 (获得类似于基于 class 的面向对象 属性 继承的东西)
一个简单的例子可以是 ontology 包含属于 class Milk
的个人 milkBottle1
、milkBottle2
、milkBottle3
.他们应该都有 属性 containsNutrient
和值 protein
,但显然这是 Milk
class 的所有成员共享的东西,应该只被明确断言一次。
我只发现了同样的问题 here,但唯一的答案提出了一个不合适的解决方案:使 class 成为 属性 限制的子class class。这导致推理者推断 class 等同于 Nothing class(因为没有命名的个体具有这样的 属性),因此由于将个体分配给它。
我知道这是一个简单的任务,使用像
这样的 SWRL 规则Milk(?a) → containsNutrient(?a, protein)
但我想尽可能避开它们。
在 OWL 2 中如果没有解决方法,这是否可能?如果可以,怎么办?
I would like to make this property assertion "on the class" in such a way that a reasoner could infer the property to be had by all of its members, thus without needing an explicit assertion for each. (obtaining something similar to a class-based object-oriented property inheritance)
如果你想说一些 class C 的每个成员都有单独的 v 作为 属性 p 的值,你可以写:
C subClassOf (p value v)
现在,关于您的补充评论:
I have found the same question only here, but the only answer suggests an inappropriate solution: to make the class a subclass of a property restriction class. This leads the reasoner to infer the class to be equivalent to the Nothing class (since there are no named individuals with such property), thus creating an inconsistence because of the assignment of individuals to it.
我刚才的建议与该答案中描述的相同。说 "C subClassOf (p value v)" 没有什么不一致的,即使没有声明的 C 类型的命名个体。如果你 运行 遇到这种解决方案的一些特殊问题,你可能想要详细说明它(也许再问一个问题);公理 C subClassOf (p value v) 包含 SWRL 规则 C( ?c) 右箭头; p(?c,v)。 (SWRL 规则不太通用,因为它仅适用于 具名 个人,而公理适用于所有个人。)
例子
图 1:C 是 (p value v) 的子class。
图 2:启用推理器后,推断类型 C 的个体 c 具有 v 作为 属性 p. 的值
Ontology(TTL 和 RDF/XML)
@prefix : < .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
:c a owl:NamedIndividual , :C .
:C a owl:Class ;
rdfs:subClassOf [ a owl:Restriction ;
owl:hasValue :v ;
owl:onProperty :p
] .
:p a owl:ObjectProperty .
: a owl:Ontology .
:v a owl:Thing , owl:NamedIndividual .
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns=""
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about=""/>
<owl:Class rdf:about="C">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="p"/>
</owl:onProperty>
<owl:hasValue>
<owl:Thing rdf:about="v">
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#NamedIndividual"/>
</owl:Thing>
</owl:hasValue>
</owl:Restriction>
</rdfs:subClassOf>
</owl:Class>
<owl:NamedIndividual rdf:about="c">
<rdf:type rdf:resource="C"/>
</owl:NamedIndividual>
</rdf:RDF>