2016-09-08 23 views
1

Ich weiß, dass fuzeki standardmäßig different urls für Abfrage und Update bietet, so dass einige elegante Verwaltung.Verwenden Sie die gleiche URL für Abfrage und Update

Jetzt möchte ich eine einzige URL für beide aktualisieren und abfragen. Das Grundprinzip hinter dieser Notwendigkeit ist die Vermeidung der Verbreitung von zwei URLs in der Codebasis. Ich kenne diese Update- und Abfragecodes should be separated, aber meine Anforderungen sind nicht gemischt. Es ist nur um die Ausbreitung von zwei Objekten anstelle von einem zu vermeiden.

Meine aktuelle Konfiguration wie folgt aussieht:

<#service1> rdf:type fuseki:Service ; 
    fuseki:name   "dataset" ; # http://host:port/dataset 
    fuseki:serviceQuery "endpoint" ; # SPARQL query service 
    fuseki:serviceUpdate "endpoint" ; # SPARQL update service 
    fuseki:dataset  <#dataset> ; 
    . 

Theoretisch eine Schnittstelle an /endpoint existiert, aber nur Update akzeptieren. Bei Abfrage mit:

prefix sfm: <sfm/> 
SELECT DISTINCT ?value 
WHERE { 
    sfm:config sfm:component ?value. 
} 

meldet der Server viele Zeilen wie folgt aus:

INFO [4] POST http://localhost:9876/sfm/endpoint 
INFO [4] POST /sfm :: 'endpoint' :: [application/x-www-form-urlencoded] ? 
INFO [4] 400 SPARQL Update: No 'update=' parameter (0 ms) 

ich nichts im doc finden können, die die Abfrage und Update-Service angeben nicht sein selbe Stelle, also nehme ich an, dass es möglich ist und ich gerade etwas verpasst habe. Die letzte Zeile des Protokolls ist jedoch explizit: Fuseki wartet auf ein Update.


Eine andere Lösung könnte sein, die URL als localhost/dataset/ zu definieren, und je nachdem, ob ich den relevanten Teil geben abzufragen oder zu aktualisieren, fügen Sie am Ende jeweils localhost/dataset/query und localhost/dataset/update.

Aber (1) dies führt dazu, dass die Datenbank eine bestimmte URL-Benennung haben muss, und (2) es sieht wie eine starke Anforderung über den TripleStore aus: Wenn ich einen anderen verwenden werde, muss es dieselbe Schnittstelle bereitstellen , was nicht möglich sein könnte. (Weiß nicht, ob diese Funktion in anderen triplestores implementiert)

EDIT: die POST-fix/GET Fehler

+1

Ein (2) - der richtige Weg, TripleStore-neutral zu sein, besteht darin, zwei Einstellungen zu haben - den Abfrage-Endpunkt und den Update-Endpunkt. Diese können dann je nach Bedarf gleich oder verschieden sein. Angesichts der Tatsache, dass die Dienste unterschiedliche Sicherheitseinstellungen haben können, müssen Sie sie trotzdem anders handhaben, um echte Portabilität zu gewährleisten. – AndyS

+0

Die Konfigurationsdatei (fuseki: name) stimmt nicht mit der HTTP-Anfrage überein. – AndyS

Antwort

2

Antwort auf die revidierte und andere Frage:

Der Endpunkt für Shared Services ist der Datensatz URL:

http://localhost:9876/sfm 

Ob Updates Abfrage oder Dienstleistungen verfügbar sind, wird durch die Konfigurationsdatei gesteuert.

Einstellung fuski: serviceQuery und fuski: serviceUpdate das gleiche ist nicht notwendig und wird abgeraten.

4
405 HTTP method not allowed: SPARQL Update : use POST 

Es sieht aus wie Sie GET für einen SPARQL-Update verwenden.

Die Operation wurde korrekt an den Update-Prozessor weitergeleitet (Sie können denselben Endpunkt verwenden - einschließlich des Löschens des Serviceteils und der Verwendung der Dataset-URL).

In HTTP sind GET jedoch cachefähige Operationen und sollten nicht verwendet werden, wenn sie Änderungen verursachen können. Ein GET kann den Endserver möglicherweise nicht erreichen, aber einige Intermediate reagieren darauf über einen Web-Cache.

Verwenden Sie POST.

Das gleiche gilt, wenn Sie Dienste für Abfrage und Update trennen.

ursprünglichen Kontext

Die ursprüngliche Frage bearbeitet wurde.Der ursprüngliche Bericht wurde darüber fragen:

INFO [1] 405 HTTP method not allowed: SPARQL Update : use POST (2 ms) 
+0

Danke, das ist ein Teil des Problems behoben. Ich habe meine Frage aktualisiert, um den interessanten Teil zu zeigen. Fuseki erkennt nun die Abfrage, fragt aber gezielt nach einem Update. – aluriak

+0

Bitte entfernen Sie nicht die ursprüngliche Frage. Meine Antwort, die Sie nicht akzeptiert haben, bezog sich auf den Originalbericht und nun auf die Beschreibung, die nicht mehr existiert. Die editierte Frage handelt von einem Unterschied. – AndyS

+0

Bitte starten Sie eine neue Frage und fügen Sie die von Ihnen verwendete Fuseki-Version und den von Ihnen erstellten Sparqlwarpper-Aufruf (einschließlich der Version) ein. Dann kann das ursprüngliche Problem hier wiederhergestellt werden. – AndyS

Verwandte Themen