3

(dotnetRDF)を使用してhttp://dbpedia.org/sparqlで次のクエリを実行すると、VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet()すべてが正常に機能します。

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プロパティの値を設定しようとしましたが、成功しませんでした。

2番目のクエリで制限を500からたとえば100に変更した場合、正常に機能します。

私たちを手伝ってくれますか?


制限の値が456 [Line 495 Column 25] Unexpected Character (Code 8211) – was encounteredの場合、例外がスローされます。これは495行目ns19:???_???5555 .です。25列目の値は_

ここに、このデータがwiki形式でありますhttp://dbpedia.org/page/Interstella_5555:_The_5tory_of_the_5ecret_5tar_5ystem、私が推測するように、dbpprop:kanjiプロパティの値に問題があります(インターステラ5555)

4

2 に答える 2

3

DBPediaにはエンコードに関する既知の問題があり、DBPediaが不発弾データを生成している可能性があります。

dotNetRDFでこれをさらにデバッグするためにできることは、クエリを呼び出すコードを次のようにラップすることです。

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

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

これにより、解析が失敗します(別のエラーが発生します)が、デバッグのために生のHTTP応答をコンソールにダンプします。質問を編集して、ダンプの456行目の周りの行の内容を含めることができれば、人々はあなたにさらに助けを提供できるかもしれません。

編集

したがって、疑われるように、問題は確かに、dotNetRDF自体ではなく、DBPediaがdudデータを生成することにあります。

タートル形式で言及したファイルをダウンロードして解析しようとすると、同じエラーメッセージが表示され、次の行に関連しています。

ns6:Avalon_–_Spiel_um_dein_Leben ,

一見有効に見えるかもしれませんが(プレフィックス名では単純なハイフン-が許可されているため)、問題はそれがハイフンではないことです。実際には文字コード8211(AndySが言及しているように2013年の16進数)であり、これは受け入れられません。プレフィックス名の文字の範囲。

ところで、これが本当にdotNetRDFの問題ではないことを確認するために、JenaのTurtleパーサーでもこれを確認しました。

したがって、基本的にDBPediaデータは壊れています。受け入れヘッダーを適切に設定することで、RDF / XMLまたはNTriplesを強制的に返送することができますが、これらの形式でもデータが正常に戻らないという保証はありません。DBPediaの担当者に連絡して、これをバグとして報告することをお勧めします--dbpedia-discussion@lists.sf.net

于 2012-11-30T00:58:53.597 に答える
1

456行目を見ると便利です。wgetを使用してリクエストを作成してみてください(URLをエンコードしますが、curlはエンコードしないため、コマンドラインから簡単に使用できます)。

Unicodeコードポイント8211はENDASH(hex 2013)です。

CONSTRUCTのLIMITは、グラフパターンの行数であり、CONSTRUCTテンプレートではありません。SELECT...LIMITでカバーされるトリプルをさらに取得する場合があります。SELECTでより大きなLIMITを試して、それが壊れているかどうかを確認してください。

于 2012-11-30T10:18:57.467 に答える