2011-04-11 260 views
1

我有一個本地版本的LinkedMDB,它是N-Triples格式並且想查詢它。現在,我想要使用Jena TDB,它可以存儲稍後可用於查詢的數據。我檢查了documentation for TDB Java API,但無法加載N-Triples文件,然後使用SPARQL進行查詢。我用下面的代碼:如何使用Jena TDB存儲本地版本的鏈接電影數據庫

String directory = "E:\\Applications\\tdb-0.8.9\\TDB-0.8.9\\bin\\tdb"; 
     Dataset dataset = TDBFactory.createDataset(directory); 

     // assume we want the default model, or we could get a named model here 
     Model tdb = dataset.getDefaultModel(); 

     // read the input file - only needs to be done once 
     String source = "E:\\Applications\\linkedmdb-18-05-2009-dump.nt"; 
     FileManager.get().readModel(tdb, source, "N-TRIPLES"); 

,並得到下面的異常

Exception in thread "main" com.hp.hpl.jena.tdb.base.file.FileException: Not a directory: E:\Applications\tdb-0.8.9\TDB-0.8.9\bin\tdb 
    at com.hp.hpl.jena.tdb.base.file.Location.<init>(Location.java:83) 
    at com.hp.hpl.jena.tdb.TDBFactory.createDataset(TDBFactory.java:79) 
    at tutorial.Temp.main(Temp.java:14) 
+0

如果E:\ Applications \ tdb-0.8.9 \ TDB-0.8.9 \ bin \ tdb目錄尚不存在,您必須先創建它。但是,您可能應該將數據存儲在TDB安裝位置以外的其他目錄(即與您的應用程序相關的某個目錄)中。例如,考慮下載未來版本的TDB時會發生什麼。 – 2011-04-13 09:40:06

回答

2

讀入

bin/tdbquery --loc /path/to/tdb/store "select ...." 

更多信息TDB支持Model從Java很簡單,看the TDB wiki瞭解詳情。例如,你可以:

// open TDB dataset 
String directory = "./tdb"; 
Dataset dataset = TDBFactory.createDataset(directory); 

// assume we want the default model, or we could get a named model here 
Model tdb = dataset.getDefaultModel(); 

// read the input file - only needs to be done once 
String source = "path/to/input.nt"; 
FileManager.get().readModel(tdb, source, "N-TRIPLES"); 

// run a query 
String q = "select * where {?s ?p ?o} limit 10"; 
Query query = QueryFactory.create(q); 
QueryExecution qexec = QueryExecutionFactory.create(query, tdb); 
ResultSet results = qexec.execSelect(); 
... etc ... 

正如user205512所說,你可以使用tdbloader2從Linux或Mac上的命令行,這將是對大型RDF文件的速度。一旦創建了TDB索引,就可以將文件複製到其他機器。因此,您可以將數據加載到Linux服務器上,然後將tdb目錄中的所有文件發送到Windows計算機以繼續開發。

要從Windows機器上的命令行運行tdbloader,您需要使用類似cygwin的東西來允許您運行Unix樣式的腳本。您還需要設置環境變量TDBROOT

+0

所以,首先我需要使用tdbloader2加載文件,然後使用您提供的代碼來查詢它 – ProgramME 2011-04-13 07:51:54

+0

請參閱我使用的代碼 – ProgramME 2011-04-13 08:04:22

+0

使用tdbloader/tdbloader2是上述代碼示例中「讀取輸入文件」步驟的替代方法。你可以這樣做;你不必這樣做。 – 2011-04-13 09:38:49

0

假設「NT格式」真的「N-三」,那麼耶拿Model.read(is, base, lang)方法將加載N-如果lang"N-Triple"則爲三重格式。請參閱Jena tutorial document

+0

我知道這個,但問題是該文件的大小爲850 MB,導致堆溢出exception.so,我想存儲在tdb中的文件數據 – ProgramME 2011-04-11 17:25:02

2

你不需要任何Java代碼來做到這一點(tdbloader2更快):

bin/tdbloader2 --loc /path/to/tdb/store imdb.nt 

將在正三重文件加載。您可以使用以下方式查詢它:在TDB命令行工具here

+0

我正在構建一個查詢NT文件的應用程序。是否有任何Java代碼來執行this.i不能從命令行一直做到這一點 – ProgramME 2011-04-11 17:20:55

+0

tdbloader2 doenot在窗口上工作 – ProgramME 2011-04-11 17:36:13

+0

當我嘗試tdbloader我得到:'tdbloader'不被識別爲內部或外部命令, 可操作程序或批處理文件 – ProgramME 2011-04-11 17:43:59