我正在尝试使用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'))
答案 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 .
}