微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 SPARQL

如何解决在 SPARQL

以下 SPARQL 查询

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-Syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix skos: <http://www.w3.org/2004/02/skos/core#>
prefix msc: <http://msc.org/resources/MSC/msc2020/>

construct {?s skos:broader msc:00-XX . }
where
{
?s a skos:Concept ; skos:notation ?notation.
filter regex (?notation,"00-\d\d")
}

搜索所有符号 00-01、00-02 等,并构建与顶级类 00-XX 的关系。但是,这只是 63 个顶级类中的第一个,所以我想自动“循环”所有顶级类。最重要的是,我想将此适应其他模式。有没有办法用 SPARQL 做到这一点?如果没有,您会推荐什么?

解决方法

与此同时,我们找到了一个没有 SPARQL 的解决方案。 SPARQL CONSTRUCT 查询应该在 skos:Concept 与诸如“00-01”之类的符号(以及所有其他带有 00-\d\d 符号的概念)及其适当的从属概念之间创建一个 skos:broader 关系,对于 00 -01 是 skos:Concept,符号为 00-XX。

数据源自表,Open Refine 创建 skos:broader 语句比使用上面建议的 SPARQL 查询并将其调整为其他符号模式要快得多。

我们在带有符号的单元格上使用 GREL 的 value.replace 来创建一个新列:

value.replace(/-\d\d/,"-XX").replace(/\d\d>/,"xx>")

这两个替换让我们一步得到原始符号的上级概念的符号。第二个替换已经适应了问题中提到的其他模式(例如 00A01)。 使用原始符号和新列中的值,我们可以通过连接文本和两列中的值轻松创建 skos:broader 三元组。然后可以从 OpenRefine 导出这些内容,然后将其复制粘贴到我们的 SKOS 词汇表中。

,

这是基于问题中的查询的 SPARQL 答案。需要使用过滤器和正则表达式(正如 Yahalnaut 在上面对 UninforomedUser 的回复中所建议的那样)。基于两个概念的符号创建 skos:broader 关系要求它们在 - 之前具有相同的数字序列。比较应该只在符号的第一部分之间进行,因此每个 00- 应该匹配另一个 00- 而不是 01-。正如所问的,下面的解决方案仅将词汇表的 topConcepts 视为 skos:broader 的潜在对象。这些概念也不应该与它们本身相关,因此是最后一个过滤器。这也应该适用于其他模式。根据概念的数量和可用于查询的内存,这可能会持续一段时间甚至在完成之前停止。不过它省去了很多努力。

PREFIX owl: <http://www.w3.org/2002/07/owl#> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
prefix skos: <http://www.w3.org/2004/02/skos/core#> 
prefix msc: <http://msc.org/resources/MSC/msc2020/>  


construct {?s skos:broader ?y . } 
where { 
?s a skos:Concept ; skos:notation ?notation. 
?y skos:topConceptOf msc: ; skos:notation ?not2. 
bind (REPLACE (?not2,"-XX","") as ?1)
bind  (REPLACE (?notation,"-\d\d","" ) as ?2 )
filter (?1 = ?2)
filter (?not2 != ?notation)
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?