IRI在Neptune Server上发布到SPARQL客户端时,包括未编码的空间错误



我在向我的sparql客户端端点提出邮政请求时会遇到以下错误:

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

我正在使用Postman提出请求,并设置了一个是内容类型的单个标头,并具有值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> }

我希望我只能在身体中发布整个RDF XML文档,而SPARQL客户端/Neptune数据库只能了解其中的三元组。

我在网上看到了很多有关此错误的信息,但找不到与直接发布数据有关的解决方案。任何想法如何解决此问题?

如评论中所讨论的,您的sparql命令在语法上无效:您不能仅在sparql INSERT DATA命令中粘贴rdf/xml文档(请参阅SPARQL Update Specification有关详细信息正确的语法(。

我希望我只能在身体中发布整个RDF XML文档,而SPARQL客户端/Neptune数据库只能了解其中的三元组。

不幸的是,Neptune别无选择(至少在我从Neptune Docs中所看到的那样(。

您可以使用UPDATE LOAD命令将RDF/XML文档上传到Neptune,如Neptune文档所示。如果不是您的选项,则需要转换文档中的数据以以某种方式纠正SPARQL语法。

有几种方法可以做到这一点,但是如果您在Java工作,一种可能的选择是使用RDF4J存储库API。您可以使用SPARQLRepository类连接到Neptune实例的SPARQL端点,如下:

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将负责将您的命令转换为Neptune Server可以理解的SPARQL更新请求(稍微警告:我没有使用Neptune对此进行测试,但是如果它符合SPARQL W3C建议,则该建议应该可以使用(。

最新更新