OWL属性域和范围继承语义



事实上,除了类分类法成员之间的限制继承之外,当存在子分类时,我会对域和范围语义感到困惑。请参阅以下案例。

让我们考虑

(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和Hermit(佩莱和耶娜都没有)没有推断出这一点?


让我们考虑

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

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

(3) hasAudiCar Range Car

第二个问题:这个结论正确吗?为什么Protege 5和Hermit(佩莱和耶娜都没有)没有推断出这一点?


让我们考虑

(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和Hermit(佩莱和耶娜都没有)没有推断出这一点?

更新

将Jena与规范OntModelSpec.OWL_DL_MEM_RULE_INF一起使用,得到了我预期的结果!然而,将耶拿与佩莱一起使用并没有,无论是将普罗泰格与隐士还是佩莱都没有!

第一个答案:是的,它没有在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辆奥迪的驾驶员分类为AudiCarDrivers

请参阅此处的猫头鹰语言参考http://www.w3.org/TR/owl-ref/
如果这仍然让您感到困惑。希望我能帮上忙:)

最新更新