2012-03-28 50 views
3

我試圖讓使用VC-DB-1.rdf和q1.rq從ARQ例子一些SPARQL查詢時。這是我的java代碼:
NoSuchMethod試圖建立一個SPARQL查詢與耶拿

import com.hp.hpl.jena.rdf.model.*; 
import com.hp.hpl.jena.util.FileManager; 
import com.hp.hpl.jena.query.* ; 
import com.hp.hpl.jena.query.ARQ; 
import com.hp.hpl.jena.iri.*; 
import java.io.*; 
public class querier extends Object 
{ 
static final String inputFileName = "vc-db-1.rdf"; 
public static void main (String args[]) 
{ 
    // Create an empty in-memory model 
    Model model = ModelFactory.createDefaultModel(); 
    // use the FileManager to open the bloggers RDF graph from the filesystem 
    InputStream in = FileManager.get().open(inputFileName); 
    if (in == null) 
    { 
     throw new IllegalArgumentException("File: " + inputFileName + " not found"); 
    } 
    // read the RDF/XML file 
    model.read(in, ""); 
    // Create a new query 
    String queryString = "PREFIX vcard: <http://www.w3.org/2001/vcard-rdf/3.0#> SELECT ?y ?givenName WHERE { ?y vcard:Family \"Smith\" . ?y vcard:Given ?givenName . }"; 
    QueryFactory.create(queryString); 
} 
} 

編譯通過就好。 的問題是,查詢甚至沒有執行,但在行創建它

QueryFactory.create(queryString); 

與下面的解釋中,我得到一個錯誤:

C:\Wallet\projects\java\ARQ_queries>java querier 
Exception in thread "main" java.lang.NoSuchMethodError: com.hp.hpl.jena.iri.IRI. 
resolve(Ljava/lang/String;)Lcom/hp/hpl/jena/iri/IRI; 
    at com.hp.hpl.jena.n3.IRIResolver.resolveGlobal(IRIResolver.java:191) 
    at com.hp.hpl.jena.sparql.mgt.SystemInfo.createIRI(SystemInfo.java:31) 
    at com.hp.hpl.jena.sparql.mgt.SystemInfo.<init>(SystemInfo.java:23) 
    at com.hp.hpl.jena.query.ARQ.init(ARQ.java:373) 
    at com.hp.hpl.jena.query.ARQ.<clinit>(ARQ.java:385) 
    at com.hp.hpl.jena.query.Query.<clinit>(Query.java:53) 
    at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:68) 
    at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:40) 
    at com.hp.hpl.jena.query.QueryFactory.create(QueryFactory.java:28) 
    at querier.main(querier.java:24) 

我怎樣才能解決這個問題?謝謝。

回答

4

它看起來像你錯過了在類路徑中IRI庫(IRI信息庫是從主耶拿JAR分開)。 Jena對Jena發行版的lib目錄中包含的其他幾個庫具有運行時依賴關係。所有這些都需要在運行時在類路徑上(但不一定在編譯時)。

+0

媽的,我已經再次檢查它(後已經3次),發現我所做的classpath中一個錯誤的寫作「iri.jar」(被寫爲「jri.jar」)。謝謝! – twonegatives 2012-03-28 14:35:00

+1

假設Java 6或更高版本,類路徑中的通配符被支持,所以你可以說類似「-cp lib/*」 – Alex 2012-03-28 15:07:44