IRI включил некодированную пробел Ошибка при публикации в SparQL Client на Neptune Server - PullRequest
0 голосов
/ 26 июня 2019

Я получаю следующую ошибку при отправке запроса POST к моей конечной точке клиента SPARQL:

Malformed query: org.openrdf.rio.RDFParseException: IRI included an unencoded space: '32' [line 1]

Я использую Postman для выполнения запроса и установил единственный заголовок Content-Type, который имеетзначение sparql-update.

Данные, которые я передаю в теле, выглядят примерно так:

insert data { <rdf:RDF xmlns:html="http://www.w3.org/1999/xhtml"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
         xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
         xmlns:country="http://example.xyz.ds/country/"
         xmlns:currency="http://example.xyz.ds/currency/"
         xmlns:area="http://example.xyz.ds/area/"
         xmlns:city="http://example.xyz.ds/city/"
         xmlns:root="http://example.xyz.ds/terms#"
         xmlns:specialIdenifier="http://example.xyz.ds/specialIdenifier/"
         xmlns:product="http://example.xyz.ds/product/"
         xmlns:company="http://example.xyz.ds/company/"
         xmlns:office="http://example.xyz.ds/office/"
         xmlns:schema="http://schema.org/"
         xmlns:uuid="java:java.util.UUID"
         xmlns:acmUtil="http://example.xyz.ds/util-functions">
    <rdf:Description rdf:about="http://example.xyz.ds/company/123456789>
        <rdf:type rdf:resource="http://example.xyz.ds/terms#company"/>
        <rdfs:label/>
        <root:fid xmlns:urn="urn:"
                  xmlns:func="http://example.xyz.ds/func"
                  rdf:datatype="http://www.w3.org/2001/XMLSchema#string">4049</root:fid>
        <root:deleted xmlns:urn="urn:"
                      xmlns:func="http://example.xyz.ds/func"
                      rdf:datatype="http://www.w3.org/2001/XMLSchema#boolean">false</root:deleted>
    </rdf:Description>
</rdf:RDF> }

Я надеюсь, что смогу просто отправить весь этот XML-документ RDF в телои клиентская база данных SPARQL / база данных Neptune будет просто понимать тройки внутри нее.

Я много видел в Интернете об этой ошибке, но не могу найти решение, связанное с отправкой данных напрямую.Есть идеи, как решить эту проблему?

1 Ответ

1 голос
/ 27 июня 2019

Как обсуждалось в комментариях, ваша команда SPARQL синтаксически недействительна: вы не можете просто вставить документ RDF / XML в команду SPARQL INSERT DATA (подробности см. В спецификации SPARQL Update ).правильный синтаксис).

Я надеюсь, что смогу просто поместить весь этот XML-документ RDF в тело, и база данных клиента / Нептуна SPARQL просто поймет его тройки.

К сожалению, у Нептуна для этого нет опций (по крайней мере, не так, как я вижу из документов Нептуна).

Вы можете загрузить документ RDF / XML в Нептунс помощью команды UPDATE LOAD, как показано в документации Neptune .Если это не вариант, вам нужно как-то преобразовать данные в документе, чтобы как-то исправить синтаксис SPARQL.

Есть несколько способов сделать это, но если вы работаете в Java, один из возможных вариантовопция заключается в использовании API-хранилища rdf4j .Вы можете подключиться к конечной точке SPARQL вашего экземпляра Neptune с помощью класса SPARQLRepository следующим образом:

Repository rep = new SPARQLRepository("https://your-neptune-endpoint:port/sparql");
rep.init();

, а затем просто открыть соединение и загрузить свой файл следующим образом:

try(RepositoryConnection conn = rep.getConnection()) {
      File file = new File("/my/local/rdf-xml-file.rdf");
      conn.add(file, "", RDFFormat.RDFXML);
}

Rdf4j позаботится о преобразовании вашей команды в запрос на обновление SPARQL, который сможет понять сервер Neptune (небольшое предостережение: я сам не проверял это с Neptune, но если он совместим с Рекомендациями SPARQL W3C, это должно работать).

...