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 属性设置值,但没有成功。

如果在第二个查询中我将限制从 500 更改为例如 100,则它可以正常工作。

你可以帮帮我吗?


现在,如果 limit 的值为 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 行周围的内容,那么人们可能会为您提供更多帮助。

编辑

因此,怀疑问题确实出在 DBPedia 产生无用数据,而不是 dotNetRDF 本身。

当我以 Turtle 格式下载您提到的文件并尝试解析它时,我收到了相同的错误消息,它与以下行有关:

ns6:Avalon_–_Spiel_um_dein_Leben ,

虽然乍一看可能看起来有效(因为-在前缀名称中允许使用简单的连字符),但问题是它不是连字符,它实际上是字符代码 8211(正如 AndyS 提到的 2013 年十六进制),这是不可接受的前缀名称字符的范围。

顺便说一句,我也用 Jena 的 Turtle 解析器确认了这一点,以确保它确实不是 dotNetRDF 问题。

因此,基本上 DBPedia 数据已损坏,您可以尝试通过适当地设置接受标头来强制它向您发送回 RDF/XML 或 NTriples,但不能保证这些格式的数据也不会变坏。我建议您联系 DBPedia 人员将此报告为错误 - dbpedia-discussion@lists.sf.net

于 2012-11-30T00:58:53.597 回答
1

看到第 456 行会很有用。尝试使用 wget 发出请求(它对 URL 进行编码,curl 没有,使其更易于从命令行使用)。

Unicode 代码点 8211 是 EN DASH(十六进制 2013)。

CONSTRUCT 中的 LIMIT 是图形模式中的行数,而不是 CONSTRUCT 模板。您可能会得到更多的三元组,这些三元组被 SELECT ... LIMIT 覆盖。在 SELECT 中尝试更大的 LIMIT 并查看它是否中断。

于 2012-11-30T10:18:57.467 回答