第三步 用Jena自定義完成數據庫到RDF的映射
2013年10月17日 8:53:27
這一步用Jena編程,終於能做點有技術含量的事情了。這個工作計划本周內完成,下周一好給老師一個交待。
目標:把現有數據庫(mysql)中的數據,自定義地映射成為RDF格式。
1. 先寫一小段代碼,解決java執行腳本的問題
String cmd = "sh /opt/D2RServer/d2rq-0.8.1/project/hello_java_shell";
Runtime run = Runtime.getRuntime();
String result = "";
try {
Process p = run.exec(cmd);
BufferedInputStream in = new BufferedInputStream(p.getInputStream());
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String lineStr;
while ((lineStr = br.readLine()) != null) {
result += lineStr;
}
br.close();
in.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(result); |
2. 把上面代碼中的cmd改為
String cmd = "/opt/D2RServer/d2rq-0.8.1/generate-mapping -u root -p asdfasdf -d com.mysql.jdbc.Driver -o /opt/D2RServer/d2rq-0.8.1/aniuer.n3 jdbc:mysql://localhost/radar";
|
即執行了generate-mapping命令,把數據庫的內容映射為.n3的文件。
2013年10月19日 16:17:15
經過兩天的糾結,困於n3文件無法存儲到
mysql中,原因是n3文件就是一個文本文件,不符合XML語法,所以一直沒有起色。后來才發現D2RQ還有個工具叫dump,還是這個比較猛,能夠把數據映射成為正經的rdf文件。所以上面的代碼改為
String cmd = "/opt/D2RServer/d2rq-0.8.1/dump-rdf -u root -p asdfasdf -f RDF/XML-ABBREV -o /opt/D2RServer/d2rq-0.8.1/project/aniuer2.rdf jdbc:mysql://localhost:3306/Weapon";
|
3. 將生成的rdf文件存儲到mysql中
目前的問題是,我可以生成rdf文件(雖然這個文件還不完善,以后在映射的階段調整),但這個文件生成之后,
(1)我無法實例化這些數據到數據庫中
(2)我無法通過這個視圖查詢數據。
2013年10月20日 7:51:42
擬采用的辦法:
一是:把jena的版本回歸到2.5之前的版本,其中會有com.hp.jena.db.*的類。
二是:采用新jena版本中的sdb包,這個包究竟是不是上面的替代,還不知道。
哥痛定思痛。。。還是用老版本的jena吧,先入上門,以后再改進吧,不糾結這個問題了。
2013年10月20日 10:10:07
采用了2.6之后,網上的程序可以運行了。目前的問題是,沒有修改映射文件,基礎URI沒有設置,導致在映射到數據庫的過程中,報出這個錯。
現在eclipse里面是兩個jena的工程,一個是2.6.4,一個是d2rq中的2.7.0。同時進行,用d2rq做映射,用jena2.6來做mysql的存儲。
a. 把數據庫的數據映射成ttl文件。
b. 把ttl文件dump成為指定的rdf文件。
c. 把rdf文件存儲到mysql中。
目前有點問題,報錯說我沒有設置主鍵,我重新選擇了數據庫MyDataBase,只有一個表Connection。
輸入命令alter table Connection ADD CONSTRAINT PK_Connection PRIMARY KEY(ID),增加了主鍵。
現編程進行兩具文件的映射,發現在dump過程中,命令行可以實現,而eclipse中不能實現,還是權限的問題。這個問題的解決竟然是在終端運行eclipse即可,姑且這樣吧。
這樣還是沒解決,先不解決了。在終端運行吧。
2013年10月20日 22:30:57
基本上映射成功了,文件還是讀不太懂。看來dump還是要學習一下的。
2013年10月21日 20:42:54
發現dump后的文件並不標准,我還是應該學習一下,d2rq的dump的具體用法。
這一步從格式上講基本完成,下一步研究定制的映射。
有需要交流的可以加QQ: 1q7q1q5q3q6q0q1q8(去掉中間的q)。