如何选择一个巨大的本体,由几个对齐的参考本体构建?

问题描述 投票:4回答:1

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

这个对齐的本体(> 3000个类和> 10000个ObjectProperties)的总体包含未使用的概念和语义双精度,并且对于新手来说是不可能导航的。此外,该组织希望标准化特定概念的使用,因此双重是非常不希望的。因此,我们正在寻找一种构建SuperAwesomeOntology的方法,该方法包含已经标记的所有概念(以及它们的owl相关谓词,如subClassOf,domain / range等)(可能类似于dcterms:isRequiredBy“SuperAwesomeOntology”)。结果应该是一个正确的OWL本体,可以存储在一个文件中。

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

我们怎么样呢? SPARQL可以做到这一点,怎么样?对于isRequiredBy标签的替代建议也是受欢迎的。

sparql owl ontology protege
1个回答
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收到语法错误。

© www.soinside.com 2019 - 2024. All rights reserved.