来自 DBpedia 和 Jena 的 SPARQL XML 结果

发布于 2024-10-31 03:48:36 字数 2171 浏览 4 评论 0原文

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

编辑:为了完整起见,我报告关于这个错误

当来自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 安迪

I get the following XML from the DBpedia SPARQL end point:

<?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>

When I read it with Jena and I try to scan it:

  ResultSet r = ResultSetFactory.fromXML( xmlCode );
  while ( r.hasNext() ) {
    QuerySolution soln = r.next()
    ...
  }

I always get the following exception:

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)

Is this a Jena bug or what else?

EDIT: For completeness, I report a thread about this error:

When some help from the bio2rdf
mailing list, we were able to track
the error down a bit more.

Arq 2.8.3 works fine Arq 2.8.4 fails
with the described error Arq 2.8.5
fails with the described error So I
guess I will keep Art 2.8.3 for my
tests. Let me know if I can help to
debug this error a bit more.

Weird. The error is coming from the
STaX parser - all the base level XML
parsing is subcontracted to Woodstox.
It's almost if it is reading faster
than the input arrives and sees EOF
rather than blocking for new input. I
tried reading the whole stream then
parsing the bytes read and it works
OK. Why 2.8.3 should be different is
unclear to me at the moment it might
just be timing.

Workaround: switch the XML parsers
with:

ARQ.getContext().setTrue(ARQ.useSAX) ;

before making the call to
QueryExecutionFactory.sparqlService
Andy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

半暖夏伤 2024-11-07 03:48:36

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

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

另外为什么要这样做,为什么不使用 ARQ 的 QueryExecutionFactory.sparqlService(String service, String query) 方法呢?

The XML results look perfectly valid (and parse with other tools without issue) so this may be some issue with Jena though given the relative maturity of the Jena framework I'd be surprised if it would error on such a simple and obviously valid input.

How exactly are you reading the XML from DBPedia? I'd suspect that the bug might have to do with the retrieval and format of the XML string in your Java code rather than with Jena's code.

Also why do it this way, why not use ARQ's QueryExecutionFactory.sparqlService(String service, String query) method?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文