2016-04-05 11 views
1

Ich versuche, ein neues Objekt mit PUT-Methode zu erstellen und einige meiner eigenen Präfixe mit SPARQL-Abfrage hinzuzufügen. Das Objekt wird jedoch ohne die hinzugefügten Präfixe erstellt. Es funktioniert jedoch mit POST und PATCH. Warum und gibt es eine alternative Möglichkeit, SPARQL mit der PUT-Methode zu verwenden und benutzerdefinierte Präfixe hinzuzufügen?SPARQL INSERT funktioniert nicht mit der PUT-Methode. Warum?

PREFIX dc: <http://purl.org/dc/elements/1.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX indexing: <http://fedora.info/definitions/v4/indexing#> 

DELETE { } 
INSERT { 
    <> indexing:hasIndexingTransformation "default"; 
     rdf:type indexing:Indexable; 
     dc:title "title3"; 
     dc:identifier "test:10"; 
} 
WHERE { } 

Was ich sage, war alle oben angegebenen Werte in der insert Klausel überhaupt nicht gegeben.

EDIT1:

url = 'http://example.com/rest/object1' 
payload = """ 
PREFIX dc: <http://purl.org/dc/elements/1.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX indexing: <http://fedora.info/definitions/v4/indexing#> 
PREFIX custom: <http://customnamespaces/custom#/> 
DELETE { } 
INSERT { 
<> indexing:hasIndexingTransformation "default"; 
rdf:type indexing:Indexable; 
dc:title "title1"; 
custom:objState "Active"; 
custom:ownerId "Owner1"; 
dc:identifier "object1"; 
} 
WHERE { } 
""" 
headers = { 
    'content-type': "application/sparql-update", 
    'cache-control': "no-cache" 
    } 
response = requests.request("PUT", url, data=payload, headers=headers, auth=('username','password')) 
+0

Wenn es keinen anderen Weg gibt, dann muss ich es in zwei Schritten: 1. Objekt erstellen mit PUT 2. Aktualisieren Sie das Objekt mit PATCH –

+0

Können Sie ein wenig expliziter darüber sein, wie Sie "POST" und "PUT" aufrufen? – scotthenninger

+0

Hallo Scott, ich habe es in der Frage hinzugefügt. –

Antwort

0

Präfixe sind nicht verdreifacht und daher nicht mit einer SPARQL Query hinzugefügt werden können. Sie können in der SPARQL-Abfrage immer Präfixe angeben, und es wird die korrekte URI für den Speicher in Ihrem Triple Store generiert.

Beachten Sie auch, dass Ihr custom Namespace fehlerhaft definiert ist, indem er mit einem Hash und einem Schrägstrich endet. Es sollte entweder PREFIX custom: <http://customnamespaces/custom#> oder PREFIX custom: <http://customnamespaces/custom/> sein.

I.e. durch Ihre Query-Indizierung: hasIndexingTransformation wird im Triple-Store als <http://fedora.info/definitions/v4/indexing#hasIndexingTransformation> gespeichert.

Es gibt keinen Grund, das Präfix im Triple-Store zu speichern (Präfixe sind tatsächlich ein Artefakt der Textserialisierung, nicht die Daten selbst), so dass Sie diese Daten auf zwei verschiedene Arten abfragen können.

1) ein Präfix

PREFIX indexing: <http://fedora.info/definitions/v4/indexing#> 
SELECT ?o { 
    [] indexing:hasIndexingTransformation ?o . 
} 

2) Mit der vollständigen URI verwenden:

SELECT ?o { 
    [] <http://fedora.info/definitions/v4/indexing#hasIndexingTransformation> ?o . 
} 
+0

Hallo Schotte, du hast meine Worte falsch verstanden. Ich habe sie nicht richtig gemacht. Eigentlich habe ich versucht, ein neues Objekt zu erstellen und gleichzeitig benutzerdefinierte Eigenschaften hinzuzufügen. Es funktioniert mit POST, aber nicht mit PUT. –