我正在使用FaCT++和一个简单的本体研究Protege4中OWL限制的概念。假设我有一个Something类的foo
:Something a owl:Class.
:foo a :Something, owl:NamedIndividual.从hasBar属性的限制中定义的另一个类:
:hasBar a owl:ObjectProperty.
:SomethingElse owl:equivalentClass [a owl:Restriction;
owl:onProperty :hasBar;
owl:allValuesFrom :Something].如果我断言:
:x :hasBar :foo.为什么我不能从它推断出x是一个SomethingElse (通过foo是一个Something的事实)?我能让它工作的唯一方法是定义hasBar的range:
:hasBar a owl:ObjectProperty;
rdfs:range :Something.但我想避免这种情况,因为它限制了hasBar的主题(这给我带来了更多的麻烦)。
发布于 2013-04-16 17:08:04
我认为通过真实的例子进行推理会更简单,让我们考虑以下知识库:
:eats rdf:type owl:ObjectProperty .
:Vegetable rdf:type owl:Class ;
rdfs:subClassOf owl:Thing .
:Vegetarian rdf:type owl:Class ;
owl:equivalentClass [ rdf:type owl:Restriction ;
owl:onProperty :eats ;
owl:allValuesFrom :Vegetable
] .
:Carrot rdf:type :Vegetable ,
owl:NamedIndividual .
:John rdf:type owl:NamedIndividual , owl:Thing ;
:eats :carrot .与您的示例有一些等价物:hasBar是eats,Vegetarian是SomethingElse,Vegetable是Something,foo是carrot,最后x是<代码>D10。
现在,您可以推断John是一个Vegetarian (= x is SomethingElse)。
它不能与owl:allValuesFrom一起工作,这是有道理的。你在这里所说的是,所有素食的实例,如果他们有一个属性,他们必须在范围内有蔬菜。例如,假设你一开始就知道carrot是素食者,你就可以推断他是素食者。
这在自然语言中也是有道理的:在你的本体论中,你只知道John吃胡萝卜,这不会自动使他成为素食者(非素食者也吃胡萝卜)。
您可以使用owl:someValuesFrom而不是owl:allValuesFrom。这样,你就可以定义每个素食者都有一个吃蔬菜的人。在这种情况下,如果我们知道John吃胡萝卜,那么根据你对素食概念的定义,他会被推理者归类为素食者。
通用(allValuesFrom)和存在(someValuesFrom)限制很难理解,通常没有正确或错误的解决方案,这主要取决于您想要实现什么。
https://stackoverflow.com/questions/16022450
复制相似问题