Jena学习笔记

        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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章