0

实际上,除了类分类成员之间的限制继承之外,当存在 subsummption 时,我迷失了域和范围语义。请看以下案例。

让我们考虑一下

(1) hasCar Domain driver
(2) driver subClassOf human

那么,我们能不能推断出

hasCar Domain human

让我们看看hasCar (x, y)x 是什么

从 (1):driver(x) 从 (2):human(x)

那么:无论如何x,如果hasCar(x, y)=> driver (x)=>

(3) hasCar Domain human

第一个问题:这个结论正确吗?为什么 Protege 5 with Hermit(Pellet 也没有,甚至 Jena 和一些推理者都没有)推断出这一点?


让我们考虑一下

(1) hasAudiCar Range AudiCar 
(2) AudiCar subClassOf Car

以类似的方式,我们可以推断

(3) hasAudiCar Range Car

第二个问题:这个结论正确吗?为什么 Protege 5 with Hermit(Pellet 也没有,甚至 Jena 和一些推理者都没有)推断出这一点?


让我们考虑一下

(1) hasAudiCar Domain driver 
(2) hasAudiCar Range audiCar
(3) driver hasAudiCar min 1 audiCar
(4) audiCar subClassOf car

那么,我们可以推断

driver hasAudiCar min 1 car

第三个问题:这个结论正确吗?为什么 Protege 5 with Hermit(Pellet 也没有,甚至 Jena 和一些推理者都没有)推断出这一点?

更新

将 Jena 与规范一起使用OntModelSpec.OWL_DL_MEM_RULE_INF会产生我预期的结果!但是,将 Jena 与 Pellet 一起使用不会,Protege 与 Hermit 或 Pellet 一起使用都不会!

4

1 回答 1

1

第一个答案:是的,它没有在 Protege 中明确显示。(来源:在 protege 中运行此示例,在 Apache Jena 中使用颗粒运行类似的实验)

第二个答案:不,我们无法推断这一点。您可以将子类视为类似于子集。因此,超类的属性适用于子类,而不是相反。你有非常明确的定义

(1) hasAudiCar Range AudiCar 
(2) AudiCar subClassOf Car

因此我们知道这AudiCar是 Car 的一个子集,并且该属性hasAudiCar只适用于这个子集。因此我们不能说hasAudiCar Range Car

第三个答案:不,这又是和以前一样的逻辑谬误。如果要指定driver hasAudiCar min 1 car则必须在相应的超类上定义该属性humancar
hasAudiCar Domain Human
hasAudiCar Range Car

附加信息:很少想要推断类限制,实际上更有利的是直接指定它们以便它们可以驱动推理。例如,您可以将一个类定义AudiCarDriver为等价于Driver and hasAudiCar min 1 AudiCar因此将所有具有至少 1 个 audi 的驱动程序分类为AudiCarDrivers

如果这仍然让您感到困惑,请参阅此处的 owl 语言参考http://www.w3.org/TR/owl-ref/ 。
希望我有所帮助:)

于 2015-08-27T10:37:21.590 回答