この質問は、SPARQL ADD クエリの実行中にセサミ リポジトリに使用する URI に関連しています。
Sesame リポジトリのすべてのトリプルを別のリポジトリ (Dydra) に INSERT しようとしています。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}
.
基本的に、文字列の書式設定を間違って使用していることは理解しています。クエリを実行する正しい方法は何ですか?
これをプログラムで行う 1 つの方法は、dataGraph 内のすべてのトリプルを繰り返し処理し、INSERT
それらを個別に ing することです。私はこのアプローチを試しました。コードは機能しますが、すべてのデータが移植されるわけではありません。それが、データを一括移植する方法を探している理由です。
更新 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
しかし、投稿したいデータが投稿されません。どうすれば違う方法で行う必要がありますか?