我想设计一个始终只在同一级别的类之间链接的对象属性。例如,
我想将属性isCounterPartOf
限制为属于同一上层类的兄弟节点的弧,例如
house isCounterPartOf cars
bad isCounterPartOf good
slow isCounterPartOf fast
并且属性不应该在不同级别的类(具有不同祖先的类)之间链接,例如
cars isCounterPartOf bad
cars isCounterPartOf object
cars isCounterPartOf Entity
有没有办法只定义一个属性?
答案 0 :(得分:3)
假设您的目标是:isCounterPartOf
链接两个人,而其中一个是例如:Bad
,然后另一个应归类为:Good
,您不需要定义:isCounterPartOf
的域和范围,只需它owl:SymmetricProperty
。您只需要定义类,:Bad
等同于:isCounterPartOf some :Good
和:Good
等同于:isCounterPartOf some :Bad
,并且分别定义所有“对”类。
然后是:
:A :isCounterPartOf :B
:C :isCounterPartOf :B
:A a :Slow
:C a :Bad
然后:B
将被归类为:Fast
和:Good
。
澄清(根据评论)
在上面的例子中,
1. :isCouterPartOf
是对称的对象属性:
:isCounterPartOf rdf:type owl:ObjectProperty ,
owl:SymmetricProperty .
:Good
,:Bad
,:Slow
和:Fast
是OWL类,其中:
(不知道为什么代码格式不起作用)
:错误的rdf:类型owl:Class; owl:equivalentClass [rdf:type owl:Restriction; owl:onProperty:isCounterPartOf; 猫头鹰:someValues来自:好 ]。
:快速rdf:类型owl:Class; owl:equivalentClass [rdf:type owl:Restriction; owl:onProperty:isCounterPartOf; 猫头鹰:someValuesFrom:慢 ]。
:好rdf:类型owl:Class; owl:equivalentClass [rdf:type owl:Restriction; owl:onProperty:isCounterPartOf; 猫头鹰:someValuesFrom:不好 ]。
:慢速rdf:输入owl:Class; owl:equivalentClass [rdf:type owl:Restriction; owl:onProperty:isCounterPartOf; 猫头鹰:someValuesFrom:快 ]。
:A
,:B
和:C
是个人,为此声明:
(再次,不知道为什么代码格式不起作用)
:一个rdf:type owl:NamedIndividual, :慢;
:isCounterPartOf:B。
:B rdf:type owl:NamedIndividual, 猫头鹰:事情。
:C rdf:type owl:NamedIndividual,
:坏;
:isCounterPartOf:B。
根据这些断言,当您运行推理器时,您将遇到以下情况:
:A rdf:type owl:NamedIndividual ,
:Bad , #inferred
:Slow ;
:isCounterPartOf :B .
:B rdf:type owl:NamedIndividual ,
:Fast , #inferred
:Good , #inferred
owl:Thing ;
:isCounterPartOf :A , #inferred
:C . #inferred
:C rdf:type owl:NamedIndividual ,
:Bad ,
:Slow ; #inferred
:isCounterPartOf :B .