0

我正在处理使用 Protégé 生成的 OWL 文件。我在我的 Java 代码中使用 OWL API。我有一组定义的类,例如:

SpeciesA ⊑ Species ⊓ ∃hasPart.Fruit ⊓ =hasShape.round SpeciesA
是子类 Species,hasPart 一些 Fruit,hasShape 值为 Round。

这一切都在 Protégé 中定义,然后导出到 OWL,然后加载到我的 Java 本体中。如果我创建一个物种的个体 x 并且我拥有这些属性

  • hasPart(x,FruitA)
  • 有形状(x,圆形)

我检索我的个人所属的每个类(在这种情况下,这应该包括 SpeciesA)。

我完全不确定我应该使用什么:我可以使用 SWRL Species(?x)^hasPart(?x,Fruit)^hasShape(?x,"$Round$") 还是应该使用 Reasoner ?

我真的对Protégé“等同于”和个人财产感到困惑。

4

1 回答 1

1

一般来说,如果您没有断言某个个体 x 属于某个类,那么您将需要一个推理器来为您推断(假设它来自您拥有的其他一些数据)。无论推理是基于 OWL 公理还是 SWRL 规则,这都适用。(当然,在 SWRL 规则的情况下,您需要一个支持 SWRL 规则的推理器,例如 Pellet 或 HermiT。)在您描述的情况下,您已经说过

SpeciesA ⊑ Species ⊓ ∃hasPart.Fruit ⊓ =hasShape.round

这意味着每个作为 SpeciesA 的东西都是一个物种,都有一些水果作为一部分,并且具有圆形的形状。然而,它并没有说一切都是物种,有一些水果作为一部分,并且具有圆形的形状是物种A。看看在一阶逻辑中这将是什么可能会有所帮助:

∀x[ SpeciesA(x) → ( Species(x) ∧ ∃y[ hasPart(x,y) ] ∧ hasShape(x,round) ) ]

请注意,条件仅从左到右。如果你还想说满足右边条件的所有东西都是左边概念的一个实例,那么你可能想要一个等价:

∀x[ SpeciesA(x) ↔ ( Species(x) ∧ ∃y[ hasPart(x,y) ] ∧ hasShape(x,round) ) ]

在 OWL 中,这将是

SpeciesA ≡ Species ⊓ ∃hasPart.Fruit ⊓ =hasShape.round

也就是说,SpeciesA 是另一个类的等价类。但是,您仍然需要一个推理器来推断具有这些条件的东西是 SpeciesA。

于 2014-05-12T18:04:09.180 回答