猫头鹰本体相互(循环)依赖是否安全或合理?我之所以这么问,是因为我看到了跨域数据和推理的潜力。在我看来,可能适用于主流可执行编程语言的一些技术限制不一定适用于这里。
例如,我有两个本体:“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>
这是安全的事情吗?这是合理的期望吗?当前的实现是否支持这一点?如果任一导入不可用,我们是否应该期望本体公理的优雅降级可用?
我意识到对此有分层的解决方案,但我仍然觉得这是值得讨论的一点。