IRI在发布到Neptune服务器上的SparQL客户端时包含一个未编码的空格错误

IRI在发布到Neptune服务器上的SparQL客户端时包含一个未编码的空格错误,sparql,rdf,amazon-neptune,rdf-xml,Sparql,Rdf,Amazon Neptune,Rdf Xml,向SPARQL客户端端点发出POST请求时,我遇到以下错误: 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.o

向SPARQL客户端端点发出POST请求时,我遇到以下错误:

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> }
插入数据{

正如注释中所讨论的,您的SPARQL命令在语法上是无效的:您不能仅将RDF/XML文档粘贴到SPARQL
INSERT DATA
命令中(有关正确语法的详细信息,请参阅)

我希望我可以在正文中发布整个RDF XML文档,SPARQL客户机/Neptune数据库就可以理解其中的三元组

不幸的是,海王星对此没有选择(至少,从海王星的文档中我看不到)

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

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

Repository=newsparqlrepository(“https://your-neptune-endpoint:port/sparql");
rep.init();
然后,您只需打开一个连接并以这种方式加载文件:

try(RepositoryConnection-conn=rep.getConnection()){
File File=新文件(“/my/local/rdf xml File.rdf”);
conn.add(文件“”,RDFFormat.RDFXML);
}

Rdf4j将负责将您的命令转换为Neptune服务器可以理解的SPARQL更新请求(需要注意的是:我自己没有用Neptune测试过,但是如果它符合SPARQL W3C建议,这应该可以工作).

它不起作用-简单地说,它在语法上不是有效的SPARQL更新。请检查端点的文档,寻找替代方案,例如RDF4J的
语句或图形存储协议实现。你是说不可能像这样发布整个RDF文档吗?我需要深入了解RDF三元组或类似的东西?或者有可能这样做,而我只是做得不正确?您所做的是将一个完整的片段或RDF/XML序列化文档包装到一个语法无效的
INSERT DATA
SPARQL更新中。一种方法是使用文档的Turtle序列化,但将
前缀
decl根据sparql语法,插入数据块之外的操作。
另一种方法是探索Neptune提供的功能-例如,检查在线文档:sparql查询是否可以完成该操作?或者是否需要在发出请求的代码中完成该操作?@Haych为什么不使用
更新加载
建议在中上载文件?