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 .
}
Другие вопросы по тегам