猫头鹰本体是否相互(循环)依赖是安全还是合理?我问这个是因为我看到了跨域数据和推理的潜力。在我看来,主流可执行编程语言中可能存在的一些技术限制并不一定适用于此。
例如,我有两个本体:'Stuff'和'Creature'。在'Stuff'中我定义了一个PhysicalObject类,表示继承者在空间中有一个位置。在'生物'中我定义了一个人类,表示社会成员。
<!-- In 'Stuff' -->
<owl:Class rdf:ID="Stuff#PhysicalObject"/>
<!-- In 'Creature' -->
<owl:Class rdf:ID="Creature#Person"/>
作为一个单独的Person实例占据空间中的位置,将它声明为subClassOf PhysicalObject似乎是合适的。这可以通过简单地在'Creature'本体中导入'Stuff'来解决。但是我也希望在'Stuff'中有一个属性,引用其范围内的Person: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>
这是安全的吗?期待是否合理?这是否受当前实施的支持?如果导入不可用,我们是否应该期望优化降低本体公理?
我意识到这有分层的解决方案,但我仍然觉得这是值得讨论的一点。
答案 0 :(得分:2)
OWL 2规范section 3.4 Imports描述了导入的语义,并不禁止循环导入。相反,语义是根据进口关系的结束来定义的。
在美学上,可能需要将 Stuff 和 Creature 的常用元素重构为一些上层本体并同时具有 Stuff 和生物导入它,但这不是技术要求。否则,虽然你有两个本体,但它几乎就像你只有一个,因为任何进口其中一个的东西都必然导入另一个,反之亦然。