2012-03-28 3 views
3

ARQ 예제에서 vc-db-1.rdf 및 q1.rq를 사용하여 일부 SPARQL 쿼리를 작성하려고합니다. 여기 내 자바 코드는 다음과 같습니다
jena로 SPARQL 쿼리를 만들려고 할 때 NoSuchMethod

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 라이브러리는 Jena JAR과 별개입니다). Jena는 Jena 배포본의 lib 디렉토리에 포함 된 다른 여러 라이브러리에 런타임 종속성이 있습니다. 이들 모두는 런타임에 클래스 경로에 있어야합니다 (컴파일 타임에 반드시 있어야하는 것은 아닙니다).

+0

젠장, 다시 한번 (이미 3 번) 다시 한번 확인해 본 결과 클래스 패스에 "iri.jar"를 쓰는 실수를 저지른 것을 발견했습니다 ("jri.jar"로 쓰여졌습니다). 고맙습니다! – twonegatives

+1

Java 6 이상을 가정하면 클래스 경로의 와일드 카드가 지원되므로 "-cp lib/*"와 같이 말할 수 있습니다. – Alex

관련 문제