OWL本体文件如何存储到数据库

OWL本体文件如何存储到数据库,第1张

安装好必要的软件并配置好开发环境

Eclipse

MySQL Server 5.5-win32

jena2.6.4

protege4.3

mysql-connector-java-5.1.35(MySQL的JDBC)

1. 利用MySQL创建一个数据库:create database military_ontology

2. 打开Eclipse,新建一个Java工程,起名为military_ontology。(File-New-Java Project,输入名字military_ontology,点击next)

3. 新建工程的同时,分别导入Jena包和MySQL的JDBC。(点击Libraries-点击Add External JARs,分别加入JDBC和Jena中全部.jar文件,C:\Program Files\MySQL\MySQL Connector J和G:\Jena\lib目录中,点Finish)

4. 在工程military_ontology\src\目录下新建一个Java文件(New-Class),名字为military_ontology.java;

5. 在military_ontology.java中开始编写以下代码:

package military_ontology

import java.io.*//导入IO包的所有类

import java.sql.SQLException//导入SQL有关异常处理包

import com.hp.hpl.jena.db.*//导入jena链接数据库的包

import com.hp.hpl.jena.rdf.model.*//导入jena有关模型的包

import com.hp.hpl.jena.ontology.OntModel//导入OntModel包

import com.hp.hpl.jena.ontology.OntModelSpec//导入OntModelSpec包

Model defModel = null

if(connection.containsModel("militaryDB"))//判断名为militaryDB的模型是否已经存在数据

{

defModel = maker.openModel("militaryDB",true)//数据存在则打开此模型

System.out.println("打开已存在的模型")

}

else

{     

defModel = maker.createModel("militaryDB")//数据不存在则创建此模型

System.out.println("创建一个新模型")

}

OntModelSpec spec = new OntModelSpec(OntModelSpec.OWL_MEM)

OntModel DBModel = ModelFactory.createOntologyModel(spec, defModel)

//将临时模型转换成本体模型(OWL格式),其中spec参数表示该模型是在内存中存在的。

FileInputStream read = null//定义并初始化文件输入流变量read

try

{

File file = new File("g:/毕业设计/软件/本体实例/Ontology1428926241032/Ontology1428926241032.owl")

read = new FileInputStream(file)//读入OWL本体文件

}

catch (FileNotFoundException e)//抓取读入文件异常

{

e.printStackTrace()

System.out.println("未找到要存储的本体文件,请检查文件地址及名称")

}

System.out.println("已将本体文件转换为字节流文件。")

InputStreamReader in = null//定义并初始化输入流转换变量in

try

{

in = new InputStreamReader((FileInputStream)read, "UTF-8")//将字节流文件转换为UTF-8编码

System.out.println("已将字节流文件转换为UTF-8编码。")

}

catch (UnsupportedEncodingException e)//抓取转换异常

{

e.printStackTrace()

System.out.println("不支持上述字符集。")

}

defModel.read(in,null)//将流文件读入数据库模型

defModel.commit()//将模型保存到数据库中

System.out.println("数据转换执行完毕,已将本体文件存入数据库。")

try

{

in.close()

System.out.println("已将字节流文件关闭。")

}

catch (IOException e)//抓取输入输出异常

{

e.printStackTrace()

System.out.println("无法关闭字节流文件。")

try

{

connection.close()//关闭连接

System.out.println("已将连接关闭。")

}

catch (SQLException e)

{

e.printStackTrace()

System.out.println("连接无法关闭。")

}

}

catch (RDFRDBException e)

{

System.out.println("出现异常")

}

System.out.println("已将本体文件持久化到数据库中,无异常")

}

}

执行程序之后,本体被存入MySQL数据库中。数据库会生成以下几张表:

jena_g1t0_reif    存储经过处理的本体数据

jena_g1t1_stmt   存储了本体的数据信息

jena_graph       存储每一个用户图的名字和唯一标志符

jena_long_lit     存储陈述表中不便于直接存储的长字符创常量

jena_long_uri     存储陈述表中不便于直接存储的长资源URI

jena_prefix       存储URI的前缀。前缀只存储一次,节省空间

jena_sys_stmt    存储了本体的元数据信息

主要数据存在两个表中。

1)    military_ontology.jena_g1t1_stmt 存储了本体的数据信息

2)    military_ontology.jena_sys_stmt 存储了本体的元数据信息

本人使用的是 Jena-2.5.7 MySQL 5.0 mysql-connector-java-3.1.10 jdk1.6.0_07

源代码:

import java.io.*

import java.sql.SQLException

import com.hp.hpl.jena.db.*

import com.hp.hpl.jena.rdf.model.*

public class MysqlTest{

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 = "4408"// 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.createDefaultModel()

// 准备需要存入数据库的本体文件,建立输入文件流

FileInputStream inputSreamfile = null

try

{

File file = new File("D:/Person.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) {

System.out.println("Exceptions occur33...")

e.printStackTrace()

}

// 读取文件

defModel.read(in,null)

// 关闭输入流读取器

try

{

in.close()

} catch (IOException e) {

System.out.println("Exceptions occurclose1...")

e.printStackTrace()

}

// 执行数据转换,将本体数据存入数据库

defModel.commit()

// 关闭数据库连接

try

{

conn.close()

} catch (SQLException e) {

System.out.println("Exceptions occur22...")

e.printStackTrace()

}

}catch(RDFRDBException e){

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

}

}

}

输出结果

Tue Dec 30 17:07:06 CST 2008 TRACE:

Tue Dec 30 17:07:06 CST 2008 TRACE:

.....

Tue Dec 30 17:07:06 CST 2008 TRACE:

Tue Dec 30 17:07:06 CST 2008 TRACE:

Exceptions occur...

帮忙解决一下。。。

将ShowRecord.owl文件存储到MySQL数据库中,数据库叫Jena,在Eclipse中创建工程OperaOntology,代码如下:importJava.io.*importjava.sql.SQLExceptionimportcom.hp.hpl.jena.db.*importcom.hp.hpl.jena.ontology.OntClassimportcom.hp.hpl.jena.rdf.model.*publicclassOperaOntology{publicstaticfinalStringstrDriver="com.mysql.jdbc.Driver"publicstaticfinalStringstrURL="jdbc:mysql://localhost:3306/jena"//localhost的后面要直接写冒号,再写3306;publicstaticfinalStringstrUser="root"publicstaticfinalStringstrPassword="root"publicstaticfinalStringstrDB="MySQL"publicstaticvoidmain(String[]args){try{DBConnectionconnection=newDBConnection(strURL,strUser,strPassword,strDB)System.out.println(connection)//创建连接时,第四个参数需要指定所用的数据库类型;也就是说strDB的值应该是“MySQL”try{Class.forName("com.mysql.jdbc.Driver")System.out.println("驱动程序已经安装。")}catch(ClassNotFoundExceptione){System.out.println("ClassNotFoundException,Driverisnotavailable")}System.out.println("数据库连接成功。")//从此处开始读入一个OWL文件并且存储到数据库中;ModelMakermaker=ModelFactory.createModelRDBMaker(connection)//使用数据库连接参数创建一个模型制造器ModeldefModel=maker.createModel("ShowRecord")//创建一个默认模型,命名为CostumeModel,因为我要存入的OWL文件名是CostumeFileInputStreamread=nulltry{Filefile=newFile("e:/ontologies/ShowRecord.owl")read=newFileInputStream(file)}catch(FileNotFoundExceptione){e.printStackTrace()System.out.println("未找到要存储的本体文件,请检查文件地址及名称")}System.out.println("已将本体文件转换为字节流文件。")InputStreamReaderin=nulltry{in=newInputStreamReader((FileInputStream)read,"UTF-8")}catch(UnsupportedEncodingExceptione){e.printStackTrace()System.out.println("不支持上述字符集。")}System.out.println("已将字节流文件转换为UTF-8编码。")defModel.read(in,null)try{in.close()}catch(IOExceptione){e.printStackTrace()System.out.println("无法关闭字节流文件。")}System.out.println("已将字节流文件关闭。")defModel.commit()System.out.println("数据转换执行完毕,已将本体文件存入数据库。")try{connection.close()}catch(SQLExceptione){e.printStackTrace()System.out.println("文件无法关闭。")}}catch(RDFRDBExceptione){e.printStackTrace()System.out.println("出现异常")}System.out.println("已将本体文件持久化到数据库中")}}以上步骤成功完成以后,我登录到MySQL的界面查询工具查看Jena数据库的表,点击“Catalogs“


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9944933.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存