2012-03-28 15 views
3

Ich versuche, einige SPARQL-Abfragen mit Vc-db-1.rdf und q1.rq aus ARQ-Beispielen zu machen. Hier ist mein Java-Code:
NoSuchMethod beim Versuch, eine SPARQL-Abfrage mit Jena zu erstellen

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); 
} 
} 

Compilation geht ganz gut. Das Problem ist, dass die Abfrage nicht einmal ausgeführt wird, aber ich erhalte eine Fehlermeldung es

QueryFactory.create(queryString); 

mit der folgenden Erklärung auf der Leitung während der Erstellung:

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) 

, wie ich das lösen kann? Vielen Dank.

Antwort

4

Offenbar fehlt die IRI-Bibliothek im Klassenpfad (die IRI-Bibliothek ist von der Jena JAR-Hauptversion getrennt). Jena hat Laufzeitabhängigkeiten von mehreren anderen Bibliotheken, die im Verzeichnis lib der Jena-Distribution enthalten sind. All diese müssen zur Laufzeit auf Ihrem Klassenpfad stehen (aber nicht unbedingt zur Kompilierungszeit).

+0

Verdammt, ich habe es noch einmal überprüft (nach bereits 3 mal) und festgestellt, dass ich einen Fehler beim Schreiben von "iri.jar" im Klassenpfad gemacht habe (wurde als "jri.jar" geschrieben). Danke! – twonegatives

+1

Unter der Annahme, dass Java 6 oder höher ist, werden Platzhalter im Klassenpfad unterstützt. Sie könnten also etwas wie "-cp lib/*" sagen. – Alex