Jena对RDF相关操作

RDF(资源描述框架)是一个标准的资源描述语言。什么是资源?我们暂且将任何能够识别的东西作为一个资源。比如说你,你的主页,数字1,或者一头大白鲸,都是资源。
主要内容:
1.Statements描述
2.编写一个RDF
3.读取RDF
4.控制prifix
5.管理模型Model
6.对Models的操作
7.更多关于常量的操作
1.Statements
每个RDF模型中的arc(我理解为一组关系,因为RDF语言本身就是一组Triple)可以看做是一个statement。它对资源进行维护,包含以下三个部分:
Subject:就是arc定义的地方,可以理解为Resource
Predicate:表示arc的属性
Object:表示arc指向的对象(或者常量)。
一个RDF模型其实是以一系列的Statement表示的,每个addProperty语句都会同时向模型中添加一个statement。Jena中model的listStatements方法返回一个StmtIterator。它是一个Statement序列,继承自Iterator。Statement中包含getSubject,getPredictate,getObject方法,可以获取到三元组。由于getObject得到的类型有可能是Resource或者Literal,所以在使用的时候要进行判断。
2.编写一个RDF
编写一个RDF主要有三个步骤:
(1)使用ModelFactory的createDefaultModel()方法构造一个空的model。
(2)使用model的createResource方法,通过URI构建资源。
(3)向Resource中添加属性,使用addProperty方法。
3.读写RDF
Jena支持从文件中读写RDF模型
读取:用read方法读入输入流
或者用FileManager.get().readModel(model,文件路径)
写入:用write方法
4.控制prefix
在rdf中,定义的url会自动给予一个变量名,如果要改变这个名字,使用自定义的名字,就要用setNsPrefix(设置的变量名,要设置的uri)方法。
例如,使用前输出结果如下

<rdf:RDF
xmlns:j.0="http://nowhere/else#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:j.1="http://somewhere/else#" >
<rdf:Description rdf:about="http://somewhere/else#root">
<j.1:P rdf:resource="http://somewhere/else#x"/>
<j.1:P rdf:resource="http://somewhere/else#y"/>
</rdf:Description>
<rdf:Description rdf:about="http://somewhere/else#y">
<j.0:Q rdf:resource="http://somewhere/else#z"/>
</rdf:Description>
</rdf:RDF>

加入语句setNsPrefix("nsA",nsA)后,输出结果如下

<rdf:RDF
xmlns:j.0="http://nowhere/else#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:nsA="http://somewhere/else#" >
<rdf:Description rdf:about="http://somewhere/else#root">
<nsA:P rdf:resource="http://somewhere/else#x"/>
<nsA:P rdf:resource="http://somewhere/else#y"/>
</rdf:Description>
<rdf:Description rdf:about="http://somewhere/else#y">
<j.0:Q rdf:resource="http://somewhere/else#z"/>
</rdf:Description>
</rdf:RDF>

可以看到,j.1变成了nsA

5.管理模型
(1)Model的getResource(URI)方法返回一个Resource,如果不存在则新建一个。
(2)返回Property对象:Resource中的getProperty(pname).getObject()方法,因为gerProperty返回的是一个Statement,所以可以使用Statement的方法返回object。
(3)可以向一个Resource中添加多个属性,addProperty().addProperty()。。。。而且一个属性可以有多个值。
6.更多Model上的操作
合并:model.union(model2)
做相交:model.intersection(model2)
做差集:model.difference(model2)
7.对常量的操作
Model.createLiteral()方法可以新建一个常量,并且用到Property中。
在数据类型的property中添加数据对象的时候,可以直接添加。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值