使用 SPARQL

问题描述

我有一个存储图表的 CSV 格式文件。它包含两列源顶点 id 和目标顶点 id。 Id 是 [0,max_vertex-1] 范围内的整数。我想把它转换成 RDF 格式的文件。我知道我们可以使用使用“CONSTRUCT”短语的 SPARQL 查询来做到这一点。 但不完全确定如何编写我的查询,因为我在这里没有主语、谓语和宾语。 如果所有边的权重相等或没有权重,只是一个简单的无向图,SPARQL 是否有助于编写查询以将 CSV 文件转换为 RDF 格式。

如果存在这样的查询,有人可以帮助我进行 SPARQL 查询吗?我对 SPARQL 了解不多。

解决方法

听起来您要开发的是数据(csv 文件)和图形(然后您可以在其上运行 SPARQL 查询)之间的中间层。您所追求的中间层通常称为三重化,这是将原始数据转换为 RDF 三元组的过程。

一种常用的方法是使用 Python 的 rdflib。作为草图,您应该将 csv 加载到 python 中并遍历每一行,在每次迭代时构建适当的三元组并将其添加到图中。

您提到的一个直接问题是您没有任何谓词——这是 RDF 数据模型的绝对要求(这是您连接节点的方式)。我建议找到一个具有适当术语的本体并使用它来连接节点,或者如果您正在探索数据,则可以像我在下面所做的那样组成您自己的术语。

一些伪代码...

import rdflib

# Create the graph object which holds the triples
graph = rdflib.Graph()

For each row in csv file:
   s = rdflib.URIRef(f'#/{row["column_1]}')
   p = rdflib.URIRef("#connectsTo")
   o = rdflib.URIRef(f'#/{row["column_2"]}')
   graph.add((s,p,o))

g.serialize(destination='graph.ttl',format='turtle')

从这里,您可以将 graph.ttl 加载到支持 RDF 的图形存储中或在其上运行单独的推理器。

为了避免与 SPARQL 混淆——它用于查询现有图; CONSTRUCT 查询采用现有图并返回新图。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...