关于OWL基数限制的推理



我想我对OWL公理还有一个根本的误解:(.

下面是我创建的一个小型测试本体:

@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf:      <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:      <http://www.w3.org/2002/07/owl#> .
@prefix :         <http://foobar.com/test/> .
: a owl:Ontology .
:prop1 a owl:DatatypeProperty .
:prop2 a owl:DatatypeProperty .
:Class1 owl:equivalentClass [
a owl:Restriction ;
owl:onProperty :prop1 ;
owl:cardinality "1"^^xsd:int
] .
:Ind1 a owl:NamedIndividual ;
:prop1 "value1"^^xsd:string .
:Class2 owl:equivalentClass [
a owl:Restriction ;
owl:onProperty :prop2 ;
owl:minCardinality "1"^^xsd:int
] .
:Ind2 a owl:NamedIndividual ;
:prop2 "value2"^^xsd:string .

当我在Protege中运行Hermit推理器时,我得到了:Ind2的预期结果,即它是:Class2的成员。但就成为:Class1的成员而言,我对:Ind1的看法并不相同。

我怀疑这与开放世界假设有关,并且:Ind1可能还有另一个:prop1断言。所以有几个问题:

  • 我是否正确诊断了问题
  • 我能举一个例子,说明我如何在不明确断言的情况下,让我的目标隐士推断:Ind1:Class1的成员吗

感谢

前提

OWL语义是在开放世界假设下定义的,因此您无法检查某个属性的基数是否正是N,因为即使没有声明,也可能存在其他属性实例。

更准确地说,这些是你可以做的检查:

声音是是是
基数检查 可能的答案完成
至少N (如果N或更多(
我不知道(否则(
确切的N (如果N+1或更多(
我不知道(否则(
最多N (如果N+1或更多(
我不知道(否则(

感谢@horcurus提供提示。最后成功的是还将属性声明为owl:FunctionalProperty。将属性声明编辑为:

:prop1 a owl:DatatypeProperty, owl:FunctionalProperty .
:prop2 a owl:DatatypeProperty, owl:FunctionalProperty .

这不需要在每个单独的声明中添加额外的限制。

相关内容

  • 没有找到相关文章

最新更新