2011-12-28 8 views
2

TDBを使用してJenaを使用してJavaでクエリを実行しようとしています。だから基本的に私はn3のファイル名song.n3を得て、私はTDBでこれを使用したいこのファイルを使用します。だから私は自分のJava1フォルダ(Netbeansプロジェクトフォルダ)で生成されたディレクトリを作成し、実際のn3ファイルのソースを持っています。このコードを実行すると、エラー "java.lang.NoClassDefFoundError"が発生します。基本的にコードをデバッグすると、次の行によってエラーが発生します。Dataset dataset = TDBFactory.createDataset(directory);.私のディレクトリがモデルなしで空であるため、このエラーがなぜ発生するのか、あまりにもわかりません。TDB Jenaクエリ

public static void main(String[] args) throws IOException { 
    String directory = "./tdb"; 
    Dataset dataset = TDBFactory.createDataset(directory); 
    Model tdb = dataset.getDefaultModel(); 
    String source = "C:\\Users\\Name\\Documents\\NetBeansProjects\\Java1\\src\\song.n3"; 
    FileManager.get().readModel(tdb, source, "N3"); 
    String queryString = "PREFIX owl: <http://www.w3.org/2002/07/owl#> SELECT * WHERE { ?x owl:sameas ?y }"; 

    Query query = QueryFactory.create(queryString); 

    QueryExecution qe = QueryExecutionFactory.create(query, tdb); 
    ResultSet results = qe.execSelect(); 

    ResultSetFormatter.out(System.out, results, query); 

    qe.close(); 
} 
} 

答えて

3

これは私がTDBを使用するときに、私は私のクラスパスにイエナ-TDBのライブラリをロードするには、次のスクリプトを持って、あなたのCLASSPATHに問題があるはずです。..

#!/bin/bash 
CP="." 
for i in ./TDB-0.8.9/lib/*.jar ; do 
    CP=$CP:./TDB-0.8.9/lib/$i 
done 
export CLASSPATH=$CP 

それはbashが、非常に簡単です。 Windowsスクリプトに変換する。要するに、/lib/ディレクトリのすべてのjarファイルがCLASSPATHにあることを確認してください。とにかく、クラスが見つからない完全なjava.lang.NoClassDefFoundErrorを教えてくれれば、それはあなたに欠けているもののヒントを与えるのに役立ちます。おそらくjenaディストリビューションの中で出荷されていないロギングライブラリの一部でしょう。

また、そのowl:sameas述語に注意してください。 SPARQLとRDFは大文字と小文字を区別し、正しい述語はowl:sameAsです。

+1

「for i/.TDB-0.8.9/lib/*.jar」の方がはるかに簡単です。 'do ' - ' ls'を実行するためにサブシェルをforkする必要はありません。もちろん、Java 7では、CLASSPATHにワイルドカードを付けることができるので、その必要はありません。 –

+0

本当にありがとう、イアン。私はなぜそれをしたのか、どこか別のところから奇妙なコピー&ペーストをしています。かわった! –

関連する問題