通过 RDFLib-SQLAlchemy 将 RDF 数据加载到 PostgreSQL 表

Bea*_*ind 3 postgresql sqlalchemy sparql rdflib flask-sqlalchemy

我有一个 NT 格式的大型 RDF 数据集(Geonames 数据集:18GB)。我想通过使用将其加载到 PostgreSQL 关系表中rdflib_sqlalchemy.SQLAlchemy。我知道这是可行的(对存储在关系数据库中的 rdf 数据执行 sparql 查询)。但是,我不确定如何。你能给我举个例子吗?

我的下一个目标是使用 RDFLib 从 python 编写 SPARQL 查询。我知道该怎么做。在此先感谢您的帮助。

F1r*_*fly 5

安装这些 Python 库:

pip install rdflib
pip install rdflib-sqlalchemy
pip install psycopg2
Run Code Online (Sandbox Code Playgroud)

运行以下 Python 代码:

from rdflib import plugin
from rdflib.graph import Graph
from rdflib.store import Store
from rdflib_sqlalchemy import registerplugins

registerplugins()

SQLALCHEMY_URL ="postgresql+psycopg2://user:password@hostname:port/databasename"

store = plugin.get("SQLAlchemy", Store)(identifier="my_store")
graph = Graph(store, identifier="my_graph")
graph.open(SQLALCHEMY_URL, create=True)

graph.parse("demo.nt", format="nt")

result = graph.query("select * where {?s ?p ?o} limit 10")

for subject, predicate, object_ in result:
    print(subject, predicate, object_)

graph.close()
Run Code Online (Sandbox Code Playgroud)

“demo.nt”是要导入的 N-Triples 文件。我用它来测试:

<http://example.org/a> <http://example.org/b> <http://example.org/c> .
Run Code Online (Sandbox Code Playgroud)

成功导入后,您的数据库包含五个填充了三元组的表(例如,kb_[some_id]_asserted_statements)。控制台最多打印了十个三元组。

在 Windows 10、PostgreSQL 10.5、Python 3.5.4(全部 64 位)和 rdflib-4.2.2、rdflib-sqlalchemy-0.3.8 和 psycopg2-2.7.5 上测试。