Rdf 类上的对象属性实例?

Rdf 类上的对象属性实例?,rdf,owl,protege,rdfs,protege4,Rdf,Owl,Protege,Rdfs,Protege4,比如说: -Food(class -Bread(instance of Food! -Species(class -Animal(class - Horse(class -Unicorn(instance 现在,我需要能够设置面包->吃的人->马。但是我不能对类进行对象属性断言。所以我可以将它设置为可吃的,并添加所有的马的实例,但是我有很多实例,所以这有点多余。有人知道一种有效的方法来达到同样的效果吗 如果我需要知道马能吃什么,它还需要归还面包。如果我想知道一只独角兽

比如说:

-Food(class
 -Bread(instance of Food!
-Species(class
  -Animal(class
    - Horse(class
      -Unicorn(instance
现在,我需要能够设置面包->吃的人->马。但是我不能对类进行对象属性断言。所以我可以将它设置为可吃的,并添加所有的马的实例,但是我有很多实例,所以这有点多余。有人知道一种有效的方法来达到同样的效果吗


如果我需要知道马能吃什么,它还需要归还面包。如果我想知道一只独角兽能吃的所有食物,它需要归还面包(因为它是一匹马,所有的马都吃面包)。如果我需要知道动物的子类吃什么,它还必须返回面包。

如果我理解正确,您有一个实例面包,希望确保类的每个实例都可以吃。OWL具有值限制,允许您描述与特定值存在某种关系的一组个体。例如,表达式

喜欢价值比萨饼

是所有喜欢比萨饼的人的班级。OWL还允许您使用属性的倒数,以便

(喜欢)

是乔喜欢的所有事物中的一类。这些类表达式可用于公理,包括子类公理。特别是,你可以这么说

子类canEat价值面包

也就是说,每一个类型的个体都可以吃这个个体的面包。但是,您拥有的不是canEat属性,而是eatableBy属性。这与canEat正好相反,所以你可以说,每一个类型的个体都可以吃面包,这是一个公理:

子类(可食者)面包

在Protégé中,这看起来像:


你不想让面包成为一个类有什么具体原因吗?面包是一种特殊类型的食物,它有数据属性和对象属性,而这是一个类所不能拥有的。谢谢你的回答。我设置了子类反转规则,但当查询uni:Horse canEat?y时,不会给出任何结果。同样,查询uni:Bread uni:eatableBy?y也不会给出任何结果。使用SPARQL和Snap进行了尝试SPARQL@vincentkleine“Horse Subassof(eatableBy value Bread)”这句公理确实说,面包在马的每一个实例中都是可以吃的,推理者将能够证实这一点。所以,有几个问题:1。你们有任何马的例子吗?2.您是否启用了推理机?3.您正在使用的SPARQL引擎是否包含推理机的结果?我试图查询uni:Horse(class)uni:canEat?y,现在我看到当我查询uni:Unicorn(Horse的实例)uni:canEat?y时,确实给出了正确的结果。要确定马或动物(马的超类)可以吃什么,我只需要查询马的实例或动物的子类的实例可以吃什么。所以,谢谢你,它现在起作用了!我想补充一个事实,eatableBy可能不是对称的——我不认为面包会吃独角兽——是不是
面包->eatableBy(对称)->马
打字错误?