对应eclipse下工程(e:xj3dpro/jenasql/Onto2Database.java)
注明:本文档参考Jena 2.5文档,使用Jena 2.5 API和MySQL 5.0.4-beta-nt数据库。MySQL驱动包使用的是mysql-connector-java-3.1.10-bin.jar。
1 Jena的数据库接口
Jena提供了将RDF数据存入关系数据库的接口,Model、Resource、Query等接口可以用于访问和维护数据库里的RDF数据。在处理数据时,应用程序不必直接操作数据库(而是通过Jena的API),也不必知道数据库的模式。
Jena提供了支持MySQL、HSQLDB、PostgreSQ、Oracle和Microsoft SQL Server的程序接口。有些第三方提供其他数据库接口的支持。可以参考Jena数据库文档获得数据库版本以及对应的JDBC驱动说明。
2 Jena的数据库模式
关系数据库存储RDF数据的一般模式是“三元组”,表有三列(主体、谓词、客体)每个RDF陈述(sataement)占用一行。有时候,添加第四列以表示客体是字符常量还是URI。
Jena 2采用一种denormalized的三元组存储方法,是存储空间和访问时间的一种权衡方法(a space-time trade-off)。Jena使用两类七个表存储本体,第一类是asserted statements,第二类reified statements。
Statement Tables 陈述表
1) Asserted Statement Table (Jena_GiTj_Stmt):存储本体数据
2) Reified Statement Table (Jena_GiTj_Reif):经过处理的本体数据
System Tables 系统表:存储元数据和陈述表中使用的较长的文字或者资源
3) System Statement Table (Jena_Sys_Stmt):存储系统元数据
4) Long Literals Table (Jena_Long_Lit):存储陈述表中不便于直接存储的长字符创常量(Literals)
5) Long Resources Table (Jena_Long_URI):存储陈述表中不便于直接存储的长资源URI
6) Prefixes Table (Jena_Prefix):存储URI的前缀。前缀只存储一次,节省空间。
7) Graph Table (Jena_Graph):存储每一个用户图的名字和唯一标志符。
8) Lock Table (Jena_Mutex):一个没有内容的表。如果该表存在,在一定时间段里数据库被锁定。
可以参照\\Jena-2.5\doc\DB\layout.html获取各个表的详细信息。
3 创建本体的持久模型
Jena同时支持内存模型和数据库模型。一般来讲,创建内存模型只需要调用Jena的一些接口,但创建数据库模型,或者打开先前创建的模型,要求一些具体的步骤。
任何数据库的持久模型通过以下步骤创建:
1) 加载数据库JDBC驱动
2) 创建数据库连接
3) 为数据库创建一个ModelMaker
4) 为本体创建一个模型
4 将本体存入MySQL
使用Jena将本体出入MySQL中的OntoDatabase数据库。完整代码如下:
/** 将本体存入MySQL **/
import java.io.*;
import java.sql.SQLException;
import com.hp.hpl.jena.db.*;
import com.hp.hpl.jena.rdf.model.*;
public class Onto2Database{
public static final String strDriver = "com.mysql.jdbc.Driver"; // path of driver class
public static final String strURL = "jdbc:mysql://localhost/OntoDB"; // URL of database
public static final String strUser = "root"; // database user id
public static final String strPassWord = "onto"; // database password
public static final String strDB = "MySQL"; // database type
public static void main(String[] args){
try{
// 创建一个数据库连接
IDBConnection conn = new DBConnection ( strURL, strUser, strPassWord, strDB );
// 加载数据库驱动类,需要处理异常
try{
Class.forName(strDriver);
}catch(ClassNotFoundException e) {
System.out.println("ClassNotFoundException, Driver is not available...");
}
// 使用数据库连接参数创建一个模型制造器
ModelMaker maker = ModelFactory.createModelRDBMaker(conn);
// 创建一个默认模型,命名为 MyOntology
Model defModel = maker.createModel("MyOntology");
// 准备需要存入数据库的本体文件,建立输入文件流
FileInputStream inputSreamfile = null;
try {
File file = newFile("G:\\eclipse\\workspace.thesis\\data\\MyOntology.owl");
inputSreamfile = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
System.out.println("Ontology File is not available...");
}
InputStreamReader in = null;
try {
in = new InputStreamReader(inputSreamfile, "UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
// 读取文件
defModel.read(in,null);
// 关闭输入流读取器
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 执行数据转换,将本体数据存入数据库
defModel.commit();
// 关闭数据库连接
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}catch(RDFRDBException e){
System.out.println("Exceptions occur...");
}
}
} // 代码结束
5 查看数据库中的本体
执行程序之后,本体被存入MySQL数据库中。主要数据存在两个表中。
1) ontodatabase.jena_g1t1_stmt 存储了本体的数据信息
2) ontodatabase.jena_sys_stmt 存储了本体的元数据信息
可以通过命令行查看或者使用MySQL GUI客户端工具查看。建议使用后者。
本文地址:http://iMarine.blog.163.com/blog/static/51380183200822775118211/
分享到:
相关推荐
以下的文章主要介绍的是使用Jena,将本体文件存入MySQL数据库的实际操作步骤
基于Jena的本体推理,使用sparql语言对本体进行查询。
这是用jena对本体进行解析的很好的一篇文档,大家好好参考哦
JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体到MySQL中,很适合入门,很详细)JENA教程(包括生成RDF和写本体...
Jena实现本体的推理,包括.rules规则等,使用sparql语言对本体进行查询
数据仓库课程上的报告,主要是关于本体的集成,使用到jena
中文关系搜索:关系搜索(Relationship Search)是一种基于互联网海量信息下的以人物为中心的信息聚合的垂直搜索,未来将会为我们关注某些名人和发掘人际关系发挥重要作用,某人还某些人还笑谈说这将会是人肉搜索...
数据库课程报告,jena的笔记综合,清晰列出的笔记
针对本体构建中构造方法不清晰、本体描述语言不统一、可用工具较少的难题,在Jena的基础上提出了基于Jena的本体构建方法。该方法由描述类、描述属性、将属性关联到类、定义实例和加入本体维护元数据5个步骤组成,...
本体,应用程序则是使用Jena来做同样的工作,当然这些应用程序还是得由我 们来编写。其实Protege本身也是在Jena的基础上开发的,你看如果Protege 的console里报异常的话,多半会和Jena有关。最近出了一个Protege OWL...
Jena本体推理详细实例
jena.dll,在、net中用jena操作本体的工具
运用Jena对本体模型进行推理及其应用,详细介绍了一些基于本体推理的方法及一些代码。
该程序为jena操作本体的程序,内容详细明白,推荐研究。
Jena本体操纵类,主要功能是对本体的概念、关系以及实例进行读取分析
本体推理的支持
jena的中文教程,适合不想去官网看原版教程的人。适合新手入门学习jena的基本操作。jena可以解析本体,可以将建模工具和java联系起来