【问题标题】:SPARQL XML results from DBpedia and Jena来自 DBpedia 和 Jena 的 SPARQL XML 结果
【发布时间】:2011-07-31 16:57:10
【问题描述】:

我从 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 错误还是其他什么?

编辑:为了完整起见,我报告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 安迪

【问题讨论】:

    标签: sparql jena dbpedia stax


    【解决方案1】:

    XML 结果看起来完全有效(并且可以毫无问题地使用其他工具进行解析),因此这可能是 Jena 的一些问题,尽管考虑到 Jena 框架的相对成熟度,如果它在如此简单且明显的情况下出错,我会感到惊讶有效输入。

    您究竟是如何从 DBPedia 读取 XML 的?我怀疑这个错误可能与 Java 代码中 XML 字符串的检索和格式有关,而不是与 Jena 的代码有关。

    还有为什么要这样,为什么不用ARQ的QueryExecutionFactory.sparqlService(String service, String query)方法呢?

    【讨论】:

    • 我实际上正在使用该方法。我从 ResultSet 中提取了 xml,以指出数据是有效的,但 Jena 抛出了一个奇怪的错误。要获取我使用的 xml: String xmlStr = ResultSetFormatter.asXMLString( res )
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-06
    • 1970-01-01
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    相关资源
    最近更新 更多