3 inheritance semantic-web owl description-logic
我有一个 OWL 2 本体,其中包含属于某个类的多个命名个体,这些个体需要具有相同的对象属性和相同的值。
我想在“类上”进行此属性断言,以便推理器可以推断出其所有成员所拥有的属性,因此不需要为每个成员进行显式断言。(获得类似于基于类的面向对象的属性继承)
一个简单的例子是包含属于该类的milkBottle1
个体的milkBottle2
本体。它们都应该具有value 的属性,但显然这是类的所有成员共享的东西,并且只应该显式断言一次。milkBottle3
Milk
containsNutrient
protein
Milk
我只在这里发现了同样的问题,但唯一的答案提出了一个不适当的解决方案:使该类成为属性限制类的子类。这导致推理器推断该类等同于 Nothing 类(因为不存在具有此类属性的命名个体),从而由于向其分配个体而造成不一致。
我知道这是一个简单的任务,使用 SWRL 规则,例如
牛奶(?a) → 含有营养素(?a, 蛋白质)
但如果可能的话我想避免它们。
如果没有 OWL 2 中的解决方法,这可能吗?如果可以的话,该怎么办呢?
我想在“类上”进行此属性断言,以便推理器可以推断出其所有成员所拥有的属性,因此不需要为每个成员进行显式断言。(获得类似于基于类的面向对象的属性继承)
如果你想说某个类 C 的每个成员都有单独的 v 作为属性 p 的值,你可以写:
C subClassOf (p值v)
现在,关于您的补充评论:
我只在这里发现了同样的问题,但唯一的答案提出了一个不适当的解决方案:使该类成为属性限制类的子类。这导致推理器推断该类等同于 Nothing 类(因为不存在具有此类属性的命名个体),从而由于向其分配个体而造成不一致。
我刚才的建议与该答案中描述的内容相同。即使没有声明 C 类型的命名个体,“C subClassOf (p value v)”也没有任何不一致的地方。如果您遇到这种类型的解决方案的某些特定问题,您可能需要详细说明它(也许还可以问一个额外的问题);公理C subClassOf (p value v)包含 SWRL 规则C(?c) → p(?c,v)。(SWRL 规则不太通用,因为它仅适用于指定的个人,而公理适用于所有个人。)
图 1:C 是 (p value v)的子类。
图 2:启用推理器后,类型 C 的个体 c 被推断为将 v 作为属性 p 的值。
@prefix : <http://stackoverflow.com/q/29075078/1281433#> .
@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 .
Run Code Online (Sandbox Code Playgroud)
<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="http://stackoverflow.com/q/29075078/1281433#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://stackoverflow.com/q/29075078/1281433#"/>
<owl:Class rdf:about="http://stackoverflow.com/q/29075078/1281433#C">
<rdfs:subClassOf>
<owl:Restriction>
<owl:onProperty>
<owl:ObjectProperty rdf:about="http://stackoverflow.com/q/29075078/1281433#p"/>
</owl:onProperty>
<owl:hasValue>
<owl:Thing rdf:about="http://stackoverflow.com/q/29075078/1281433#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="http://stackoverflow.com/q/29075078/1281433#c">
<rdf:type rdf:resource="http://stackoverflow.com/q/29075078/1281433#C"/>
</owl:NamedIndividual>
</rdf:RDF>
Run Code Online (Sandbox Code Playgroud)