2011-04-07 12 views
5

ottengo il seguente XML dal punto finale DBpedia SPARQL:SPARQL risultati XML da DBpedia e Jena

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

Quando l'ho letto con Jena e cerco di eseguire la scansione:

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

I sempre ottenere la seguente eccezione:

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) 

Si tratta di un bug Jena o cos'altro?

EDIT: Per completezza, segnalo a thread about this error:

Quando qualche aiuto dalla mailing list bio2rdf , siamo stati in grado di monitorare l'errore giù un po 'di più.

Arq 2.8.3 funziona bene 2.8.4 Arq fallisce con l'errore descritto Arq 2.8.5 esito negativo con l'errore descritto Così immagino terrò Art 2.8.3 per i miei test. Fammi sapere se posso aiutare a correggere questo errore un po 'di più su .

Strano. L'errore proviene dal parser STaX - tutto l'XML di livello base viene sottoposto a subappalto a Woodstox. Sta quasi per leggere più velocemente di quanto arriva l'input e vede EOF piuttosto che bloccare per un nuovo input. I ha provato a leggere l'intero stream, quindi analizza i byte letti e funziona OK. Perché 2.8.3 dovrebbe essere diverso è non chiaro per il momento potrebbe solo essere tempismo.

Soluzione: accendere il parser XML con:.

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

prima di effettuare la chiamata a QueryExecutionFactory.sparqlService Andy

risposta

2

I risultati XML sembrano perfettamente valido (e analizzare con altri strumenti senza emissione) quindi questo potrebbe essere qualche problema con Jena anche se data la relativa maturità il framework Jena Sarei sorpreso se si commetterebbe un errore su un input così semplice e ovviamente valido.

Come stai leggendo l'XML da DBPedia? Sospetto che il bug potrebbe avere a che fare con il recupero e il formato della stringa XML nel codice Java piuttosto che con il codice di Jena.

Anche perché farlo in questo modo, perché non utilizzare il metodo QueryExecutionFactory.sparqlService(String service, String query) di ARQ?

+0

Attualmente sto usando quel metodo. Ho estratto l'xml dal ResultSet per far notare che i dati sono validi, ma Jena lancia un bizzarro errore. Per ottenere l'xml che utilizzo: \t \t String xmlStr = ResultSetFormatter.asXMLString (res) – Mulone

Problemi correlati