ontology - 猫头鹰本体相互(循环)依赖是否安全或合理?

标签 ontology owl circular-dependency

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

例如,我有两个本体:“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描述导入的语义,并且不禁止循环导入。相反,语义是根据导入关系的闭包来定义的。

从美学角度来看,可能需要将StuffCreature的共同元素重构为某种上层本体,并同时具有Stuff>生物导入它,但这不是技术要求。否则,尽管您有两个本体,但几乎就像只有一个本体一样,因为导入其中一个本体的任何内容都必然会导入另一个本体,反之亦然。

关于ontology - 猫头鹰本体相互(循环)依赖是否安全或合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18601012/

相关文章:

typescript - 为什么命名函数的处理方式与循环依赖中的箭头函数不同?

rdf - 如何设计本体?

java - 使用 jena fusioni 服务器查询 rdf 文件时出现异常

php - 在 PHP 中使用 OWL 作为 mysql

java - 导入具有相同IRI的本体

bash - 打印包依赖树

c++ - 模板特化中参数包的大小

sparql - 如何从本体中检索信息?

rdf - 使用数值数据的表达式定义 Protege 类

logic - 巴拉克不喜欢唐纳德喜欢的任何东西