1

猫头鹰本体相互(循环)依赖是否安全或合理?我之所以这么问,是因为我看到了跨域数据和推理的潜力。在我看来,可能适用于主流可执行编程语言的一些技术限制不一定适用于这里。

例如,我有两个本体:“Stuff”和“Creature”。在“Stuff”中,我定义了一个 PhysicalObject 类,以表示继承者在空间中有一个位置。在“Creature”中,我定义了一个 Person 类,表示社会成员。

<!-- In 'Stuff' -->
<owl:Class rdf:ID="Stuff#PhysicalObject"/>

<!-- In 'Creature' -->
<owl:Class rdf:ID="Creature#Person"/>

由于单个 Person 实例在空间中占据一个位置,因此将其声明为 subClassOf PhysicalObject 似乎是合适的。这可以通过简单地在“Creature”本体中导入“Stuff”来解决。但是,我还希望在“Stuff”中有一个属性,它指的是其范围内的一个人:isHeldBy。

<!-- In 'Creature' -->
<owl:Ontology rdf:about="">
  <owl:imports rdf:resource="Stuff" />
</owl:Ontology>
<owl:Class rdf:ID="Creature#Person"
  <rdfs:subClassOf rdf:resource="Stuff#PhysicalObject" />
</owl:Class>

<!-- In 'Stuff' -->
<owl:Ontology rdf:about="">
  <owl:imports rdf:resource="Creature" />
</owl:Ontology>
<owl:ObjectProperty rdf:ID="isHeldBy"> 
  <rdfs:domain rdf:resource="Stuff#PhysicalObject"/>
  <rdfs:range rdf:resource="Creature#Person"/> 
</owl:ObjectProperty>

这是安全的事情吗?这是合理的期望吗?当前的实现是否支持这一点?如果任一导入不可用,我们是否应该期望本体公理的优雅降级可用?

我意识到对此有分层的解决方案,但我仍然觉得这是值得讨论的一点。

4

1 回答 1

2

OWL 2 规范第 3.4 节 Imports描述了导入的语义,并且不禁止循环导入。相反,语义是根据导入关系的关闭来定义的。

从美学上讲,可能需要将StuffCreature的公共元素重构为一些上层本体并让StuffCreature都导入它,但这不是技术要求。否则,虽然你有两个本体,但几乎就像你只有一个,因为任何导入其中一个的任何东西都必然会导入另一个,反之亦然。

于 2013-09-03T21:06:57.503 回答