2017-09-18 3 views
2

Ich habe versucht, SPARQLWrapper zu bekommen, um ein einfaches Tripel ohne Erfolg in GraphDB einzufügen. Ich habe keine Probleme mit ausgewählten Abfragen. Hier ist Python Test-Code, der fehlschlägt:INSERT kann nicht in SPARQLWrapper arbeiten

db = sparqlw.SPARQLWrapper(endpoint) 
query = ''' 
INSERT {<http://example.com/123456789876> a owl:Thing .} 
WHERE {} 
''' 
db.setQuery(query) 
db.method = sparqlw.POST 
db.setReturnFormat(sparqlw.JSON) 
db.queryType= sparqlw.INSERT 
result = db.query() 

Es diese Fehler zurückgibt:

"urllib.error.HTTPError: HTTP Error 400: Bad Request" 

und

"SPARQLWrapper.SPARQLExceptions.QueryBadFormed: QueryBadFormed: a bad 
request has been sent to the endpoint, probably the sparql query is bad 
formed." 

Antwort: b'Missing Parameter: query '

I' Ich habe überall hingeschaut und alles Mögliche versucht und kann es nicht zur Arbeit bringen. Dankbar für alle guten Leads.

Siehe meinen Kommentar zur Validierung der Abfrage. Der Vorschlag, dass die Frage ein Duplikat ist und bereits beantwortet wurde, ist nicht anwendbar.

+1

Mögliche Duplikat [SPARQL Insert Ausnahme: SPARQLWrapper.SPARQLExceptions.QueryBadFormed] (https: //stackoverflow.com/questions/20636073/sparql-insert-exception-sparqlwrapper-sparqlexceptions-querybadformed) –

+0

Ein weiteres Stück von Information: Die Abfrage besteht die Validierung. Die Abfrage funktioniert auch innerhalb der GraphDB SPARQL-Schnittstelle, aber nicht über SPARQLWrapper. –

Antwort

1

GraphDB stellt Sesame-style Endpunkt-URLs zur Verfügung.
Hier unten ein Screenshot der GraphDB 8.3 Workbench Hilfeseite (Ich verwende Free Edition).


Help


Diese Python-Code funktioniert für mich (repositoryID ist wikidata):

from SPARQLWrapper import SPARQLWrapper, BASIC 

db = SPARQLWrapper("http://localhost:7200/repositories/wikidata/statements") 
query = ''' 
INSERT {<http://example.com/123456789879> a owl:Thing .} 
WHERE {} 
''' 
db.setHTTPAuth(BASIC) 
db.setCredentials('login', 'password') 
db.setQuery(query) 
db.method = "POST" 
db.setReturnFormat('json') 
db.queryType = "INSERT" 
result = db.query() 
+0

Das ist ermutigend - irgendwie. Welche Datenbank verwenden Sie als Endpunkt, und ist es hinter einer Firewall oder nicht? –

+0

Ich verwende meine lokale GraphDB Free Edition-Installation, ich hoffe, dass sie sich nicht hinter einer Firewall befindet. Versuchen Sie, ein Update für einen öffentlichen Endpunkt durchzuführen? –

+0

Wenn ich diesen Code einfügen (nur den Endpunkt ändern), schlägt es mit dem gleichen Fehler fehl: "urllib.error.HTTPError: HTTP-Fehler 400: Schlechte Anfrage" wie zuvor und "QueryBadFormed". Dies riecht nach einem HTTP-Missverständnis, aber SPARQLWrapper sollte alle Anfragen in der erwarteten Weise behandeln. Irgendwelche Ahnungen? –