OWL: 是否可以预先定义一个个体与一系列个体之间的关系?

OWL: Is it possible to predefine relations between an individual and a range of individuals?

假设我们有 owl:Class Personowl:Class Fruit。除此之外,我们还有 owl:ObjectProperty loves(域:人,范围:水果)。 classes.

都有几个实例

是否可以在 OWL 中表达 class Person 的一个特定实例喜欢除苹果以外的所有水果(Fruit 的实例),而无需手动定义两者之间的所有爱情关系那个人和所有其他 Fruit 实例(苹果除外)?

在更抽象的层面上:是否可以定义一个实例与一系列实例之间的关系(在 class 级别或实例本身)?

OneOf 限制用于您所描述的内容。要从 class 中排除一个实例(对于问题的第一部分),您可以将水果 class 与 OneOf(Apple) 的否定相交,并使用它来声明您的苹果仇恨者具有为你的爱输入范围断言 属性.

您的问题的解决方案取决于 "apple" 是 "fruit" 的实例还是 "apple" 是 "fruit" 的子 class。说 "apple" 是 class 更有意义,因为有很多苹果实例。但是由于 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 的解决方案不同,Ignazio 的解决方案并不完全符合 OP 的要求。

现在,如果有 class 个苹果,那么解决方案是:

: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
] .