Mul*_*one 5 stax sparql jena dbpedia
我从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>
Run Code Online (Sandbox Code Playgroud)
当我用Jena阅读它时,我尝试扫描它:
ResultSet r = ResultSetFactory.fromXML( xmlCode );
while ( r.hasNext() ) {
QuerySolution soln = r.next()
...
}
Run Code Online (Sandbox Code Playgroud)
我总是得到以下异常:
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)
Run Code Online (Sandbox Code Playgroud)
这是耶拿虫还是其他什么?
编辑:为了完整性,我报告一个关于此错误的线程:
当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 Andy之前
XML 结果看起来完全有效(并且使用其他工具进行解析没有问题),因此这可能是 Jena 的一些问题,尽管考虑到 Jena 框架的相对成熟度,如果它在如此简单且明显有效的输入上出错,我会感到惊讶。
您到底是如何从 DBPedia 读取 XML 的?我怀疑该错误可能与 Java 代码中 XML 字符串的检索和格式有关,而不是与 Jena 的代码有关。
还有为什么要这样做,为什么不使用ARQ的QueryExecutionFactory.sparqlService(String service, String query)方法呢?