IRI在发布到Neptune服务器上的SparQL客户端时包含一个未编码的空格错误
向SPARQL客户端端点发出POST请求时,我遇到以下错误: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
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文档粘贴到SPARQLINSERT 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为什么不使用更新加载
建议在中上载文件?