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.6.4\doc\DB\layout.html获取各个表的详细信息。

3 创建本体的持久模型

Jena同时支持内存模型和数据库模型。一般来讲,创建内存模型只需要调用Jena的一些接口,但创建数据库模型,或者打开先前创建的模型,要求一些具体的步骤。

任何数据库的持久模型通过以下步骤创建:

1)         加载数据库JDBC驱动

2)         创建数据库连接

3)         为数据库创建一个ModelMaker

4)         为本体创建一个模型

4 将本体持久化存入MySQL中

1) 其中数据库的配置文件为:

jdbc.drivers=com.mysql.jdbc.Driver

jdbc.url=jdbc\:mysql\://localhost\:3306/ontologies?useUnicode\=true&characterEncoding\=UTF-8

jdbc.username=root

jdbc.password=root

2) 实例类

importjava.io.File;

importjava.io.FileInputStream;

importjava.io.FileNotFoundException;

importjava.io.IOException;

importjava.io.InputStreamReader;

importjava.io.UnsupportedEncodingException;

importjava.sql.SQLException;

importcom.hp.hpl.jena.db.DBConnection;

importcom.hp.hpl.jena.db.IDBConnection;

importcom.hp.hpl.jena.db.RDFRDBException;

importcom.hp.hpl.jena.ontology.OntModel;

importcom.hp.hpl.jena.ontology.OntModelSpec;

importcom.hp.hpl.jena.rdf.model.Model;

importcom.hp.hpl.jena.rdf.model.ModelFactory;

importcom.hp.hpl.jena.rdf.model.ModelMaker;

importedu.hrbeu.ontology.util.getDBPropeties;

/**

* @purpose 本体数据库功能

* @author zhaohongjie

*

*/

publicclassOntologyDBImplimplementsIOntologyDB {

/**

* 数据库连接对象

*/

privateIDBConnection conn =null;

/**

* 文件输入流对象

*/

privateInputStreamReader in =null;

/**

* 获取数据连接

* @return

*/

privateIDBConnection getDBConn() {

getDBPropeties getdb = newgetDBPropeties();

try{

this.conn =newDBConnection(getdb.getUrl(), getdb.getUser(), getdb.getPassword(),"MySQL");

Class.forName(getdb.getClassDrive());

} catch(RDFRDBException e) {

System.out.println("Exceptions occur...");

} catch(ClassNotFoundException e) {

System.out.println("ClassNotFoundException, Driver is not available...");

}

returnthis.conn;

}

/**

* 从数据流获取本体

* @param filePath

*/

publicInputStreamReader getFileStream(String filePath) {

FileInputStream inputSreamfile = null;

try{

File file = newFile(filePath);//"./Expert.owl"

inputSreamfile = newFileInputStream(file);

} catch(FileNotFoundException e) {

e.printStackTrace();

System.out.println("Ontology File is not available...");

}

try{

this.in =newInputStreamReader(inputSreamfile,"UTF-8");

} catch(UnsupportedEncodingException e) {

e.printStackTrace();

}

returnthis.in;

}

/**

* 将本体存入数据库

* @param ontoName

*/

publicvoidtoMySQL(String ontoName) {

ModelMaker maker = ModelFactory.createModelRDBMaker(getDBConn());

Model defModel = maker.createModel(ontoName); //"expert"

defModel.read(in,null);

defModel.commit();

closeDBResource();

}

/**

* OntModelSpec

* @param maker

* @return

*/

privateOntModelSpec getModelSpec(ModelMaker maker) {

OntModelSpec spec = newOntModelSpec(OntModelSpec.OWL_MEM);

spec.setImportModelMaker(maker);

returnspec;

}

/**

* 返回本体

* @param ontoName

* @return

*/

privateOntModel getModelFromDB(String ontoName) {

ModelMaker maker = ModelFactory.createModelRDBMaker(getDBConn());

Model base = maker.getModel(ontoName);

OntModel newmodel = ModelFactory.createOntologyModel(getModelSpec(maker), base);

returnnewmodel;

}

/**

* 获取本体对象

* @param ontoName

*/

publicOntModel fromMySQL(String ontoName) {

OntModel model = getModelFromDB(ontoName);

returnmodel;

}

/**

* 关闭占用资源

*/

privatevoidcloseDBResource() {

closeFileStream();

closeDBConn();

}

/**

* 关闭数据流

*/

privatevoidcloseFileStream() {

try{

this.in.close();

} catch(IOException e) {

e.printStackTrace();

}

}

/**

* 关闭数据库连接

*/

publicvoidcloseDBConn() {

try{

if(this.conn !=null) {

this.conn.close();

}

} catch(SQLException sqlEx) {

sqlEx.printStackTrace();

}

}

}

3) mian函数

publicstaticvoidmain(String[] args) {

String ruleFile = "file:./expert/Expert.rules";

IOntologyDB ontoDB = OntologyDBFactory.createDBont();

ontoDB.getFileStream(ruleFile);

ontoDB.toMySQL("expert");

ontoDB.closeDBConn();

}

rdf mysql持久化l_Jena 利用数据库保存,持久化本体相关推荐

  1. rdf mysql持久化l_Redis进阶(数据持久化RDF和AOF)

    聊一下Redis的持久化原理 大家都知道,Redis之所以性能好,读写快,是因为Redis是一个内存数据库,它的操作都几乎基于内存.但是内存型数据库有一个很大的弊端,就是当数据库进程崩溃或系统重启的时 ...

  2. mysql的代码需要保存吗_php向Mysql数据库保存数据的代码

    php向Mysql数据库保存数据的代码 PHP如何向MySQL数据库中写入数据你知道吗?你对PHP向MySQL数据库中写入数据了解吗?下面是小编为大家带来的php向Mysql数据库保存数据的`代码,欢 ...

  3. mysql binlog elk_利用MySQL的binlog日志文件恢复数据库

    一.新建一个数据库test 在库里新建一个数据表test ,并插入几条数据 mysql>create database test CHARSET utf8; Query OK, 1 row af ...

  4. Jsoup:使用Java将爬虫得到的数据写入Excel,Jsoup得到的数据进行持久化,爬虫数据保存到本地Excel中

    Jsoup:使用Java将爬虫得到的数据写入Excel,Jsoup得到的数据进行持久化,爬虫数据保存到本地Excel中 一.资源 EasyExcel使用教程 Jsoup爬虫教程 二.代码 xml依赖 ...

  5. mysql客户端查询_MySQL数据库之利用mysql客户端查询UCSC数据库

    本文主要向大家介绍了MySQL数据库之利用mysql客户端查询UCSC数据库 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. UCSC Genome Browser是由Unive ...

  6. android 本地数据库持久化框架,android数据库持久化框架, ormlite框架,

    前言 Android中内置了SQLite,但是对于数据库操作这块,非常的麻烦.其实可以试用第3方的数据库持久化框架对之进行结构上调整, 摆脱了访问数据库操作的细节,不用再去写复杂的SQL语句.虽然这样 ...

  7. mysql 乱码 越南_mysql数据库乱码之保存越南文乱码解决方法

    我自己测试一下,很多字符变成了 '?'. 数据库连接已经是使用了 utf8 字符集: 复制代码 代码如下:define("MYSQL_ENCODE", "UTF8&quo ...

  8. Centos /Linux环境下利用Docker 安装mysql5.7镜像(含离线安装),启动mysql镜像并初始化数据库

    Docker 安装mysql镜像,含离线 Docker 安装mysql镜像(含离线) 准备mysql的Docker镜像(需要在有网的服务器中下载) 将准备好tar导入到docker镜像 Docker启 ...

  9. android mysql 搜索功能_android利用数据库实现搜索联想功能

    [实例简介] android利用数据库实现搜索联想功能.主要实现的效果是和google百度搜索一样,实现联想功能. [实例截图] [核心代码] 4e431bd8-d287-4028-8476-7510 ...

最新文章

  1. 如何在Linux使用Eclipse + CDT开发C/C++程序? (OS) (Linux) (C/C++) (gcc) (g++)
  2. HTML DOM getElementsByTagName() 方法
  3. aes算法的地位_aes算法最后一轮为什么没有列混淆?
  4. Java大数加法乘法减法、36进制加法
  5. go1.14基于信号的抢占式调度实现原理
  6. 实现服务器和客户端数据交互,Java Socket有妙招
  7. 使用BI软件的好处有哪些
  8. SQL 2012 镜像 图解(解决1418)
  9. 接口测试之发包工具介绍
  10. 《笨方法学PYTHON》——eighteenthlesson
  11. Linux系统安装教程之一:VM14虚拟机+Ubuntu16安装
  12. ICLR 2022 | 合作博弈新范式:为可解释性等机器学习估值问题提供新方法
  13. 卡诺模型(KANO Model)
  14. 李少白讲摄影-不放过一切光线 地坛书市新书首发圆满结束
  15. xlsm文件格式和xlsm文件打开方法介绍
  16. 室内三维物体识别与姿态估计--背景
  17. 作为一名架构师,懂点硬件知识不过分吧?
  18. 计算机实验室主要工作业绩范文,实验室工作总结
  19. k-means像素聚类
  20. 关于ES5和ES6的简介

热门文章

  1. TCP/IP 通信示例
  2. 机器学习——人工神经网络之多层神经网络(多层与三层)
  3. 关于怎么怎么把 unsingned char 数据转换为 Opencv 的Mat类型,并且吧图像显示出来
  4. Laravel的初始化安装 1
  5. 1 uC/OS工程目录
  6. 蓝桥 BEGIN4 - Fibonacci数列
  7. codeforces 919E Congruence Equation
  8. [Python] isinstance() for checking object type
  9. Yii 2.0: yii2-highcharts-widget创建饼状图
  10. jquery Fancybox使用教程