当前位置: 首页 > 知识库问答 >
问题:

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

孟浩然
2023-03-14

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

这个对齐的本体(超过3000个类和超过10000个ObjectProperties)包含了未使用的概念和语义上的双倍,对于新来的人来说是不可能导航的。此外,本组织希望使具体概念的使用标准化,因此双倍使用是极不可取的。因此,我们正在寻找一种方法来构造SuperAwesomeOntology,该方法包含所有已被标记(可能通过DCTerms:IsRequiredby“SuperAwesomeOntology”)的概念(以及它们与owl相关的谓词,如subClassOf、domain/range等)。结果应该是一个可以存储在单个文件中的正确的OWL-ontology。

一个限制:它必须以编程方式完成(protege的Copy/Move/Delete axioms接口不会这样做),因为如果一个引用本体得到更新,我们希望能够从其最新的引用本体再次呈现SuperAwesomeOntology,并找出是否存在任何冲突。

我们该怎么做呢?SPARQL能做到这一点吗?也欢迎对isRequiredBy标签的其他建议。

共有1个答案

夏何平
2023-03-14

如果我没有理解您的意思,您希望以编程方式从一个大的本体或本体/图集合中删除未使用的概念,并且您还希望删除通过互连识别为重复的概念/类。

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

>

  • 为您定义什么是副本。例如,owl:sameas或skos:closeMatch链接两端的节点都在核心图之外(因此您不会删除“原始”)。
  • 使用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的定向路径。这将确保您可以向上到目标本体的子类层次结构,直到例如OWL:thing但不会再次向下。问题是,您不知道目标本体中还有什么其他类型的边以及它们的方向,但现在只能使用rdfs:subclassof edges。

    如果您已经充分定义了您的“未使用的概念”,或者想用一些实验性的定义来尝试它,您可以使用一个图库或图分析应用程序,并在那里导入您的代码。

    这里是一个如何将SPARQLendpoint导入Cytoscape.js JavaScript图形可视化库的示例,它也可以在node中使用。但是,您需要大量调整代码。

    或者使用SPARQL1.1属性路径在SPARQL中再次执行此操作。问题是,它们可能会对性能产生很大的影响(甚至是复杂度太大而无法完成),特别是在应用于大量资源和不受限制的路径长度时。因此,这样的查询可能会超时,但可以尝试修改它:

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

    ?x rdfs:subclassof?x语句只是一个标识符,您希望使用的核心本体的资源指向它,没有它,我无法获得有效的查询。当我将一个graph语句应用于路径表达式时,我从Virtuoso得到一个语法错误。

  •  类似资料:
    • 在我们的数据库中,我们有一个很大的“GOD”表,它与其他表(pk/fk)有几个父/子关系,这些表与其他表有几个父/子关系,依此类推。基本上是一棵树,根植于“神”表层面。我知道这是一种常见的表格结构。 我们使用实体框架的实体映射到表。有没有一种像样的方法可以使用Linq在一个语句中选择整个记录“树”?也许是通过嵌套/链接所选内容来包含子实体/表,所以我们返回god对象及其所有相关对象?多谢了。 Up

    • 问题内容: 我有一个选择元素,其中包含多个项目。我想更改其第一项的颜色,但似乎仅在单击选择下拉菜单时才会显示颜色。我想要的是在加载页面时更改颜色(例如灰色),以便用户可以看到第一个选项的颜色是不同的。 CSS: HTML: 问题答案: 那这个呢:

    • 我如何索引列表,使我只选择四个元素中的两个?会抛出各种错误,具体取决于我在索引的方括号中放入的数据类型

    • 这似乎不起作用:没有console.log,控制台中只有一个错误,显示 我是否可以通过这个文件进行搜索,尽管它很大,而且不用花太多时间? 我也有联机托管的文件的url(https://s3.amazonaws.com/openrecipes/20170107-061401-recipeItems.json.gz),但我似乎无法连接到它(CORS关于没有允许我的头的错误)。

    • 问题内容: 假设我有一个包含A列,B列和C列的表。如何编写查询以选择A列或B列或C列等于某个值的所有行?谢谢。 更新: 我想忘记提及我的困惑了。假设还有另一列(第1列),我需要根据以下逻辑进行选择: …其中Column1 =’..’AND(ColumnA =’..’OR ColumnB =’..’OR ColumnC =’..’) 像我上面用括号所做的那样对语句进行分组以获得所需的逻辑有效吗? 问