2014-09-24 5 views
-1

자바에서이 코드를 실행하면 오류가 발생합니다. "문자열 값"때문에 오류가 발생했다고 생각합니다. 나는 그것을 추가하는 방법에 대한 확실하지 오전하지만 난이 사이트에 물어 내 앞의 질문의 대답에서이 아이디어를 가지고 Query DBpedia to get abstract for different inputsVALUES를 사용하여 Sparql을 사용하여 DBpedia를 쿼리하십시오.

public static void DbpediaResultSparql() { 
    String values = "New York"; 
    String service = "http://dbpedia.org/sparql"; 

    String sparqlQueryString2 = "PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>"+ 
      "PREFIX dbpedia-owl: <http://dbpedia.org/ontology/>"+ 
      "PREFIX dbpedia: <http://dbpedia.org/resource/>"+ 

       "SELECT DISTINCT ?abstract"+ 
       "WHERE"+ 
       "{ _:b0 rdfs:label ?name ."+ 
        "_:b0 dbpedia-owl:abstract ?abstract"+ 
        "FILTER langMatches(lang(?abstract), 'en')"+ 
        "?name { " + values +" @en }"+ 
       "}" ;     

    Query query = QueryFactory.create(sparqlQueryString2); 
    ARQ.getContext().setTrue(ARQ.useSAX); 
    // Executing SPARQL Query and pointing to the DBpedia SPARQL Endpoint 
    QueryExecution qexec = QueryExecutionFactory.sparqlService(
      "http://DBpedia.org/sparql", query); 
    // Retrieving the SPARQL Query results 
    ResultSet results = qexec.execSelect(); 
    // Iterating over the SPARQL Query results 
    while (results.hasNext()) { 
     QuerySolution soln = results.nextSolution(); 
     // Printing DBpedia entries' abstract. 
     System.out.println(soln.get("?abstract")); 
    } 
    qexec.close(); 
} 
+0

-1 이렇게하면 디버깅 시도가 전혀 표시되지 않습니다. DBpedia로 전송하기 전에 쿼리를 인쇄하면 즉시 여러 가지 문제점이 드러날 것입니다. 이 코드의 몇 가지 문제점을 설명하는 [DBpedia Jena Query가 null을 리턴] (http://stackoverflow.com/q/15663510/1281433)을 참조하십시오. –

답변

2

당신은

"SELECT DISTINCT ?abstract"+ "WHERE" 

"_:b0 dbpedia-owl:abstract ?abstract"+ "FILTER langMatches(lang(?abstract), 'en')" 

과 같은 코드를 가진 유용한 답변을하지 않을거야 그것은

SELECT DISTINCT ?abstractWHERE 

_:b0 dbpedia-owl:abstract ?abstractFILTER 

로 변신 당신은 ?abstractWHERE 또는 ?abstractFILTER라는 이름의 변수를 원하지 않기 때문에. 이것은 어떤 의미가 없습니다

중 하나

String values = "New York"; 
"?name { " + values +" @en }" 

당신은

?name { New [email protected] } 

내가 무엇을 당신이 원하는 것은이라고 기대로 끝날 것

values ?name { "New York"@en } 

내가 좋겠 ParameterizedSparqlStrings을 살펴보고, 줄 바꿈 문자 나 공백 문자를 함께 넣으십시오. 드. 방금 쿼리를 인쇄했다면 sparql.org의 쿼리 유효성 검사기에이 쿼리를 드롭하면 바로 문제를 보았을 것입니다.

당신은이 같은 쿼리를 작성할 수 있습니다 경우에만 ?name에 대한 하나 개의 값이있는 경우

select distinct ?abstract where { 
    values ?name { "New York"@en } 
    [ rdfs:label ?name ; 
    dbpedia-owl:abstract ?abstract ] 
    filter langMatches(lang(?abstract),'en') 
} 

SPARQL Results

을하고 해당 변수를 선택하지 않는, 당신은 단지 그것을 쓸 수 있습니다 검색어 :

select distinct ?abstract where { 
    [ rdfs:label "New York"@en ; 
    dbpedia-owl:abstract ?abstract ] 
    filter langMatches(lang(?abstract),'en') 
} 
+0

이 쿼리를 실행하면 결과가 나타납니다. 그러나이 쿼리를 java 코드에 보관하면 해당 말하는 오류가 발생합니다 : 구문 오류, ";" 값 : name { "New York"@en} – user2022416

+0

그래서 내 지식을 약간 변경해야합니다 ... :( – user2022416

+0

코드의 쿼리에'values'라는 텍스트가 없으므로, ''name = New York @ en} ''값과 같은 것이 필요합니까? name {\ ""+ values ​​+ "\"} "'이러한 따옴표는 중요합니다. DBpedia에 DBpedia의 웹 인터페이스에서 입력하는 것과 다른 점을 쉽게 볼 수 있습니다. –

관련 문제