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.pswp.cn/news/270607.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/270607.shtml
英文地址,請注明出處:http://en.pswp.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…