猫头鹰本体相互(循环)依赖是否安全或合理?我问这个问题是因为我看到了跨域数据和推理的潜力。在我看来,一些可能适用于主流可执行编程语言的技术限制不一定适用于此。
例如,我有两个本体:“Stuff”和“Creature”。在“Stuff”中,我定义了一个PhysicalObject 类,以表示继承者在空间中具有一个位置。在“Creature”中,我定义了一个 Person 类,表示社会的成员。
<!-- In 'Stuff' -->
<owl:Class rdf:ID="Stuff#PhysicalObject"/>
<!-- In 'Creature' -->
<owl:Class rdf:ID="Creature#Person"/>
由于单个 Person 实例在空间中占据一个位置,因此将其声明为 PhysicalObject 的 subClassOf 似乎是合适的。这可以通过简单地在“生物”本体中导入“东西”来解决。不过,我还想在“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>
这样做安全吗?这是合理的预期吗?当前的实现是否支持这一点?如果任一导入不可用,我们是否应该期望本体公理的优雅降级可用?
我意识到这个问题有分层的解决方案,但我仍然觉得这是一个值得讨论的点。
最佳答案
OWL 2 规范 section 3.4 Imports描述导入的语义,并且不禁止循环导入。相反,语义是根据导入关系的闭包来定义的。
从美学角度来看,可能需要将Stuff和Creature的共同元素重构为某种上层本体,并同时具有Stuff和>生物导入它,但这不是技术要求。否则,尽管您有两个本体,但几乎就像只有一个本体一样,因为导入其中一个本体的任何内容都必然会导入另一个本体,反之亦然。
关于ontology - 猫头鹰本体相互(循环)依赖是否安全或合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18601012/