我认为通过实际例子进行推理更简单,让我们考虑以下知识库:
: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
is eats
, Vegetarian
is SomethingElse
, Vegetable
is Something
, foo
is carrot
最后x
is John
.
现在你想推断John
is a Vegetarian
(= x
is SomethingElse
).
这是有道理的,它不能与owl:allValuesFrom
。你在这里所说的是所有素食者实例,如果他们有财产,他们必须在范围内有蔬菜。所以从中你可以推断出carrot
例如,假设您知道约翰是素食主义者,那么它就是蔬菜。
这在自然语言中也有意义:在你的本体中,你只知道约翰吃胡萝卜,这不会自动使他成为素食主义者(非素食者也吃胡萝卜)。
你可以使用owl:someValuesFrom
代替owl:allValuesFrom
。这样,您就可以定义每个素食者都有吃一些蔬菜的人。在这种情况下,如果我们知道约翰吃胡萝卜,那么根据您对概念的定义,他将被推理机归类为素食主义者素食主义者.
普遍的 (allValuesFrom
)和存在主义(someValuesFrom
)限制很难理解,通常没有正确或错误的解决方案,这主要取决于您想要实现的目标。