0

この質問は、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

しかし、投稿したいデータが投稿されません。どうすれば違う方法で行う必要がありますか?

4

1 に答える 1