五联富强科技园:使用Jena将本体存入MySQL——文档和例子
来源:百度文库 编辑:偶看新闻 时间:2024/05/17 00:24:26
使用Jena将本体存入MySQL——文档和例子
iMarine http://iMarine.blog.163.com注明:本文档参考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):存储陈述表中不便于直接存储的长资源URI6) 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) 为数据库创建一个ModelMaker4) 为本体创建一个模型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/参考资料[1] iMarine http://iMarine.blog.163.com[2] 对Jena的简单理解和一个例子 http://imarine.blog.163.com/blog/static/51380183200812774739130/[3] \\Jena-2.5\doc\DB\index.html[4] \\Jena-2.5\doc\DB\layout.html[5] \\Jena-2.5\doc\DB\mysql-howto.html
iMarine http://iMarine.blog.163.com注明:本文档参考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):存储陈述表中不便于直接存储的长资源URI6) 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) 为数据库创建一个ModelMaker4) 为本体创建一个模型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/参考资料[1] iMarine http://iMarine.blog.163.com[2] 对Jena的简单理解和一个例子 http://imarine.blog.163.com/blog/static/51380183200812774739130/[3] \\Jena-2.5\doc\DB\index.html[4] \\Jena-2.5\doc\DB\layout.html[5] \\Jena-2.5\doc\DB\mysql-howto.html
怎样将文档内容存入软盘中?
如何将WORD文档中的文件存入软盘
如何将影碟存入电脑(使用光驱放)
将一个Word文档打开,修改后存入另一文件夹,最简单有效的办法是( )
如何将报纸、杂志中的美文,经扫描存入Word文档中?
将一个word文档打开修改后存入另一文件夹,最简单有效的方法是什么
如何将图片存入数码相机
如何将VCD存入电脑?
怎么将相片存入邮件
如何将东东存入电子邮箱
如何将影片存入手机?
如何将影片存入PSP
MP3 ~~ 怎么将MV存入~~
php+mysql使用问题
MySQL administrator 如何使用
怎么使用mysql-front?
mysql使用的方法
(17)在Word 2000编辑状态下,要将文档中的所有“E—mail"替换成"电子邮件",应使用的下拉菜单是
想要使用VBA打开文档便将文档全屏化的问题
mysql redhat as9 的使用
mysql front应该怎么使用?
如何将歌存入MP3里
如何将老照片存入电子相册?
如何将文章存入MP3中