我从DBpedia SPARQL端点获取以下XML:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="onto"/>
</head>
<results>
<result>
<binding name="onto">
<uri>http://www.w3.org/2002/07/owl#Thing</uri>
</binding>
</result>
<result>
<binding name="onto">
<uri>http://www.w3.org/2002/07/owl#Thing</uri>
</binding>
</result>
<result>
<binding name="onto">
<uri>http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing</uri>
</binding>
</result>
</results>
</sparql>
当我和Jena一起阅读时,我尝试扫描它:
ResultSet r = ResultSetFactory.fromXML( xmlCode );
while ( r.hasNext() ) {
QuerySolution soln = r.next()
...
}
我总是得到以下异常:
com.hp.hpl.jena.sparql.resultset.ResultSetException: End of document while processing solution
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.staxError(XMLInputStAX.java:503)
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.getOneSolution(XMLInputStAX.java:413)
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.hasNext(XMLInputStAX.java:218)
这是Jena bug还是其他什么?
编辑:为了完整起见,我举报a thread about this error:
来自bio2rdf的一些帮助 邮件列表,我们能够跟踪 错误更多了。
Arq 2.8.3工作正常Arq 2.8.4失败 描述错误Arq 2.8.5 失败了所描述的错误所以我 我猜我会保留Art 2.8.3 试验。如果我能帮忙,请告诉我 再调试这个错误。
怪异。错误来自于 STaX解析器 - 所有基本级XML 解析被转包给Woodstox。 这几乎是因为阅读速度更快 比输入到达并看到EOF 而不是阻止新的输入。一世 然后尝试阅读整个流 解析读取的字节,它的工作原理 好。为什么2.8.3应该是不同的 目前我不清楚它可能 只是时机。
解决方法:切换XML解析器 用:
ARQ.getContext()。setTrue(ARQ.useSAX);
在打电话之前QueryExecutionFactory.sparqlService 安迪
答案 0 :(得分:2)
XML结果看起来完全有效(并且没有问题地解析其他工具)所以这可能是Jena的一些问题,但是鉴于Jena框架的相对成熟度我会感到惊讶,如果它会在如此简单的情况下出错那么明显有效的输入。
您究竟是如何从DBPedia中读取XML的?我怀疑这个bug可能与Java代码中的XML字符串的检索和格式有关,而不是与Jena的代码有关。
为什么这样做,为什么不使用ARQ的QueryExecutionFactory.sparqlService(String service, String query)
方法?