如何使用python中的RDFlib将RDF数据存储到Fuseki SPARQL端点中的三元组存储



新问题:

我首先启动 Fuseki 服务器来创建一个名为"address_act"的新数据集:

fuseki-server --update --mem /address_act

以下是获取每个地址的数据,然后将其添加到 Fuseki 服务器中的 Triplestore(数据库(的代码:

import requests
import pandas as pd
import numpy as np
import re
from rdflib import Graph, Literal, URIRef
from rdflib.plugins.stores import sparqlstore
query_endpoint = 'http://localhost:3030/address_act/query'
update_endpoint = 'http://localhost:3030/address_act/update'
store = sparqlstore.SPARQLUpdateStore()
store.open((query_endpoint, update_endpoint))
g = Graph(identifier = URIRef('http://www.example.com'))
for i in range(1,3):
results = []
url = 'http://gnafld.net/address/?per_page=10&page=' + str(i)
page = requests.get(url)
response = requests.get(url)
response.raise_for_status()
results = re.findall('"Address ID: (GAACT[0-9]+)"', response.text)
for ad in results:
ad_url = 'http://gnafld.net/address/' + ad
ad_info = requests.get(ad_url).content
g.parse(data=ad_info, format='turtle')
store.add_graph(g)

代码似乎有效,但是当我浏览 http://localhost:3030/dataset.html?tab=info&ds=/address_act 时,它总是显示图形中 graph.no 三元组中有 0 个三元组,我想知道它是否成功地将三元组插入数据集。如果是,那么我在哪里可以找到这些三元组?如果没有,如何将三元组添加到默认图形中?任何帮助都非常感谢。

如果你像这样启动 fuseki:

$ fuseki-server --update --mem /ds

然后,您可以使用以下方法在本地访问它:

from rdflib import Graph, Literal, URIRef
from rdflib.plugins.stores import sparqlstore
query_endpoint = 'http://localhost:3030/ds/query'
update_endpoint = 'http://localhost:3030/ds/update'
store = sparqlstore.SPARQLUpdateStore()
store.open((query_endpoint, update_endpoint))
...use store...
store.add_graph(graph)
store.remove_graph(graph)
store.query(...)

(ds是富塞基数据集的名称(

看起来您有一个格式的文件,因此:

g = Graph(identifier = URIRef('http://www.example.com/'))
g.parse(data=r, format='turtle')
store.add_graph(g)

总结

我花了一段时间才弄清楚这一点,但最后,在这篇文章的帮助下,我找到了一个解决方案:

要将数据加载到默认图表中,您可以使用魔术 urlRDFlib 提供的默认图形如下所示:

from rdflib.graph import DATASET_DEFAULT_GRAPH_ID as default

然后将default变量传递给图形构造函数,例如

graph = Graph(store, identifier=default)

完整示例

这假设 apache-jena-fuseki 在本地主机上的端口 3030 上运行(默认值(。

from rdflib import Namespace, Graph
from rdflib.namespace import RDF, FOAF
from rdflib.plugins.stores.sparqlstore import SPARQLUpdateStore
from rdflib.graph import DATASET_DEFAULT_GRAPH_ID as default
# Connect to fuseki triplestore.
store = SPARQLUpdateStore()
query_endpoint = 'http://localhost:3030/test/query'
update_endpoint = 'http://localhost:3030/test/update'
store.open((query_endpoint, update_endpoint))
# Define example namespace.
ex = Namespace("http://example.org/")
# Define a node.
node = (ex.me, RDF.type, FOAF.Person)
# Open a graph in the open store and set identifier to default graph ID.
graph = Graph(store, identifier=default)
# Add node to graph.
graph.add(node)

然后,您应该在 fuseki 数据集管理面板中看到一个(新(节点, 使用 RDFlib 将一个节点插入默认图形后,请参阅此 Fuseki 数据集信息面板的屏幕截图。

最新更新