Jena是Java語言編寫的操作RDF文檔的接口。現在我主要是用它將protégé生成的本體模型存入數據庫,並且今後可能同樣使用Jena來修改數據庫中的本體數據。
關於Jena的學習方法,我從網上搜了一些,覺得用處不大。探索發現:學習Jena自己的文檔纔是王道!(http://jena.sourceforge.net/tutorial/RDF_API/index.html)
下面簡要總結一下我的學習所得。
(一)RDF的組成
我們通常會畫一個類似如下圖的本體模型(截圖來自上面提到的網址):
上圖我們可以稱之爲RDF模型。關係數據庫存儲RDF數據的一般模式是三元組(triple),也稱爲RDF描述(statement)。這個三元組包括:主體(subject)、謂詞(predicate)、客體(object)。主體是資源(resource)。謂詞就相當於關係(property),也就是圖中帶箭頭的連線。客體可能是資源也可能是文字(literal),如圖,當客體還有子節點時,它是資源,而當客體是葉子節點時,它是文字。
這裏我們要注意:RDF模型是statement的集合,因此其中不允許包含重複項。
(二)Write RDF
在之前的文章中我提到過,RDF的鼻祖是XML。換句話說,RDF是用XML語法來描述的。具體說來,Jena中提供有三種方式來將RDF模型轉化爲XML語言的描述:
(1)默認方式——dumb:
在這種方式下,是不允許空白節點存在的。注意截圖中的nodeID,其實它就是我們上圖模型中的那個空白節點。但因爲該方式不允許存在空白節點,所以Jena才爲它添加了一個相對地址的URI。
(2)PrettyWriter(RDF/XML-ABBREV):
該方式採用縮寫語法來使得表示空白節點成爲可能。不過對於非常大的模型而言,該方式效率較低。
(3)N-TRIPLE:
該格式同時保證了效率以及空白節點的表示兩大要求。
(三)Read RDF
(四)URI的縮寫
RDF文檔只支持完整的URI,但爲了方便,Jena引入了命名空間來進行縮寫。下面是未縮寫前和縮寫後的對比:
(1)未縮寫:
(2)縮寫後:
(3)兩個都縮寫後:
(五)查詢模型
其查詢能力不如RDQL,但仍可簡單返回對應資源。
(六)操作模型
Jena提供了三個方法操作模型,分別是並、交、差,對應語法如下:
(1)並:Model model = model1.union(model2);
(2)交:Model model = model1.intersection(model2);
(3)差:Model model = model1.difference(model2);
(七)Container
RDF定義了一類特殊的資源用來代表事物的集合,這就是Container。Container的成員包括literals和resources兩種。而Container有三種形式:
(1)BAG:無序集合;
(2)ALT:無序,用於表示可選項,它的rdf:_1 property代表默認選項;
(3)SEQ:有序集合。
這是我的初步學習筆記,以後有更新的內容再分享上來。更多內容歡迎大家訪問我的個人博客:溫馨咖啡小屋http://warmcafe.info