我正在研究OWL中的推论,目前是属于其属性域的单个类型的向下倾斜。我构建了以下示例本体:
@prefix : <http://www.test.org/2015/4/ontology#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@base <http://www.test.org/2015/4/ontology> .
<http://www.test.org/2015/4/ontology> rdf:type owl:Ontology .
:Class1 rdf:type owl:Class .
:Sub1 rdf:type owl:Class ;
rdfs:subClassOf :Class1 .
:Prop1 rdf:type owl:DatatypeProperty ;
rdfs:domain :Sub1 .
:Ind1 rdf:type :Class1 , owl:NamedIndividual ;
:Prop1 "p" .
正如预期的那样,推理者(在我的案例中是Pellet)推断出:Ind1的类型为:Sub1:
:Ind1 :Prop1 "p"
:Prop1 rdfs:domain :Sub1
=> :Ind1 a :Sub1
然后我添加了以下定义:
:Class2 rdf:type owl:Class .
:Sub2 rdf:type owl:Class ;
rdfs:subClassOf :Class2 .
:Prop2 rdf:type owl:DatatypeProperty ;
rdfs:domain [ rdf:type owl:Class ;
owl:unionOf ( :Sub1
:Sub2
)
] .
:Ind2 rdf:type :Class2 , owl:NamedIndividual ;
:Prop2 "p" .
属性的域:Prop2现在是:Sub1或:Sub2。
我预计在这种情况下,类:Sub2由推理器推断为:Ind2的类型。但它不会发生。
为什么不能推断它?我哪里错了?
答案 0 :(得分:0)
在这种情况下我也期望类:Sub2是由...推断的 推理者的类型:Ind2。但它不会发生。
你为什么期待这个? A或B 类是 A或B(或两者)的元素类。如果您说某个属性的域名是 A或B ,那么从属性断言中,您可以推断出该主题是联合类 A或B 的成员,但仅凭这一点还不足以推断该主题是 A 或 B 的成员。
当联合类由不相交的类组成时,这可能尤其明显。例如,假设一个属性 hasWings ,域名为 Plane或Bird 。如果我断言 x hasWings 2 ,那么您知道 x 是 Plane 或 Bird ,并且因此,它是 Plane或Bird ,但您还不知道 x 是 Plane 还是 Bird 强>
你是对的,属于域名飞机或鸟类是不足以推断出X是飞机或鸟类,如果它只有一个特征 - 该物业有翼。但在我的例子中,个人也有一个 第二个特征 - 类型,即其中一个的超类 建立联盟的课程。想象一下,Plane是subClassOf 机器和鸟是subClassOf Animal。如果我们定义X是 机器和有机2然后应该推断出X的类型 平面上。
仅仅因为某个人属于某个类并不意味着它必须属于该类的任何特定子类。现在,你知道吗
(a)Ind2∈类2
(b)Ind2∈(Sub1⊔Sub2)
(c)Sub2⊑Class2;
你声称我们应该能够推断出
Ind2∈Sub2
但事实并非如此。假设对类的实际解释是这样的:
Class2≡{Ind2}
Sub1≡{Ind2}
Sub2≡{}
这与公理和推论完全一致;它使它们都成立: