如何从多个对齐的参考本体中选择一个巨大的本体?

时间:2018-09-25 12:54:03

标签: sparql owl ontology protege

我的组织对信息的要求涵盖了多个信息领域。为了捕捉到这一点,我们正在建立一个大型组织本体,在其中我们对齐多个领域特定的参考本体/词汇(例如都柏林核心,geosparql,行业特定的信息模型等),并在必要时在“扩展”中添加概念本体(然后也与参考本体保持一致)。

这个对齐的本体的总数(> 3000个类和> 10000个ObjectProperties)包含未使用的概念和语义双精度,对于新来者来说是无法导航的。此外,该组织还希望标准化特定概念的使用,因此,双打是非常不可取的。因此,我们正在寻找一种构建SuperAwesomeOntology的方法,该方法包含已标记(可能通过诸如dcterms:isRequiredBy“ SuperAwesomeOntology”之类的东西)的所有概念(及其与猫头鹰相关的谓词,例如subClassOf,域/范围等)。结果应该是可以存储在单个文件中的正确的OWL本体。

一个约束:必须以编程方式完成(protege的复制/移动/删除公理接口不会做),因为如果其中一个参考本体得到更新,我们希望能够再次从中渲染SuperAwesomeOntology它的最新参考本体,并找出是否存在任何冲突。

我们将如何处理? SPARQL可以这样做吗?也欢迎使用isRequiredBy标签的替代建议。

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您希望以编程方式从大型本体或本体/图形集合中删除未使用的概念,并且还希望通过互连删除被标识为重复的概念/类。

已识别的重复项很容易删除:

  1. 为您定义什么重复项。例如,位于核心图之外的owl:sameAs或skos:closeMatch链接的任一端的节点(因此,不要删除“原始”)。
  2. 使用SPARQL查询构造新图:

    construct {?s ?p ?o.}
    {
     ?s ?p ?o.
     filter not exists {graph ?g {?s owl:sameAs ?x.} filter(?g!=<http://my.core.graph>)}
     filter not exists {graph ?g {?o owl:sameAs ?x.} filter(?g!=<http://my.core.graph>)}
    }
    

    我测试了此查询的语法和性能,但未测试其正确性。

未使用的概念更难删除:

首先,再次需要定义“未使用”对您的含义。但是,此条件肯定会涉及组合图中的可达性或“连接性”,在这里您只想选择包含核心本体的图组件。问题是,如果将三元组视为无方向的边,则可能会得到一个连接的图(这只是一个组件,没有要删除的节点),因为类型层次结构经常将所有内容连接在一起。您可以考虑边缘的方向,即仅包含资源Y,其中存在从核心本体中的任何资源X到Y的定向路径。 这将确保您可以提升目标本体的子类层次结构,直到例如猫头鹰:有事但又不下来。问题是您不知道目标本体中还有其他类型的边缘以及它们沿哪个方向前进,但是您现在只能使用rdfs:subClassOf边缘。

如果您已经充分定义了“未使用的概念”,或者想通过实验性定义尝试使用它,则可以使用图形库或图形分析应用程序,然后将代码导入其中。

Here is an example,介绍如何将SPARQL端点导入Cytoscape.js JavaScript图形可视化库,它也可以在节点中使用。但是,您需要大量修改代码。

或者您可以使用SPARQL 1.1属性路径在SPARQL中再次进行操作。 问题在于,这些问题可能会对性能产生很大的影响(或什至过于复杂以至于无法完成),尤其是在应用于大量资源且路径长度不受限制的情况下。因此,诸如此类的查询可能会超时,但可以尝试对其进行调整:

construct {?s ?p ?o.}
{
 {?s ?p ?o.}
 graph <http://my.core.graph> {?x rdfs:subClassOf ?X.}
 {?x (<>|!<>)* ?s.}
}

?x rdfs:subClassOf ?X语句只是一个标识符,您要使用它的核心本体资源要使用一个源点,没有它,我将无法获得有效的查询。当我在路径表达式上应用图语句时,我从Virtuoso收到语法错误。