当我使用(dotnetRDF)VDS.RDF.Query.SparqlRemoteEndpoint.QueryWithResultSet()
在http://dbpedia.org/sparql上执行以下查询时,一切正常。
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)
答案 0 :(得分:3)
DBPedia已知编码问题,可能只是DBPedia正在生成dud数据。
您可以尝试在dotNetRDF中进一步调试此操作,即使用以下内容包装调用查询的代码:
try
{
Options.HttpDebugging = true;
Options.HttpFullDebugging = true;
//Try your query here
}
finally
{
Options.HttpDebugging = false;
Options.HttpFullDebugging = false;
}
这将导致解析失败(具有不同的错误),但它会将原始HTTP响应转储到控制台以进行调试。如果您可以编辑您的问题以包含转储第456行附近的内容,那么人们可能会为您提供更多帮助。
修改强>
因为可疑问题确实是DBPedia产生了dud数据,而不是dotNetRDF本身。
当我下载您提到的Turtle格式的文件并尝试解析它时,我收到了相同的错误消息,它与以下行有关:
ns6:Avalon_–_Spiel_um_dein_Leben ,
乍一看可能看起来有效(因为在前缀名称中允许使用简单的连字符-
)问题是它不是连字符,实际上是字符代码8211(作为AndyS提到的hex 2013) )这不在可接受的前缀名称字符范围内。
顺便说一句,我用Jena的Turtle解析器确认了这一点,以确保它确实不是dotNetRDF问题。
所以基本上DBPedia数据被破坏了,您可以尝试通过适当地设置接受标头来强制它将RDF / XML或NTriples发送回去,但不能保证这些格式的数据也不会变坏。我建议您联系DBPedia人员将此报告为错误 - dbpedia-discussion@lists.sf.net
答案 1 :(得分:1)
看到第456行会很有用。尝试使用wget发出请求(它对URL进行编码,curl不会,从命令行中更容易使用)。
Unicode codepoint 8211是EN DASH(hex 2013)。
CONSTRUCT中的LIMIT是图形模式中的行数,而不是CONSTRUCT模板。您可能会获得SELECT ... LIMIT涵盖的更多三元组。在SELECT中尝试更大的LIMIT并查看它是否中断。