SPARQL INSERT не работает с методом PUT. Зачем?
Я пытаюсь создать новый объект с помощью метода 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 ответ
Префиксы не являются тройками и поэтому не могут быть добавлены с помощью запроса 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 .
}