java存储三元组_如何将所有三元组从RDFlib图插入另一个存储库而不迭代每个三元组?...

作者探讨了将Sesame存储库中的三元组数据批量导入Dydra的挑战,寻求编程方式而非GUI的方法。他们分享了遇到的错误和尝试过的解决方案,包括使用SPARQL和POST请求,最终目标是改进代码以实现数据迁移并解决400错误问题。
摘要由CSDN通过智能技术生成

我正在尝试将所有三元组从芝麻存储库插入另一个(Dydra) . 有几种方法可以做到这一点,例如使用SERVICE子句或Dydra的GUI . 但是,Dydra限制了SERVICE的使用,我想要一种以编程方式插入数据的有效方法 . 这是我现在的代码:

queryStringUpload = 'INSERT {?s ?p ?o} WHERE GRAPH %s {?s ?p ?o}' % dataGraph

sparql = SPARQLWrapper(dydraSparqlEndpoint)

sparql.setCredentials(key,key)

sparql.setQuery(queryStringUpload)

sparql.method = 'POST'

sparql.query()

该代码导致以下错误:

client error: failed to parse after 'GRAPH' at offset 24 on line 1.

INSERT {?s ?p ?o} WHERE GRAPH [a rdfg:Graph;rdflib:storage [a rdflib:Store;rdfs:label 'IOMemory']]. {?s ?p ?o}

.

基本上,我知道我错误地使用字符串格式 . 执行查询的正确方法是什么?

以编程方式执行此操作的一种方法是迭代遍历dataGraph中的每个三元组并单独地对它们进行迭代 . 我正在寻找一种批量移植数据的方法 .

更新1

这是我尝试实现建议答案的代码:

sesameURL = 'http://my.ip.ad.here:8080/openrdf-sesame/repositories/rep_name/statements'

payloadPOST = {

'url': sesameURL,

# 'account[login]':key,

# 'account[password]':'',

# 'csrfmiddlewaretoken':csrfToken_new,

# 'next':'/',

}

headersPOST = {

'User-Agent': 'python',

'Content-Type': 'application/n-quads',

# 'Referer': dydraLogin,

}

paramsPOST = {

'auth_token': key,

#'url': sesameURL

}

# print payload

try:

q = s.post(dydraUrl,data=payloadPOST, params=paramsPOST, headers=headersPOST)

print "q.text: " + q.text

print "q_status_code: " + str(q.status_code)

except requests.exceptions.RequestException as e:

print e

这是错误:

q_status_code: 400

但是,如果我注释掉'url'属性,我会得到:

q_status_code: 201

任何关于如何解决的想法都会非常有帮助 .

更新2

现在,不管'url'是否在headersPOST或paramsPOST下,我得到以下输出:

q_status_code: 201

但是,我要发布的数据没有发布 . 我该如何做不同的事情?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值