【问题标题】:Object property instance on class?类上的对象属性实例?
【发布时间】:2015-03-26 10:49:44
【问题描述】:

比如说:

-Food(class
 -Bread(instance of Food!
-Species(class
  -Animal(class
    - Horse(class
      -Unicorn(instance

现在我需要能够设置 Bread -> eatableBy -> Horse。但是我不能对类进行对象属性断言。所以我可以将它设置为可食用并添加所有 Horse 实例,但我有很多实例,所以这有点多余。有人知道实现相同效果的有效方法吗?

例如如果我需要知道马可以吃什么,它也需要返回面包。如果我想知道独角兽可以吃的所有食物,它需要返回面包(因为它是马,所有马都吃面包)。如果我需要知道 Animal 的子类吃什么,它还必须返回 Bread。

【问题讨论】:

  • 你不想让面包成为一门课有什么特别的原因吗?
  • 嗯,它是一种特定类型的食物,并且具有数据属性和对象属性,这是一个类所没有的。

标签: rdf owl protege rdfs protege4


【解决方案1】:

如果我理解正确,您有一个 instance Bread,并希望确保 class 的每个实例都可以食用它

强>马。 OWL 有价值限制,可以让您描述与某个特定价值有某种关系的一组个体。例如,表达式

        喜欢价值披萨

是所有喜欢披萨的人的类别。 OWL 还允许您使用属性的倒数,以便表达式

        (喜欢)价值

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

        马 SubClassOf canEat value Bread

说每个类型的个体都可以吃个体面包。但是,您拥有的不是 canEat 属性,而是 eatableBy 属性。不过,这只是 canEat 的反面,因此您可以说每个 Horse 类型的个体都可以根据公理吃掉个体 Bread

        马 SubClassOf inverse(eatableBy) value Bread

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

【讨论】:

  • 感谢您的回复。我设置了子类逆规则,但是在查询 uni:Horse canEat ?y 时没有给出任何结果。还查询 uni:Bread uni:eatableBy ?y 没有结果。用 SPARQL 和 Snap SPARQL 尝试过
  • @vincentkleine 公理“Horse SubClassOf (eatableBy value Bread)”确实说 Bread 对于 Horse 的每个实例都是可吃的,推理者将能够证实这一点。所以,有几个问题: 1. 你有任何 Horse 声明的实例吗? 2. 您是否启用了推理器? 3. 您使用的 SPARQL 引擎是否包含推理器的结果?
  • 我试图查询 uni:Horse(class) uni:canEat ?y,我现在看到当我查询 uni:Unicorn(instance of horse) uni:canEat ?y 确实给出了正确的结果。要确定马或动物(马的超类)可以吃什么,我只需要查询马的实例或动物的子类的实例可以吃什么。所以谢谢你,它现在可以工作了!
  • 我要补充一点,eatableBy 可能不是对称的——我不认为面包会吃掉独角兽——Bread -> eatableBy(symmetric) -> Horse 是错字吗?
猜你喜欢
  • 2010-12-04
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多