Apache Jena TDB 載入數(shù)據(jù)的方法

Jena-TDB官方文檔 反正我是沒看懂→_→
網(wǎng)上有一些在線的endpoint可以使用嚎货,例如dbpedia的可以戳這里摹蘑,但是在線的endpoint不太穩(wěn)定而且定制性不強沪曙,最要命的是很容易timeout鹊奖,如果想在本地查詢的話就可以搭建一個Jena的環(huán)境吠裆。
安裝的話建議用Maven吧渐逃,官方安裝教程戳這里够掠,這個教程親測沒有問題,就是在pom.xml里添加以下內(nèi)容即可(注意把版本號X.Y.Z改成最新版):

  <dependency>
    <groupId>org.apache.jena</groupId>
    <artifactId>apache-jena-libs</artifactId>
    <type>pom</type>
    <version>X.Y.Z</version> 
  </dependency>

Jena的安裝不是本文的重點茄菊,下面說一下TDB官網(wǎng)的介紹如下

TDB is a component of Jena for RDF storage and query. It support the full range of Jena APIs. TDB can be used as a high performance RDF store on a single machine.

原理我沒有仔細研究疯潭,只說我自己感性的認識就是對于原始數(shù)據(jù)(.nt, .ttl, .xml),第一次需要load進TDB(會花費比較長的時間面殖,取決于數(shù)據(jù)的大惺ā),也就是TDB會對這些數(shù)據(jù)進行自己的索引并存盤脊僚,之后要再查詢就是訪問索引過的TDB數(shù)據(jù)相叁,所以不需要再load,速度就會提升不少吃挑。要把數(shù)據(jù)load進tdb有兩種方式钝荡,一種是通過命令行,一種是通過API舶衬,下面分別進行介紹埠通。

1 API方式

load相關(guān)代碼如下

String directory = "path\\to\\tdb";  //tdb索引希望存放的位置
Dataset dataset = TDBFactory.createDataset(directory); 
dataset.begin(ReadWrite.WRITE);  //開始一個transaction
Model tdb = dataset.getDefaultModel();
String source = "path\\to\\dataset.ttl";  //數(shù)據(jù)文件所在的位置
FileManager.get().readModel(tdb, source);  //讀入數(shù)據(jù)
dataset.commit();  //非常重要!把數(shù)據(jù)真正提交給tdb  
dataset.end();  //結(jié)束一個transaction

以上代碼只需要運行一次逛犹,tdb索引即可建好端辱,下次進行tdb查詢時不需要再進行readModel這一步驟梁剔,相關(guān)查詢代碼如下

String directory = "path\\to\\tdb"; //tdb索引位置,和上面設(shè)置的一樣
Dataset dataset = TDBFactory.createDataset(directory);
Model tdb = dataset.getDefaultModel(); //因為tdb索引已經(jīng)存在舞蔽,所以不需要再指定數(shù)據(jù)文件的位置
String queryString = "SELECT DISTINCT ?p WHERE { ?s ?p ?o. }"; //一個簡單的sparql查詢荣病,返回所有謂詞(相同的只顯示一次)
Query query = QueryFactory.create(queryString);
try(QueryExecution qexec = QueryExecutionFactory.create(query, tdb)){
     ResultSet results = qexec.execSelect();
     ResultSetFormatter.out(System.out, results, query) ;
}

返回的結(jié)果類似于這樣:

-------------------------------------------------------
| 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>      |
-------------------------------------------------------

2 命令行方式

命令行方式更加簡單,下載jena以后解壓渗柿,把文件夾所在位置設(shè)置成一個叫%JENA_HOME%的環(huán)境變量后即可開始操作个盆。在命令行中輸入以下命令load數(shù)據(jù):

>tdbloader --loc=path\to\tdb path\to\dataset.ttl

使用tdbquery進行查詢的語句如下:

>tdbquery --loc=path\to\tdb --query=q1.rq

其中q1.rq中存放的是如下的查詢語句:

SELECT DISTINCT ?p WHERE {?s ?p ?o. }

然后會得到和第一部分相同的結(jié)果。另外想知道數(shù)據(jù)是否load成功可以在命令行中輸入以下語句:

>tdbdump --loc=path\to\tdb

通過這種方式載入的數(shù)據(jù)為default graph朵栖,如果需要載入named graph可以用以下語句:

>tdbloader --loc=path\to\tdb -graph=namedgraph.ttl namedgraph.ttl

補充閱讀:SPARQL by Example 一個我覺得比較棒的SPARQL教程颊亮,還介紹了一些有名的數(shù)據(jù)庫。Jena的sparql教程感覺太簡單了陨溅,W3C上的太繁瑣终惑,這個剛好。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末门扇,一起剝皮案震驚了整個濱河市雹有,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌臼寄,老刑警劉巖霸奕,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脯厨,居然都是意外死亡铅祸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門合武,熙熙樓的掌柜王于貴愁眉苦臉地迎上來临梗,“玉大人,你說我怎么就攤上這事稼跳∶伺樱” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵汤善,是天一觀的道長什猖。 經(jīng)常有香客問我,道長红淡,這世上最難降的妖魔是什么不狮? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮在旱,結(jié)果婚禮上摇零,老公的妹妹穿的比我還像新娘。我一直安慰自己桶蝎,他們只是感情好驻仅,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布谅畅。 她就那樣靜靜地躺著,像睡著了一般噪服。 火紅的嫁衣襯著肌膚如雪毡泻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天粘优,我揣著相機與錄音仇味,去河邊找鬼。 笑死敬飒,一個胖子當著我的面吹牛邪铲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播无拗,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼昧碉!你這毒婦竟也來了英染?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤被饿,失蹤者是張志新(化名)和其女友劉穎四康,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體狭握,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡闪金,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了论颅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片哎垦。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖恃疯,靈堂內(nèi)的尸體忽然破棺而出漏设,到底是詐尸還是另有隱情,我是刑警寧澤今妄,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布郑口,位于F島的核電站,受9級特大地震影響盾鳞,放射性物質(zhì)發(fā)生泄漏犬性。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一腾仅、第九天 我趴在偏房一處隱蔽的房頂上張望乒裆。 院中可真熱鬧,春花似錦攒砖、人聲如沸缸兔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惰蜜。三九已至昂拂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間抛猖,已是汗流浹背格侯。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留财著,地道東北人联四。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像撑教,于是被迫代替她去往敵國和親朝墩。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容