王振鐸, 王振輝, 邊倩, 王英強
(1. 西安思源學院 電子信息學院, 西安 710038; 2. 西安翻譯學院 工程技術學院, 西安 710105)
農(nóng)業(yè)數(shù)據(jù)是關系著居民衣食、生態(tài)環(huán)保、健康醫(yī)療、工業(yè)生產(chǎn)的本源數(shù)據(jù)。但是,由于數(shù)據(jù)共享開放不足,信息孤島、數(shù)據(jù)壁壘、數(shù)據(jù)碎片化和信息不對稱等問題大量存在,直接制約了跨部門、跨區(qū)域和跨行業(yè)的互連互通、協(xié)作協(xié)同和科學決策。2015年8月31日,國務院發(fā)布的《促進大數(shù)據(jù)發(fā)展行動綱要》,2015年12月31日農(nóng)業(yè)部發(fā)布的《關于推進農(nóng)業(yè)農(nóng)村大數(shù)據(jù)發(fā)展的實施意見》,均明確提出政府數(shù)據(jù)資源共享開放工程,及具體任務,力求在未來五至十年內(nèi)實現(xiàn)農(nóng)業(yè)數(shù)據(jù)的有序共享開放,初步完成農(nóng)業(yè)數(shù)據(jù)化改造。
由于歷史上沒有重視數(shù)據(jù)的共享,原有歷史數(shù)據(jù)在數(shù)據(jù)格式、數(shù)據(jù)類型、存儲類型、存儲標準等方面仍然存在諸多問題。一是缺乏共享標準體系,沒有針對不同地區(qū)、不同行業(yè)、不同領域的數(shù)據(jù)格式匯交技術,特別缺乏針對農(nóng)業(yè)多源異構(gòu)、結(jié)構(gòu)化、半結(jié)構(gòu)化數(shù)據(jù)的標準化技術和海量數(shù)據(jù)管理的模型技術;二是缺乏不同平臺的整合技術。目前我國農(nóng)業(yè)存在諸多網(wǎng)站和數(shù)據(jù)平臺,但是各個平臺之間層次不清晰、覆蓋內(nèi)容不一致,架構(gòu)布局不合理、尚不能實現(xiàn)互聯(lián)互通;三是缺乏便捷、高效的數(shù)據(jù)查詢、瀏覽、檢索、分發(fā)技術。目前我國已經(jīng)開放的一些數(shù)據(jù)平臺中,要么數(shù)據(jù)無法瀏覽,要么數(shù)據(jù)無法下載,要么數(shù)據(jù)鏈接不存在,平臺的便捷性和可訪問性較差。
針對異構(gòu)數(shù)據(jù)集成,朱峰針對互聯(lián)網(wǎng)金融應用領域提出了一種基于JSON技術的異構(gòu)數(shù)據(jù)中間件系統(tǒng),設計了一種可擴展的異構(gòu)數(shù)據(jù)整合框架JHD,構(gòu)建了中介模式和數(shù)據(jù)源模式以及它們的映射關系,以解決數(shù)據(jù)源的語義異構(gòu)問題,利用多個異構(gòu)數(shù)據(jù)源各自提供的數(shù)據(jù)服務接口,增加了系統(tǒng)的可擴展性[1]。韓威威提出了一種利用XML技術解決語義沖突,利用Web Service架構(gòu)設計構(gòu)建異構(gòu)信息共享平臺,以服務的方式為各終端用戶解決了農(nóng)業(yè)多源異構(gòu)數(shù)據(jù)共享的難題[2]。倪芳提出了一種 采用分布式 Web 服務中的 XML 技術對多源異構(gòu)農(nóng)業(yè)數(shù)據(jù)實現(xiàn)融合,能將抽象的農(nóng)業(yè)數(shù)據(jù)變得模型化,從而有效解決當前農(nóng)業(yè)不同領域的數(shù)據(jù)整合與交互問題[3]。
綜上所述,目前進行異構(gòu)數(shù)據(jù)信息集成的技術主要集中在XML技術上,比較新的系統(tǒng)采用了JSON技術,本文工作是利用JSON作為異構(gòu)數(shù)據(jù)集成的中間件,解決多源異構(gòu)數(shù)據(jù)信息共享的難題。
JSON(JavaScript Object Notation)一種輕量級的數(shù)據(jù)交換格式,具有良好的可讀和便于快速編寫的特性。可在不同平臺之間進行數(shù)據(jù)交換。JSON采用兼容性很高的、完全獨立于語言文本格式,同時也具備類似于C語言的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)體系的行為。這些特性使JSON成為理想的數(shù)據(jù)交換語言。
XML(可擴展的標記語言)格式統(tǒng)一,符合標準;容易與其他系統(tǒng)進行遠程交互,數(shù)據(jù)共享比較方便。但是它具有文件龐大,文件格式復雜,傳輸占帶寬;服務器端和客戶端都需要花費大量代碼來解析XML,導致服務器端和客戶端代碼變得異常復雜且不易維護;客戶端不同瀏覽器之間解析XML的方式不一致,需要重復編寫很多代碼;
相比之下,JSON具有數(shù)據(jù)格式比較簡單,易于讀寫,格式都是壓縮的,JSON相對于XML來講,數(shù)據(jù)的體積小,傳遞的速度更快些占用帶寬??;易于解析,客戶端JavaScript可以簡單的通過eval()進行JSON數(shù)據(jù)的讀取;支持多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務器端語言,便于服務器端的解析;同時,因為JSON格式能直接為服務器端代碼使用,大大簡化了服務器端和客戶端的代碼開發(fā)量,且完成任務不變,并且易于維護。JSON與JavaScript的交互更加方便,更容易解析處理,更好的數(shù)據(jù)交互。下面,通過實例比較XML和JSON:
例如:用XML表示中國部分省市數(shù)據(jù)如下:
<2>.用JSON表示中國部分省市數(shù)據(jù)如下:
var country =
{
name: "中國",
provinces: [
{ name: "陜西", citys: { city: ["西安", "寶雞"]} },
{ name: "漢南", citys: { city: ["鄭州", "洛陽"]} }
}
從上面實例可以看出,XML的結(jié)構(gòu)化形式利于程序的閱讀。而JSON讀起來更像一個數(shù)據(jù)塊,讀起來就比較費解,然而這一點非常適合機器閱讀,所以通過JSON的索引country.provinces[0].name就能夠讀取“陜西”這個值。并且,XML數(shù)據(jù)中包含很多重復的標記字符,而JSON中僅僅存在的是密密麻麻的有用數(shù)據(jù)。
中間件模式通過統(tǒng)一的全局數(shù)據(jù)模型來訪問異構(gòu)的數(shù)據(jù)庫、遺留系統(tǒng)、Web 資源等。中間件位于異構(gòu)數(shù)據(jù)源系統(tǒng)(數(shù)據(jù)層) 和應用程序(應用層) 之間,向下協(xié)調(diào)各數(shù)據(jù)源系統(tǒng),向上為訪問集成數(shù)據(jù)的應用提供統(tǒng)一數(shù)據(jù)模式和數(shù)據(jù)訪問的通用接口。各數(shù)據(jù)源的應用仍然完成它們的任務,中間件系統(tǒng)則主要集中為異構(gòu)數(shù)據(jù)源提供一個高層次檢索服務。
中間件模式是比較流行的數(shù)據(jù)集成方法,它通過在中間層提供一個統(tǒng)一的數(shù)據(jù)邏輯視圖來隱藏底層的數(shù)據(jù)細節(jié),使得用戶可以把集成數(shù)據(jù)源看為一個統(tǒng)一的整體。這種模型下的關鍵問題是如何構(gòu)造這個邏輯視圖并使得不同數(shù)據(jù)源之間能映射到這個中間層。根據(jù)此原理,我們設計了基于JSON的異構(gòu)數(shù)據(jù)中間件系統(tǒng),如下圖1所示:
圖1 JSON異構(gòu)數(shù)據(jù)集成中間件
為了構(gòu)建異構(gòu)數(shù)據(jù)集成平臺,需要將各異構(gòu)數(shù)據(jù)庫中的數(shù)據(jù)取出來,進行數(shù)據(jù)格式的統(tǒng)一,以便JSON 異構(gòu)數(shù)據(jù)集成中間件進行進一步處理。下面以Java Web開發(fā)為例。
數(shù)據(jù)庫中數(shù)據(jù)轉(zhuǎn)換成JSON數(shù)據(jù)分為兩步,首先將java對象保存在JSON中; 然后通過Ajax來得到JSON轉(zhuǎn)化成js對象的數(shù)據(jù),以便在Web頁面中顯示。關鍵代碼如下:
<%@ page import=java.io.Writer%>
<%@ page import="org.json.JSONArray"%>
<%@ page import="org.json.JSONObject"%>
public class Tsdh {
private String depname;
private String name;
private String tel;
//這幾個屬性的get和set方法省略
}
JSONArray jsons=new JSONArray();
try{
Tsdh tsdh=new Tsdh();
tsdh.setDepname("辦公室");
tsdh.setName("大熊");
tsdh.setTel("0431-1111111");
Tsdh tsdh2=new Tsdh();
tsdh2.setDepname("行政部");
tsdh2.setName("柯基");
tsdh2.setTel("0431-2222222");
JSONObject json=new JSONObject(tsdh);
JSONObject json1=new JSONObject(tsdh2);
jsons.put(json);
jsons.put(json1);
response.setContentType("text/html;charset=utf-8");
Writer writer=response.getWriter();
writer.writer(jsons.toString);
writer.flush();
writer.close();
writer=null;
}catch(Exception e){
System.out.println("error: "+e);
}
}
Html代碼 AJAX處理代碼
function createXMLHttpRequest(){
var xmlHttp;
if(window.ActiveObject){
xmlHttp=new ActiveObject("Microsoft.XMLHTTP");
}else if(window.XMLHttpRequest){
xmlHttp=new XMLHttpRequest();
}
return xmlHttp;
}
function getTestInfo(){
var xmlHttp=createXMLHttpRequest();
xmlHttp.onreadystatechange=function(){
if(xmlHttp.readyState==4){
if(xmlHttp.status==200){
var myJson=eval("("+xmlHttp.responseText+")");
if(null!=myJson &&""!=myJson && myJson.length>0){
for(var i=0;i alert(myJson[i].name+"--"+myJson[i].depname+"--"+myJson[i].tel); } } } } } xmlHttp.open("post","getValue.jsp"); xmlHttp.send(null); } 通過異構(gòu)數(shù)據(jù)中間件,將用戶輸入的數(shù)據(jù)存入各異構(gòu)數(shù)據(jù)庫的步驟是: 1.在用戶端在處理量數(shù)據(jù)提交的表單時,可以使用Ajax提交,并將數(shù)據(jù)轉(zhuǎn)換成JSON格式,使用jquery.serializeJSON,可以在基于jQuery技術實現(xiàn)。 2.頁面中,調(diào)用 .serializeJSON() 方法來序列化form表單的數(shù)據(jù)成JS對象。 3.將JS對象轉(zhuǎn)換成實體類。調(diào)用JSONObject 的toBean方法。示例代碼如下: for(Object obj : arr){ JSONObject jsonObject =JSONObject.fromObject(obj); EnterpriseInfoEntity entInfo = (EnterpriseInfoEntity)JSONObject.toBean(jsonObject, EnterpriseInfoEntity.class); } 4.使用ORM技術,將實體映射到相應的關系表中,實現(xiàn)數(shù)據(jù)的存儲。 利用Java技術實現(xiàn)的該農(nóng)業(yè)異構(gòu)數(shù)據(jù)集成平臺,具有平臺無關性、安全性等特點。通過系統(tǒng)測試,可以兼容SQL Server、MySql、Oracle等大型關系庫。 JSON (JavaScriptObject Notation) 是一種輕量級的數(shù)據(jù)交換格式,主要用于傳送數(shù)據(jù)。JSON采用了獨立于語言的文本格式,類似XML,但是比XML簡單,易讀并且易編寫。對機器來說易于解析和生成,并且會減少網(wǎng)絡帶寬的傳輸。由于JSON格式可以解耦javascript客戶端應用與服務器端的方法調(diào)用,因而在互聯(lián)網(wǎng)應用中被大量使用。所以,系統(tǒng)采用JSON技術,將異構(gòu)數(shù)據(jù)統(tǒng)一成JSON格式輸出顯示,和將用戶數(shù)據(jù)轉(zhuǎn)換成JSON格式對象保存到異構(gòu)數(shù)據(jù)庫。以此為基礎構(gòu)建的數(shù)據(jù)集成中間件,具有易實施,擴展性強等優(yōu)點,為從事異構(gòu)數(shù)據(jù)集成提供了借鑒。4.2 把JSON數(shù)據(jù)存放到數(shù)據(jù)庫
5 系統(tǒng)特點
6 總結(jié)