OWL: 是否可以预先定义一个个体与一系列个体之间的关系?
OWL: Is it possible to predefine relations between an individual and a range of individuals?
假设我们有 owl:Class Person
和 owl: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
] .
假设我们有 owl:Class Person
和 owl: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
] .