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