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:有序集合。

Leave a Reply

Your email address will not be published. Required fields are marked *