SPARQL INSERT不使用PUT方法。为什么?

时间:2016-04-05 10:59:44

标签: sparql put fedora-commons

我正在尝试使用PUT方法创建一个新对象,并使用SPARQL查询添加一些我自己的前缀。但是,创建的对象没有添加前缀。它适用于POST和PATCH。为什么SPARQL使用PUT方法并使用用户定义的前缀添加替代方法?

 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 { }

我所说的是insert子句中指定的所有上述值都没有添加。

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'))

1 个答案:

答案 0 :(得分:0)

前缀不是三元组,因此无法使用SPARQL查询添加。您始终可以在SPARQL查询中指定前缀,它将为您的三元组存储生成正确的URI。

另请注意,您的custom命名空间通过以散列和斜杠结尾来进行错误定义。它应该是PREFIX custom: <http://customnamespaces/custom#>PREFIX custom: <http://customnamespaces/custom/>

即。通过您的查询索引:hasIndexingTransformation将作为<http://fedora.info/definitions/v4/indexing#hasIndexingTransformation>存储在三元组商店中。

没有理由在三元组存储中存储前缀(实际上,前缀是文本序列化的工件,而不是数据本身),因此您可以随后以两种方式之一查询此数据。

1)使用前缀

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

2)使用完整的URI:

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