2014-09-24 56 views
-1

當我在java中運行此代碼時,出現錯誤,我認爲發生錯誤是因爲「字符串值」。我不知道如何添加,但我有這個想法,從我剛纔的問題的答案,我問在這個網站Query DBpedia to get abstract for different inputs使用VALUES使用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),其中描述了此代碼中的一些問題。 – 2014-09-24 01:30:28

回答

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的查詢驗證程序中,並且您馬上就會看到問題。

你可以這樣寫查詢:

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

SPARQL Results

如果你只有爲?name的一個值,你沒有選擇這個變量,你可以把它寫在查詢:

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

當我運行這個查詢時,它會給出結果,但是當我在java代碼中保留這個查詢時,它的說法錯誤:語法錯誤,插入「;」在行上完成LocalVariableDeclarationStatement:values?name {「New York」@en} – user2022416 2014-09-24 01:39:36

+0

因此,我需要對我的知識進行一些更改...... :( – user2022416 2014-09-24 01:40:00

+0

您的代碼中的查詢沒有「value」文本;您只是你需要''values?name {\「」+ values +「\」}「''這些引號是很重要的,如果你在發送之前打印你的查詢到DBpedia,你可以很容易地看到它與你在DBpedia的網頁界面輸入的內容不同。 – 2014-09-24 01:41:43