2013-11-24 39 views
0

我正在使用APACHE JENA(2.9.4版本)使用SPARQL查詢獲取結果。以下是我使用的代碼。SPARQL查詢異常

public class DataGeneratorTest { 

public static void main(String[] args) { 

    String query = "PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#> PREFIX owl:<http://dbpedia.org/ontology/> select ?y where { ?x a owl:Person; rdfs:label ?y. FILTER(LANG(?y) = \"en\") } LIMIT 77"; 
    ResultSet resultSet = SparqlUtil.generate(query); 
    ResultSetFormatter.out(System.out, resultSet); 

} 
} 

我有一個實用工具類執行SPARQL查詢...

public class SparqlUtil { 

public static ResultSet generate(String argEndPoint, String argQuery) { 
    Precondition.checkNotEmpty(argQuery); 
    String endPoint = argEndPoint; 
    if (Precondition.checkEmpty(endPoint)) { 
     endPoint = SparqlConstants.SPARQL_ENDPOINT; 
    } 
    QueryExecution queryExecution = null; 
    try { 
     Query query = QueryFactory.create(argQuery); 
     queryExecution = QueryExecutionFactory.sparqlService(endPoint, 
       query); 
     return queryExecution.execSelect(); 
    } finally { 
     if (Precondition.checkNotNull(queryExecution)) { 
      queryExecution.close(); 
     } 
    } 
} 

public static ResultSet generate(String argQuery) { 
    return generate(SparqlConstants.SPARQL_ENDPOINT, argQuery); 
} 
} 

當我運行這段代碼我得到了以下異常。

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[40,26] 
Message: XML document structures must start and end within the same entity. 
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source) 
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.getOneSolution(XMLInputStAX.java:435) 
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.hasNext(XMLInputStAX.java:232) 
at com.hp.hpl.jena.sparql.resultset.ResultSetMem.<init>(ResultSetMem.java:95) 
at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:147) 
at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:130) 
at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:118) 
at com.hp.hpl.jena.sparql.resultset.TextOutput.format(TextOutput.java:65) 
at com.hp.hpl.jena.query.ResultSetFormatter.out(ResultSetFormatter.java:122) 
at com.hp.hpl.jena.query.ResultSetFormatter.out(ResultSetFormatter.java:74) 
at com.data.generator.test.DataGeneratorTest.main(DataGeneratorTest.java:17) 
Exception in thread "main" com.hp.hpl.jena.sparql.resultset.ResultSetException: XMLStreamException:  ParseError at [row,col]:[40,26] 
Message: XML document structures must start and end within the same entity. 
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.staxError(XMLInputStAX.java:539) 
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.hasNext(XMLInputStAX.java:236) 
at com.hp.hpl.jena.sparql.resultset.ResultSetMem.<init>(ResultSetMem.java:95) 
at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:147) 
at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:130) 
at com.hp.hpl.jena.sparql.resultset.TextOutput.write(TextOutput.java:118) 
at com.hp.hpl.jena.sparql.resultset.TextOutput.format(TextOutput.java:65) 
at com.hp.hpl.jena.query.ResultSetFormatter.out(ResultSetFormatter.java:122) 
at com.hp.hpl.jena.query.ResultSetFormatter.out(ResultSetFormatter.java:74) 
at com.data.generator.test.DataGeneratorTest.main(DataGeneratorTest.java:17) 
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[40,26] 
Message: XML document structures must start and end within the same entity. 
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(Unknown Source) 
at  com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.getOneSolution(XMLInputStAX.java:435) 
at com.hp.hpl.jena.sparql.resultset.XMLInputStAX$ResultSetStAX.hasNext(XMLInputStAX.java:232) 
... 8 more 

我想檢索第77個結果只。當我將這個結果集限制爲76時,我能夠在沒有任何異常的情況下獲取結果,但是當我將此限制增加到77時,我得到了上述異常。第77條記錄存在問題。我怎樣才能克服這個問題。我困在這裏。誰可以幫我這個事...???

Thanx提前, 阿馬爾。

+0

升級總是第一步。 – AndyS

+0

嗨安迪,我升級到最新的APACHE JENA(2.11.0)版本。儘管我面臨着同樣的問題。 – Amar

回答

1

什麼是SparqlConstants.SPARQL_ENDPOINT? dbpedia.org限制時間並截斷結果,導致非法XML。這將解釋情況,但不知道第77條是什麼,如果有的話,我們不能說。

+0

嗨,Andy,在這裏** SparqlConstants.SPARQL_ENDPOINT **不過是**「http://dbpedia.org/sparql」**。我正在使用此端點來獲取結果。同時,我從WEB UI測試了這個查詢,我得到了所有結果,沒有任何異常。我該如何解決這個問題...? – Amar