2011-04-07 2 views
5

я получаю XML от конечной точки DBpedia SPARQL:SPARQL результаты XML из DBpedia и Йены

<?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() 
    ... 
    } 

I всегда получают следующее исключение:

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) 

Это ошибка Йены или что еще?

EDIT: Для полноты, докладываю a thread about this error:

Когда некоторая помощь из списка рассылки bio2rdf , мы были в состоянии отследить ошибку вниз немного больше.

Арк 2.8.3 работает отлично Арк 2.8.4 не удается с описанной ошибкой Арк 2.8.5 терпит неудачу с описанной ошибкой Поэтому я думаю, я буду держать Art 2.8.3 для моих тестов. Дайте мне знать, если я могу помочь отладить эту ошибку немного больше.

Странно. Ошибка исходит от парсера STAX - весь базовый уровень XML синтаксический анализ субподряда Woodstox. Это почти если он быстрее читает , чем вводит вход, и видит EOF , а не блокирует новый вход. I попытался прочитать весь поток, затем разобрал прочитанные байты и работает ОК. Почему 2.8.3 должен отличаться: непонятно мне на данный момент, это могло бы просто быть сроком.

Временное решение: перейти на XML парсеры с:.

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

перед выполнением вызова QueryExecutionFactory.sparqlService Энди

ответ

2

Результаты XML выглядят вполне допустимо (и анализировать с помощью других инструментов без проблем), так что это может быть какой-то вопрос с Йене, хотя учитывая относительную зрелость Jena framework я был бы удивлен, если бы он ошибся на таком простом и явно действительном входе.

Как именно вы читаете XML из DBPedia? Я подозреваю, что ошибка может быть связана с извлечением и форматированием строки XML в вашем Java-коде, а не с кодом Йены.

И почему это так, почему бы не использовать метод ARQ QueryExecutionFactory.sparqlService(String service, String query)?

+0

Я фактически использую этот метод. Я извлек xml из ResultSet, чтобы указать, что данные действительны, но Йена бросает странную ошибку. Чтобы получить xml, я использую: \t \t String xmlStr = ResultSetFormatter.asXMLString (res) – Mulone

Смежные вопросы