我正在研究使用FaCT ++和一个简单的本体论对Protege 4进行OWL限制的概念。假设我有一个foo
个人Something
:
: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
)?我能使其发挥作用的唯一方法是定义range
的{{1}}:
hasBar
但是我想避免这种情况,因为它限制了:hasBar a owl:ObjectProperty;
rdfs:range :Something.
的主题(导致我进一步麻烦)。
答案 0 :(得分:2)
我认为通过实例来推理更简单,让我们考虑以下知识库:
: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
,{{1 } {是foo
,最后carrot
是x
。
现在,您要推断John
是John
(= Vegetarian
是x
)。
有意义的是,它不适用于SomethingElse
。你在这里说的是素食主义者的所有实例,如果他们有财产,他们必须有范围内的蔬菜。因此你可以推断出owl:allValuesFrom
是蔬菜,例如,假设你首先知道John是素食主义者。
在自然语言中也是有道理的:在你的本体论中,你只知道约翰吃了胡萝卜,这并不能自动使他成为素食主义者(非素食者也吃胡萝卜)。
您可以使用carrot
代替owl:someValuesFrom
。通过这种方式,您可以定义每个素食主义者都会吃一些蔬菜。在这种情况下,如果我们知道John吃了一根胡萝卜,那么根据你对素食 这个概念的定义,他会被推理者归类为素食者。
通用(owl:allValuesFrom
)和存在(allValuesFrom
)限制很难理解,通常没有正确或错误的解决方案,它主要取决于您想要实现的目标。