1

我正在尝试使用 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根本没有添加子句中指定的所有上述值。

编辑1:

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

1 回答 1

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 .
}
于 2016-04-05T13:36:52.663 回答