[英]IRI included an unencoded space Error when posted to SparQL Client on Neptune Server
向SPARQL Client端點發出POST請求時,出現以下錯誤:
Malformed query: org.openrdf.rio.RDFParseException: IRI included an unencoded space: '32' [line 1]
我正在使用郵遞員發出請求,並設置了一個單獨的標頭,該標頭為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> }
我希望我可以將整個RDF XML文檔發布到正文中,而SPARQL客戶端/ Neptune數據庫將只了解其中的三元組。
我在網上看到很多關於此錯誤的信息,但找不到與直接發布數據有關的解決方案。 任何想法如何解決這個問題?
如注釋中所述,您的SPARQL命令在語法上無效:您不能僅將RDF / XML文檔粘貼到SPARQL INSERT DATA
命令中(有關正確語法的詳細信息,請參閱SPARQL更新規范 )。
我希望我可以將整個RDF XML文檔發布到正文中,而SPARQL客戶端/ Neptune數據庫將只了解其中的三元組。
不幸的是,海王星對此沒有選擇(至少,據我從海王星文檔中所看到的那樣)。
您可以使用UPDATE LOAD
命令將RDF / XML文檔上載到Neptune,如Neptune文檔中所示。 如果這不是您的選擇,則需要以某種方式轉換文檔中的數據以更正SPARQL語法。
有幾種方法可以解決此問題,但是如果您使用的是Java,則一種可能的選擇是使用rdf4j Repository 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服務器可以理解的SPARQL更新請求(有一點需要注意:我自己還沒有用Neptune進行過測試,但是如果它符合SPARQL W3C建議,則應該可以使用)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.