2012-11-29 120 views
3

當我使用(dotnetRDF)VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet()http://dbpedia.org/sparql上執行以下查詢時,一切正常。使用dotnetRDF查詢dbpedia sparql端點 - RDFParseException

SELECT ?film ?p ?o 
WHERE { 
    ?film <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Japanese_films> . 
    ?film ?p ?o 
} 
limit 500 

但是當我嘗試使用SparqlRemoteEndpoint.QueryWithResultGraph()

CONSTRUCT { ?film ?p ?o} 
WHERE { 
    ?film <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Japanese_films> . 
    ?film ?p ?o 
} 
limit 500 

我有RdfParseException有消息

"[Line 456 Column 29] Unexpected Character (Code 8211) – was encountered" 

我試着爲ResultsAcceptHeader和RdfAcceptHeader性質,但沒有設定值此查詢成功。

如果在第二個查詢中,我更改了500的限制,例如, 100它工作正常。

你能幫我嗎?如果限制了價值456 [Line 495 Column 25] Unexpected Character (Code 8211) – was encountered


現在拋出異常,這是行495 ns19:???_???5555 .。在第25列的值是_

在這裏,您在維基格式http://dbpedia.org/page/Interstella_5555:_The_5tory_of_the_5ecret_5tar_5ystem這個數據,我想,有一個與dbpprop:kanji財產的價值問題(インターステラ5555)

+0

我已根據您的其他信息更新了我的答案,問題是來自DBPedia的不良數據實際上與漢字腳本無關 – RobV

回答

3

DBpedia中已經已知問題的編碼和它可能僅僅是DBPedia正在生產垃圾數據。

什麼,你可以嘗試做這進一步調試dotNetRDF是包裝調用與下面的查詢代碼:

try 
{ 
    Options.HttpDebugging = true; 
    Options.HttpFullDebugging = true; 

    //Try your query here 
} 
finally 
{ 
    Options.HttpDebugging = false; 
    Options.HttpFullDebugging = false; 
} 

這將造成解析失敗(用不同的錯誤),但它將原始HTTP響應轉儲到控制檯進行調試。如果您可以編輯問題以包含轉儲456行附近的內容,那麼人們可以爲您提供更多幫助。

編輯

那麼作爲涉嫌的問題確實與DBpedia的生產啞彈的數據,而不是在dotNetRDF本身。

當我下載了你龜格式提到的文件,並試圖解析它,我得到了同樣的錯誤消息,它涉及到以下行:

ns6:Avalon_–_Spiel_um_dein_Leben , 

雖然這個看起來有效乍看之下(因爲在前綴名稱中允許使用簡單的連字符-),問題在於它不是連字符,實際上是字符代碼8211(AndyS提到的十六進制爲2013),並且這不在可接受的前綴名稱字符範圍內。

順便說一下,我確認這與耶拿Turtle解析器,以及確保它確實不是一個dotNetRDF問題。

因此,基本上DBPedia數據已損壞,您可以嘗試強制它通過適當設置accept頭來發回RDF/XML或NTriples,但不能保證數據在這些格式中不會返回錯誤,例如好。我建議你聯繫DBPedia傢伙報告這個bug - [email protected]。淨

+0

我試圖應用此解決方案[在我的類似問題中](http) ://stackoverflow.com/questions/19444750/rdfparseexception-unexpected-character-code-114-r-was-encountered),但它還沒有非常啓發。 –

1

看到行456將是有用的。嘗試使用wget發出請求(它對URL進行編碼,curl不會,從命令行使用起來更容易)。

Unicode代碼點8211是EN DASH(十六進制2013)。

CONSTRUCT中的LIMIT是圖形模式中的行數而不是CONSTRUCT模板中的行數。您可能會得到更多由SELECT ... LIMIT覆蓋的三元組。在SELECT中嘗試一個更大的LIMIT,看它是否中斷。

+0

如果我將限制更改爲不同的值,服務器返回不同的數據(可能會緩存一些查詢結果)。現在它適用於限制500,900,1000或455,但它不適用於限制456。 –