sparql ожидает одно из мест, используя

Я пытаюсь сделать простой запрос на вставку в веб-интерфейсе сервера Fuseki. Я установил конечную точку на /update (вместо значения по умолчанию /sparql). У меня есть следующий запрос от https://www.w3.org/Submission/SPARQL-Update/:

PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT { <http://example/egbook3> dc:title  "This is an example title" }

Этот запрос переводится в: http://localhost:3033/dataset.html#query=PREFIX+dc%3A+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%0AINSERT+%7B+%3Chttp%3A%2F%2Fexample%2Fegbook3%3E+dc%3Atitle++%22This+is+an+example+title%22+%7D%0A или curl http://localhost:3033/infUpdate/update -X POST --data 'update=PREFIX+dc%3A+%3Chttp%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%3E%0AINSERT+%7B+%3Chttp%3A%2F%2Fexample%2Fegbook3%3E+dc%3Atitle++%22This+is+an+example+title%22+%7D%0A' -H 'Accept: text/plain,*/*;q=0.9', видимый с помощью кнопки Share your query.

Запрос возвращает следующую ошибку:

Error 400: Encountered "<EOF>" at line 2, column 73.
Was expecting one of:
    "where" ...
    "using" ...



Fuseki - version 2.4.0 (Build date: 2016-05-10T11:59:39+0000)

Ошибка возникает как в веб-интерфейсе, так и с curl. В чем может быть проблема? SELECT запросы работают без проблем. Также работает загрузка троек из файла через форму загрузки веб-интерфейса. Дополнительный вопрос: в обычном почтовом запросе используется query=, а в версии curl используется update=, почему это отличается?


person Marijn    schedule 21.09.2016    source источник


Ответы (1)


Документ, на который вы ссылаетесь, - это SPARQL Update отправка от 2008 г. >, а не настоящая рекомендация SPARQL 1.1 2013 года. Рекомендация - это действующий стандарт, а представление - нет.

Обновление (вставка или удаление) не является запросом (выбор, запрос, построение), и синтаксис для двух типов запросов не обязательно одинаков. Вы заметили (правильно), что WHERE не является обязательным в запросе на выборку, но это не означает, что он является необязательным для вставки. Есть две формы вставки. Там INSERT DATA имеет синтаксис:

INSERT DATA  QuadData  

и есть DELETE / INSERT, имеющий синтаксис:

( WITH IRIref )?
( ( DeleteClause InsertClause? ) | InsertClause )
( USING ( NAMED )? IRIref )*
WHERE GroupGraphPattern

DeleteClause ::= DELETE  QuadPattern 
InsertClause ::= INSERT  QuadPattern 

Итак, если вы используете INSERT {}, тогда это InsertClause формы DELETE / INSERT, и вам нужно следовать за ней с помощью WHERE. Поскольку вы используете статические данные, вам, вероятно, следует просто использовать форму INSERT DATA:

PREFIX dc: <http://purl.org/dc/elements/1.1/>
INSERT DATA { <http://example/egbook3> dc:title  "This is an example title" }
person Joshua Taylor    schedule 21.09.2016