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

时间:2017-02-08 14:55:17

标签: semantic-web owl ontology protege

假设我们有owl:Class Personowl:Class Fruit。除此之外,我们还有owl:ObjectProperty loves(域名:人物,范围:水果)。这两个类都有几个实例。

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

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

2 个答案:

答案 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
] .