mysql jena rdf_Jena 操作 RDF 文件
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 文件相关推荐
- mysql的记录操作的日志文件_MySql 的操作日志 历史记录
如何查看mysql数据库操作记录日志 1.首先确认你日志是否启用了mysql>show variables like 'log_bin'. 2.如果启用了,即ON,那日志文件就在mysql的安装 ...
- mysql jena rdf_RDF结合Jena初步基础学习(一)
资源具有属性 Jena是一个Java API,可用于创建和操作RDF图,Jena有对象类表示图形,资源,属性和文字 表示资源的接口: Resource 表示属性的接口: Property 表示文字的接 ...
- C语言对mysql数据库的操作
C语言对mysql数据库的操作 原文:C语言对mysql数据库的操作 这已经是一相当老的话题.不过今天我才首次使用,把今天的一些体会写下来,也许能给一些新手带来一定的帮助,更重要的是供自己今后忘记的怎 ...
- python中csv文件操作_python中操作csv文件
python中操作csv文件 读取csv improt csv f = csv.reader(open("文件路径","r")) for i in f: pri ...
- mysql ibdata作用_mysql data文件夹下ibdata1 文件作用
ibdata1这个文件超级大, 查了一下, 大概的作用如下 是储存的格式 INNODB类型数据状态下, ibdata用来储存文件的数据 而库名的文件夹里面的那些表文件只是结构而已 由于mysql4.1 ...
- DBA(四):数据读写分离,MySQL多实例操作
数据读写分离 MySQL读写分离 概念:把客户端查询数据的请求和存储数据的SQL命令,分别给不同的数据库服务器处理 读写分离的原理 由MySQL代理面向客户端提供服务 收到SQL的写请求时,交给mas ...
- ECShop的数据操作类文件
ECShopv2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现.这样做的好处是实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小.另外,当网站需 ...
- php删除excel文件,php操作excel文件的方法小结
php操作excel文件的方法小结 php操作excel文件的方法有哪些?就跟随百分网小编一起去了解下吧,想了解更多相关信息请持续关注我们应届毕业生考试网! 一.php,不用COM,生成excel文件 ...
- mysql 数据表操作 存储引擎介绍
一 什么是存储引擎? 存储引擎就是表的类型. mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制 ...
- 在线小词典(mysql扩展库操作)
输入英文查询中文 1.建表 create table words( id int primary key auto_increment, enWords varchar(32) not null, c ...
最新文章
- Java项目:仓库管理系统设计和实现(java+ssm+springboot+layui)
- 矩阵乘法c语言3*3,c语言矩阵相乘
- 双面黄琳:世界顶级女黑客,两个孩子的迟钝妈妈
- 虚幻引擎学习之路:粒子系统篇(二)
- 10个对Web开发者最有用的Python包
- PCWorld:Android游戏业务渐露锋芒
- linux 水印软件下载,水印美图滤镜相机
- ffmpeg处理——*.flv视频文件和*.ass字幕文件合并成mp4
- matlab设置图片背景透明_[转载]Matlab中得到透明背景图片的方法
- 如何突破社会阶层,向上进阶?
- mac下后端开发常用软件
- 唯独发奋,努力,勤奋做事才是唯一的出路 C#-患者实体类
- 宇视摄像头安装水晶头防护套步骤
- python standardprint_Python 机器学习 标准差(Standard Deviation)
- 数字电视机顶盒的工作原理
- python 由入门到精通,CHM格式文档手册免费下载
- 全球十大OTA 谁能有一席之地?
- 记我拿到一台MAC电脑后的学习研究心得
- (转) tcp的注册端口
- python自动化测试岗位_2020自动化测试岗位需求的7项必备技能(更新版)