2011-12-28 121 views
2

我正在嘗試使用TDB在Jena中與Jena進行查詢。所以基本上我得到了一個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

這應該是你的CLASSPATH一個問題,當我使用TDB我有以下腳本耶拿-TDB庫加載到我的類路徑..

#!/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/目錄中的所有罐子都在CLASSPATH中。無論如何,這將有助於你給出完整java.lang.NoClassDefFoundError未找到類的地方,這會給你一個缺失的提示。可能有些日誌庫不是在jena發行版中發佈的。

另外,請留意那個owl:sameas謂詞。 SPARQL和RDF區分大小寫,正確的謂詞是owl:sameAs

+1

這樣做會更簡單:'for .i in ./TDB-0.8.9/lib/*.jar;做' - 不需要爲了運行'ls'而使用子shell的分支。當然,在Java 7中,你可以在CLASSPATH上使用通配符,所以你甚至不需要這樣做。 – 2011-12-28 18:16:00

+0

誠然,謝謝伊恩。我不是爲什麼我這樣做,從別的地方複製粘貼。變了! – 2011-12-28 21:22:20