有兩種方法可以通過API或CMD將數據加載到tdb中。多得益於@ASKW並經由API @AndyS
1裝入數據
這些代碼需要被執行一次尤其是readModel
線這將花費很長的時間。
String directory = "tdb";
Dataset dataset = TDBFactory.createDataset(directory);
dataset.begin(ReadWrite.WRITE);
Model tdb = dataset.getDefaultModel();
String source = "yagoMetaFacts.ttl";
FileManager.get().readModel(tdb, source);
dataset.commit(); //Important!! This is to commit the data to tdb.
dataset.end();
的數據加載到TDB後,我們可以用以下代碼來查詢。而且不需要再次加載數據。通過CMD
String directory = "path\\to\\tdb";
Dataset dataset = TDBFactory.createDataset(directory);
Model tdb = dataset.getDefaultModel();
String queryString = "SELECT DISTINCT ?p WHERE { ?s ?p ?o. }";
Query query = QueryFactory.create(queryString);
try(QueryExecution qexec = QueryExecutionFactory.create(query, tdb)){
ResultSet results = qexec.execSelect();
ResultSetFormatter.out(System.out, results, query) ;
}
2加載數據
加載數據
>tdbloader --loc=path\to\tdb path\to\dataset.ttl
要查詢
>tdbquery --loc=path\to\tdb --query=q1.rq
q1.rq是存儲查詢文件 應該得到的結果像這樣
-------------------------------------------------------
| p |
=======================================================
| <http://yago-knowledge.org/resource/hasGloss> |
| <http://yago-knowledge.org/resource/occursSince> |
| <http://yago-knowledge.org/resource/occursUntil> |
| <http://yago-knowledge.org/resource/byTransport> |
| <http://yago-knowledge.org/resource/hasPredecessor> |
| <http://yago-knowledge.org/resource/hasSuccessor> |
| <http://www.w3.org/2000/01/rdf-schema#comment> |
-------------------------------------------------------
當然,如果你調用'readModel'的話。你爲什麼不嘗試沒有這條線? – AKSW
嗨,我嘗試運行沒有readModel線,但我沒有得到結果。如果我不指出我需要的數據集,tdb如何知道要使用哪個數據集? – Charlotte
我想你必須調用'tdb.commit',參見https://jena.apache.org/documentation/tdb/tdb_transactions.html#write-transactions – AKSW