我正在 Protege 中创建一个简单的本体,对基数进行推理存在问题。下面是本体的玩具模型。有、 和的三个实例A,每个实例分别具有 1、2 和 3属性。、和也有三个实例。BChasOwner:OnwerXYZ
用 定义了两个类owl:equivalentClass,一个是:Projectwith owl:someValuesFrom :Owner,一个是:JVwith 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 .