我正在 Protege 中创建一个简单的本体,对基数进行推理存在问题。下面是本体的玩具模型。有、 和的三个实例A
,每个实例分别具有 1、2 和 3属性。、和也有三个实例。B
C
hasOwner
:Onwer
X
Y
Z
用 定义了两个类owl:equivalentClass
,一个是:Project
with owl:someValuesFrom :Owner
,一个是:JV
with owl:minQualifiedCardinality "2" ; owl:onClass :Owner
。
现在推理器正确地归类:JV
为 ; 的子类:Project
。并且它推断所有三个实例A
,B
和C
的实例:Project
,但没有一个实例:JV
。而从技术上讲,推理器应该将所有三个都作为实例:Project
,B
并且C
作为:JV
( 的实例,因为它们具有 2 和 3 个断言:hasOwner
属性。
谁能告诉我我错过了什么?这似乎也不是一个开放世界假设问题,因为我们正在处理最小基数。
:Owner rdf:type owl:Class .
:hasOwner rdf:type owl:ObjectProperty .
:Project rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :hasOwner ;
owl:someValuesFrom :Owner
] .
:JV rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :hasOwner ;
owl:minQualifiedCardinality "2"^^xsd:nonNegativeInteger ;
owl:onClass :Owner
] .
:A rdf:type owl:NamedIndividual ;
:hasOwner :X .
:B rdf:type owl:NamedIndividual ;
:hasOwner :X ,
:Y .
:C rdf:type owl:NamedIndividual ;
:hasOwner :X ,
:Y ,
:Z .
:X rdf:type owl:NamedIndividual , :Owner .
:Y rdf:type owl:NamedIndividual , :Owner .
:Z rdf:type owl:NamedIndividual , :Owner .