我使用的事实++和琐碎的本体论研究的OWL限制的概念与门徒4。 假设我有一个单独的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
的hasBar
定义:
:hasBar a owl:ObjectProperty;
rdfs:range :Something.
但我想避免这种情况,因为它穿什么都可以的主题约束hasBar
(这使我进一步的麻烦)。
我认为这是简单的道理在现实的例子,让我们考虑一下下面的知识库:
: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
是John
。
现在你想推断, John
是个Vegetarian
(= x
是SomethingElse
)。
这是有道理的,它不与工作owl:allValuesFrom
。 你所想说的是, 素食的所有实例,如果他们有一个属性,他们必须在范围内蔬菜。 所以从这一点,你可以推断出, carrot
是例如蔬菜,假设你就会知道,约翰是摆在首位素食主义者。
这使得在自然语言太感:在你的本体,你只知道约翰吃胡萝卜,这不会自动使他成为一个素食主义者(非素食的人也吃胡萝卜)。
你可以使用一个owl:someValuesFrom
,而不是owl:allValuesFrom
。 这样一来,你就定义每一个素食主义者有别人,吃一些蔬菜。 在这种情况下,如果我们知道约翰吃胡萝卜,因此他将被推理分为素食主义者,根据您的概念素食的定义。
通用( allValuesFrom
)和存在( someValuesFrom
)的限制是复杂的理解,往往会有不正确或错误的解决方案,它主要取决于你想要达到的目标。