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

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();

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/270607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

效率工具:分享7款实用的任务管理软件,值得收藏!

今天小编给大家分享10款实用的任务管理工具,欢迎推荐给身边的朋友,选择一款适合自己的利器吧。1.Microsoft To-Do 微软推出的一款效率管理神器Microsoft To-Do微软推出的有款简介并且实用的待办列表效率软件,实用它可以轻松规划您的每一天。无…

洛谷 2921 记忆化搜索 tarjan 基环外向树

洛谷 2921 记忆化搜索 tarjan 传送门 (https://www.luogu.org/problem/show?pid2921) 做这题的经历有点玄学,,起因是某个random题的同学突然发现了一个0提交0通过的题目,然后就引发了整个机房的兴趣,,然后&#xff0c…

单片机位寻址举例_单片机学习:51单片机寻址方式详解

51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel 8031单片机,后来随着Flash rom 技术的发展,8031单片机取得了长足的发展,成为了应用最广泛的8位单片机之一。51单片机是基础入门的一个单片机,并…

网络知识:LAN、WAN、WLAN相关知识介绍

今天给大家介绍一下LAN、WAN、WLAN相关知识,希望对大家能有所帮助! 一、什么是lan、wan和wlan口的区别? 很多朋友对lan口与wan及wlan的用途了解不清楚,尤其是在做路由器桥接时,wan口与lan的连接与设置容易弄混。 1、LA…

jps

jps位于jdk的bin目录下,其作用是显示当前系统的java进程情况,及其id号。 jps相当于Solaris进程工具ps。不象”pgrep java”或”ps -ef grep java”,jps并不使用应用程序名来查找JVM实例。因此,它查找所有的Java应用程序&#xff0…

SQL

修改表的列名: exec sp_rename testtable.id,ID,column 根据传入时间删除同一天的记录 1、 delete InventoryMovementsTemp where DateDiff(DD,TrnDate ,1/11/2013)0 2、 where convert(varchar(10),TrnDate,126)’’213-01-10 2、 where trndate>’2013-01-10’…

后端技术:mybatis中resultMap用法示例笔记

1、概念resultMap属于mybatis返回操作结果的一个标签,可以用来映射select查询出来结果的集合,主要作用是将实体类中的字段与数据库表中的字段进行关联映射。并且支持复杂的返回结果类型。2、使用场景2.1 属性映射当数据库字段和项目中的实体属性不一致时…

将mysql服务移除_怎么将mysql服务移除?

将mysql服务移除的方法:1、进入“控制面板->程序->卸载或更改程序”,删除mysql程序;2、删除MySQL文件夹下的【my.ini】文件,如果备份好,可以直接将文件夹全部删除 ;3、进入注册表,将相关M…

程序人生:程序员的9个层次,你属于哪个层次

目录 第一级:糟糕的程序员 第二级:菜鸟级程序员 第三级:码农 第四级:普通程序员 第五级:中级程序员 第六级:骨干程序员 第八级:著名程序员 第九级:祖师爷级别 . 第一级:糟…

lsof -i:port 的作用

lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。如TC和UDP等,系统在后台都为该应用程序分…

SpringBoot定时任务实现的两种方式介绍

今天给大家介绍SpringBoot定时任务实现的几种方式,希望对大家能有所帮助!1、SpringTask 用法框架介绍:SpringTask是Spring自带的轻量级定时任务工具,相比于Quartz使用更加简单方便,并且不需要不需要引入其他依赖即可使…

mvc调用mysql存储过程_使用.NET MVC +EF调用oracle的存储过程

题记:需求如题,在网上搜索了一下,没有特别贴合我需求的资料,只好自己摸索,东拼西凑了解了一点东西慢慢尝试做了出来。难点:.NET是微软产品,主要支持Sql Server数据库,对于Oracle的数…

Oracle12c:安装后新建用户及其默认表空间,并创建表测试

环境:操作系统:Windows Server2008 R2 X64 Oracle版本:12c 如何安装? -- oracle 12c在oracle linux 6.6 x64上的安装 -- Windows x64位下完美安装winx64_oracle_12c_database 如何使用DataBase Cofiguration Assistant 创建数据库…

数据库:Redis相关知识梳理

1、数据类型string(字符串):最基本的k-v存储 ,适合验证码、配置信息等list(列表):适合有序/固定的列表。比如行政区、字典表、消息队列等。set(集合):支持交集…

python线性回归分析看相关性_机器学习入门-相关分析之简单线性回归

一.什么是机器学习?简单来说,机器学习是一类算法的总称,这些算法企图从大量历史数据中挖掘出其中隐含的规律,并用于预测或者分类,更具体的说,机器学习可以看作是寻找一个函数,输入是样本数据&am…

Android Listview 性能优化

首先我一般使用的适配器是BaseAdapter,其中有两个方法最主要,分别是: getCount,getView,在对Listview 进行优化的时候,首先使用 convertview 和viewHolder 配合进行优化,使用convertview的母的是控件复用,从而加到减少内存的使用,使用viewHolder 的是减少findbyid 的次数.但是在…

前端:JS实现数组去重常用的六种方法介绍

今天给大家分享JS实现数组去重常用的六种方法&#xff0c;希望对大家能有所帮助&#xff01;定义变量let arr [20,6,13,20,100,8,13,11]; let newArr [];1、两层循环去重 for(let i 0;i < arr.length;i){for(let j i 1;j < arr.length;j){if(arr[i] arr[j]){arr.sp…

python自定义colorbar_python可视化 matplotlib画图使用colorbar工具自定义颜色

python matplotlib画图使用colorbar工具自定义颜色 colorbar(draw colorbar without any mapple/plot)自定义colorbar可以画出任何自己想要的colorbar&#xff0c;自由自在、不受约束&#xff0c;不依赖于任何已有的图(plot/mappable)。这里使用的是mpl.colorbar.ColorbarBase类…

不能读取文件“itunes.library.itl”因为它是由更高级别的itunes所创建的

转自&#xff1a;https://zhidao.baidu.com/question/80796363.html 是因为你安装过高版本的后又装你版本的itunes. 你在电脑上搜索所有硬盘上的itunes library.itl这个文件.搜到就删了&#xff0c;而且搜索里选择“高级选项”除了区分大小写其它几个都钩上。这样注消下&#x…