1. RDF 入门

RDF(Resource Description Framework)是由W3C规定的,描述资源(resource)的数据模型(data model),;

RDF 使用Web标识符来标识事物,并通过属性和属性值来描述资源;

属性:拥有名称的资源,如:人的全名(FullName),职位等;

属性值:某个属性的值,如:JohnSmith;

/**

* 使用Jena表示上图

*/

// 定义

static String personURI = "http://localhost:8080/JohnSmith";

static String fullName = "John Smith";

// 创建空的Model, 即图(Graph)

Model model = ModelFactory.createDefaultModel();

// 创建资源

Resource johnSmith = model.createResource(personURI);

// 添加属性

johnSmith.addProperty(VCARD.FN, fullName);

/**

* 或者

*/

Resource johnSmith = model.createResource(personURI)

.addProperty(VCARD.FN, fullName);

/**

* 更加复杂的图形表示(资源表示中存在空节点)

*/

public class Tutorial2{

public static void main(String[] args){

String personURI = "http://localhost:8080/JohnSmith";

String givenName = "John";

String familyName = "Smith";

String fullName = givenName + " " + familyName;

// 创建Model

Model model = ModelFactory.createDefaultModel();

// 创建Resource,并添加属性

Resource johnSmith = model.createResource(personURI)

.addProperty(VCARD.FN, fullName)

.addProperty(VCARD.N,

model.createResource()

.addProperty(VCARD.Given, givenName)

.addProperty(VCARD.Family, familyName));

}

}

2. RDF Statements(RDF 陈述)

资源,属性和属性值的组合可形成一个陈述;

陈述(Statement)包括:

subject(主体)

predicate(谓语)

object(客体)

/**

* 使用Statement,读取RDF内容(使用上面的代码)

*/

StmtIterator iter = model.listStatements();

while(iter.hasNext()){

// 打印 subject,predicate, object

Statement stmt = iter.nextStatement();

Resource subject = stmt.getSubject();

Property predicate = stmt.getPredicate();

RDFNode object = stmt.getObject();

System.out.print(subject.toString());

System.out.print(" " + predicate.toString() + " ");

if(object instanceof Resource){

// 如果为 资源

System.out.print(object.toString());

} else {

// 如果为文本

System.out.print(" \"" + object.toString() + "\"");

}

System.out.println(" .");

}

// 上述代码,可以简写为: model.write(System.out, "N-TRIPLES");

### 输出结果:

735a32cc-f7a3-4be5-b70f-9689fcd5a4b4 http://www.w3.org/2001/vcard-rdf/3.0#Family "Smith" .

735a32cc-f7a3-4be5-b70f-9689fcd5a4b4 http://www.w3.org/2001/vcard-rdf/3.0#Given "John" .

http://localhost:8080/JohnSmith http://www.w3.org/2001/vcard-rdf/3.0#N 735a32cc-f7a3-4be5-b70f-9689fcd5a4b4 .

http://localhost:8080/JohnSmith http://www.w3.org/2001/vcard-rdf/3.0#FN "John Smith" .

3. RDF 的写和读

/**

* RDF XML 格式输出

*/

public class Tutorial2{

public static void main(String[] args){

String personURI = "http://localhost:8080/JohnSmith";

String givenName = "John";

String familyName = "Smith";

String fullName = givenName + " " + familyName;

// 创建Model

Model model = ModelFactory.createDefaultModel();

// 创建Resource,并添加属性

Resource johnSmith = model.createResource(personURI)

.addProperty(VCARD.FN, fullName)

.addProperty(VCARD.N,

model.createResource()

.addProperty(VCARD.Given, givenName)

.addProperty(VCARD.Family, familyName));

// RDF xml 格式输出

model.write(System.out);

}

}

### 输出结果:

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:vcard="http://www.w3.org/2001/vcard-rdf/3.0#">

Smith

John

John Smith

/**

* 读取 RDF/XML 格式的文件

* 下载地址:http://jena.apache.org/tutorials/sparql_data/vc-db-1.rdf

*/

// 创建空Model

Model model = ModelFactory.createDefaultModel();

// 使用FileManager,获取输入流

String inputFileName = "";

InputStream in = FileManager.get().open(inputFileName);

if(in == null){

throw new IllegalArgumentException(

"File: " + inputFileName + " not found.");

)

}

// 读取 RDF/XML 文件

model.read(in, null);

// 将读取的内容,输出到控制台

model.write(System.out);

4. 操作Model

/**

* 获取Model中存储的信息(接上例)

*/

// 如果存在,直接返回;不存在,则新创建一个,再返回

String johnSmithURI = "http://somewhere/JohnSmith";

Resource vcard = model.getResource(johnSmithURI);

// 获取资源的属性(该属性可能为资源,或者文本)

// 若为资源:

Resource name = vcard.getProperty(VCARD.N)

.getResource();

// 若为文本:

String fullName = vcard.getProperty(VCARD.FN)

.getString();

// 如果存在多个同名属性:

StmtIterator iter = vcard.listProperties("属性名");

while(iter.hasNext()){

System.out.println(iter.nextStatement()

.getObject()

.toString());

}

/**

* 根据属性(Property)搜索Model(接上例)

*/

// 搜索属性名为:VCARD.FN

ResIterator iter = model.listSubjectsWithProperty(VCARD.FN);

if(iter.hasNext()){

System.out.println("The database contains vcards for:");

while(iter.hasNext()){

System.out.println(" " + iter.nextResource()

.getProperty(VCARD.FN)

.getString());

}

} else {

System.out.println("No vcards were found in the database.");

}

// 精细化搜索:属性名为 VCARD.FN, 且属性值以 “Smith” 结尾

// model.listStatements(Selector s)

// Selector selector = new SimpleSelector(subject, predicate, object);

StmeIterator iter = model.listStatements(

new SimpleSelector(null, VCARD.FN, (RDFNode)null){

public boolean selects(Statement s){

return s.getString().endsWith("Smith");

}

}

);

5. RDF 集合(Container)

mysql jena rdf_Jena 操作 RDF 文件相关推荐

  1. mysql的记录操作的日志文件_MySql 的操作日志 历史记录

    如何查看mysql数据库操作记录日志 1.首先确认你日志是否启用了mysql>show variables like 'log_bin'. 2.如果启用了,即ON,那日志文件就在mysql的安装 ...

  2. mysql jena rdf_RDF结合Jena初步基础学习(一)

    资源具有属性 Jena是一个Java API,可用于创建和操作RDF图,Jena有对象类表示图形,资源,属性和文字 表示资源的接口: Resource 表示属性的接口: Property 表示文字的接 ...

  3. C语言对mysql数据库的操作

    C语言对mysql数据库的操作 原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎 ...

  4. python中csv文件操作_python中操作csv文件

    python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...

  5. mysql ibdata作用_mysql data文件夹下ibdata1 文件作用

    ibdata1这个文件超级大, 查了一下, 大概的作用如下 是储存的格式 INNODB类型数据状态下, ibdata用来储存文件的数据 而库名的文件夹里面的那些表文件只是结构而已 由于mysql4.1 ...

  6. DBA(四):数据读写分离,MySQL多实例操作

    数据读写分离 MySQL读写分离 概念:把客户端查询数据的请求和存储数据的SQL命令,分别给不同的数据库服务器处理 读写分离的原理 由MySQL代理面向客户端提供服务 收到SQL的写请求时,交给mas ...

  7. ECShop的数据操作类文件

    ECShopv2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现.这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小.另外,当网站需 ...

  8. php删除excel文件,php操作excel文件的方法小结

    php操作excel文件的方法小结 php操作excel文件的方法有哪些?就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网! 一.php,不用COM,生成excel文件 ...

  9. mysql 数据表操作 存储引擎介绍

    一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...

  10. 在线小词典(mysql扩展库操作)

    输入英文查询中文 1.建表 create table words( id int primary key auto_increment, enWords varchar(32) not null, c ...

最新文章

  1. Java项目:仓库管理系统设计和实现(java+ssm+springboot+layui)
  2. 矩阵乘法c语言3*3,c语言矩阵相乘
  3. 双面黄琳:世界顶级女黑客,两个孩子的迟钝妈妈
  4. 虚幻引擎学习之路:粒子系统篇(二)
  5. 10个对Web开发者最有用的Python包
  6. PCWorld:Android游戏业务渐露锋芒
  7. linux 水印软件下载,水印美图滤镜相机
  8. ffmpeg处理——*.flv视频文件和*.ass字幕文件合并成mp4
  9. matlab设置图片背景透明_[转载]Matlab中得到透明背景图片的方法
  10. 如何突破社会阶层,向上进阶?
  11. mac下后端开发常用软件
  12. 唯独发奋,努力,勤奋做事才是唯一的出路 C#-患者实体类
  13. 宇视摄像头安装水晶头防护套步骤
  14. python standardprint_Python 机器学习 标准差(Standard Deviation)
  15. 数字电视机顶盒的工作原理
  16. python 由入门到精通,CHM格式文档手册免费下载
  17. 全球十大OTA 谁能有一席之地?
  18. 记我拿到一台MAC电脑后的学习研究心得
  19. (转) tcp的注册端口
  20. python自动化测试岗位_2020自动化测试岗位需求的7项必备技能(更新版)

热门文章

  1. elasticsearch+logstash+kibana+filebeat+kafka
  2. 大数据要学javaweb吗_纠结!Java和大数据学哪个更好?
  3. 《西方哲学史》阅读笔记
  4. 左神算法基础class6—题目2宽度优先遍历和深度优先遍历
  5. Axure rp9 中继器新建表格
  6. 校园网内实现文件共享
  7. mysql数据库SQL语句介绍
  8. 全国增值税发票查验平台验证码识别
  9. 深度思考 | 比低水平效勤奋重要百倍
  10. C#实战之CAD二次开发002:绘制直线和绘制圆