簡體   English   中英

當發布到Neptune服務器上的SparQL客戶端時,IRI包含未編碼的空間錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM