如何将CSV列存储的时间序列数据关联到RDF图谱无需导入全量数据
方案说明
你要实现的需求完全可以通过W3C CSVW标准结合现有本体完成,不需要将原始时序数据导入三元组存储,核心只操作元数据即可,步骤如下:
- 第一步:完善CSVW元数据的列唯一标识
你当前的JSON-LD元数据中列的@id是相对标识,建议修改为和你本体同命名空间的全局绝对URI,比如:
{ "columns":[ { "titles":"Time", "@id":"http://www.semanticweb.org/example#col_exp1_time", "@type":"Column" }, { "titles":"Force", "@id":"http://www.semanticweb.org/example#col_exp1_force", "@type":"Column" } ] }
保证每个列的元数据在三元组中是可唯一寻址的实体。
- 第二步:导入CSVW元数据到三元组存储
CSVW的JSON-LD本身就是合法的RDF格式,你可以直接用任意JSON-LD处理工具将其转换为TTL/NT等格式,导入你的三元组存储即可。这个过程仅导入文件编码、分隔符、行偏移、列定义等元数据,完全不会涉及CSV中的原始时序数据,符合你的存储要求。 - 第三步:关联本体个体与列元数据
直接使用你已经定义的:hasDataReference对象属性添加关联三元组即可:
@prefix : <http://www.semanticweb.org/example#> . :T1 :hasDataReference :col_exp1_time . :F1 :hasDataReference :col_exp1_force .
关联完成后,用户可以直接通过SPARQL查询从个体出发,沿着关联路径拿到列的全部元信息:包括所属CSV的访问地址、列名、文件编码、需要跳过的行数等,拿到这些信息后即可自行编写脚本提取对应列的原始数据,不需要三元组存储原始数据。
扩展优化
如果你需要进一步提升文件的可发现性,确实可以结合DCAT本体:为每个CSV文件创建DCAT Distribution实体,关联到CSVW的Table实体,补充文件的下载地址、访问权限、更新时间、数据 licence等信息,用户可以顺着列→表→文件分发地址的路径,直接获取到原始CSV文件。
如果需要实现更便捷的访问,也可以对接支持CSVW的SPARQL联邦查询引擎,用户在写SPARQL查询需要原始数据时,引擎会自动根据元数据拉取CSV、解析对应列的值返回,全程不需要提前将原始数据导入三元组。
内容的提问来源于stack exchange,提问作者Felix Z.
相关产品推荐
相关产品推荐

