2013-11-24 2 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 in advance, Amar.

+0

업그레이드는 항상 좋은 첫 번째 단계입니다. – AndyS

+0

안녕하세요, Andy, 최신 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