假设我们有owl:Class Person
和owl:Class Fruit
。除此之外,我们还有owl:ObjectProperty loves
(域名:人物,范围:水果)。这两个类都有几个实例。
是否有可能在OWL中表达类Person的一个特定实例喜欢除苹果(Fruit的实例)之外的所有水果,而无需手动定义该人与所有其他Fruit实例之间的所有爱情关系(除了苹果)?
在更抽象的层面上:是否可以定义实例和一系列实例之间的关系(在类级别或实例本身)?
答案 0 :(得分:2)
OneOf限制用于您所描述的内容。要从类中排除一个实例(对于问题的第一部分),您可以将水果类与OneOf(Apple)的否定相交,并使用它来声明您的苹果仇恨为您的爱情属性设置范围断言
答案 1 :(得分:1)
问题的解决方案取决于“apple”是“fruit”的实例还是“apple”是“fruit”的子类。说“苹果”是一个类是更有意义的,因为有许多苹果实例。但是,由于Ignazio提出了一个解决方案,其中“apple”是一个实例,并且他的答案被接受了,我将首先假设“apple”是一个实例。然后你就可以实现你想要的目标:
:Fruit a owl:Class .
:apple a :Fruit .
:Person a owl:Class .
:bob a :Person .
:loves a owl:ObjectProperty .
[ a owl:Class;
owl:intersectionOf (
:Fruit
[ a owl:Class; owl:complementOf [a owl:Class; owl:oneOf (:apple)] ]
)
] rdfs:subClassOf [
a owl:Restriction;
owl:onProperty [ owl:inverseOf :loves ];
owl:hasValue :bob
] .
这说明:Fruit
所有内容都是:apple
所必需的:bob
(假设:bob
是不喜欢的人的标识符请注意,这与Ignazio的解决方案不同,后者并不完全模仿OP想要的内容。
现在,如果有一类苹果,那么解决方案将是:
:Fruit a owl:Class .
:Apple rdfs:subClassOf :Fruit .
:Person a owl:Class .
:bob a :Person .
:loves a owl:ObjectProperty .
[ a owl:Class;
owl:intersectionOf (
:Fruit
[ a owl:Class; owl:complementOf :Apple ]
)
] rdfs:subClassOf [
a owl:Restriction;
owl:onProperty [ owl:inverseOf :loves ];
owl:hasValue :bob
] .