王振鐸, 王振輝, 邊倩, 王英強
(1. 西安思源學院 電子信息學院, 西安 710038; 2. 西安翻譯學院 工程技術學院, 西安 710105)
農業數據是關系著居民衣食、生態環保、健康醫療、工業生產的本源數據。但是,由于數據共享開放不足,信息孤島、數據壁壘、數據碎片化和信息不對稱等問題大量存在,直接制約了跨部門、跨區域和跨行業的互連互通、協作協同和科學決策。2015年8月31日,國務院發布的《促進大數據發展行動綱要》,2015年12月31日農業部發布的《關于推進農業農村大數據發展的實施意見》,均明確提出政府數據資源共享開放工程,及具體任務,力求在未來五至十年內實現農業數據的有序共享開放,初步完成農業數據化改造。
由于歷史上沒有重視數據的共享,原有歷史數據在數據格式、數據類型、存儲類型、存儲標準等方面仍然存在諸多問題。一是缺乏共享標準體系,沒有針對不同地區、不同行業、不同領域的數據格式匯交技術,特別缺乏針對農業多源異構、結構化、半結構化數據的標準化技術和海量數據管理的模型技術;二是缺乏不同平臺的整合技術。目前我國農業存在諸多網站和數據平臺,但是各個平臺之間層次不清晰、覆蓋內容不一致,架構布局不合理、尚不能實現互聯互通;三是缺乏便捷、高效的數據查詢、瀏覽、檢索、分發技術。目前我國已經開放的一些數據平臺中,要么數據無法瀏覽,要么數據無法下載,要么數據鏈接不存在,平臺的便捷性和可訪問性較差。
針對異構數據集成,朱峰針對互聯網金融應用領域提出了一種基于JSON技術的異構數據中間件系統,設計了一種可擴展的異構數據整合框架JHD,構建了中介模式和數據源模式以及它們的映射關系,以解決數據源的語義異構問題,利用多個異構數據源各自提供的數據服務接口,增加了系統的可擴展性[1]。韓威威提出了一種利用XML技術解決語義沖突,利用Web Service架構設計構建異構信息共享平臺,以服務的方式為各終端用戶解決了農業多源異構數據共享的難題[2]。倪芳提出了一種 采用分布式 Web 服務中的 XML 技術對多源異構農業數據實現融合,能將抽象的農業數據變得模型化,從而有效解決當前農業不同領域的數據整合與交互問題[3]。
綜上所述,目前進行異構數據信息集成的技術主要集中在XML技術上,比較新的系統采用了JSON技術,本文工作是利用JSON作為異構數據集成的中間件,解決多源異構數據信息共享的難題。
JSON(JavaScript Object Notation)一種輕量級的數據交換格式,具有良好的可讀和便于快速編寫的特性。可在不同平臺之間進行數據交換。JSON采用兼容性很高的、完全獨立于語言文本格式,同時也具備類似于C語言的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)體系的行為。這些特性使JSON成為理想的數據交換語言。
XML(可擴展的標記語言)格式統一,符合標準;容易與其他系統進行遠程交互,數據共享比較方便。但是它具有文件龐大,文件格式復雜,傳輸占帶寬;服務器端和客戶端都需要花費大量代碼來解析XML,導致服務器端和客戶端代碼變得異常復雜且不易維護;客戶端不同瀏覽器之間解析XML的方式不一致,需要重復編寫很多代碼;
相比之下,JSON具有數據格式比較簡單,易于讀寫,格式都是壓縮的,JSON相對于XML來講,數據的體積小,傳遞的速度更快些占用帶寬小;易于解析,客戶端JavaScript可以簡單的通過eval()進行JSON數據的讀取;支持多種語言,包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等服務器端語言,便于服務器端的解析;同時,因為JSON格式能直接為服務器端代碼使用,大大簡化了服務器端和客戶端的代碼開發量,且完成任務不變,并且易于維護。JSON與JavaScript的交互更加方便,更容易解析處理,更好的數據交互。下面,通過實例比較XML和JSON:
例如:用XML表示中國部分省市數據如下:
<2>.用JSON表示中國部分省市數據如下:
var country =
{
name: "中國",
provinces: [
{ name: "陜西", citys: { city: ["西安", "寶雞"]} },
{ name: "漢南", citys: { city: ["鄭州", "洛陽"]} }
}
從上面實例可以看出,XML的結構化形式利于程序的閱讀。而JSON讀起來更像一個數據塊,讀起來就比較費解,然而這一點非常適合機器閱讀,所以通過JSON的索引country.provinces[0].name就能夠讀取“陜西”這個值。并且,XML數據中包含很多重復的標記字符,而JSON中僅僅存在的是密密麻麻的有用數據。
中間件模式通過統一的全局數據模型來訪問異構的數據庫、遺留系統、Web 資源等。中間件位于異構數據源系統(數據層) 和應用程序(應用層) 之間,向下協調各數據源系統,向上為訪問集成數據的應用提供統一數據模式和數據訪問的通用接口。各數據源的應用仍然完成它們的任務,中間件系統則主要集中為異構數據源提供一個高層次檢索服務。
中間件模式是比較流行的數據集成方法,它通過在中間層提供一個統一的數據邏輯視圖來隱藏底層的數據細節,使得用戶可以把集成數據源看為一個統一的整體。這種模型下的關鍵問題是如何構造這個邏輯視圖并使得不同數據源之間能映射到這個中間層。根據此原理,我們設計了基于JSON的異構數據中間件系統,如下圖1所示:

圖1 JSON異構數據集成中間件
為了構建異構數據集成平臺,需要將各異構數據庫中的數據取出來,進行數據格式的統一,以便JSON 異構數據集成中間件進行進一步處理。下面以Java Web開發為例。
數據庫中數據轉換成JSON數據分為兩步,首先將java對象保存在JSON中; 然后通過Ajax來得到JSON轉化成js對象的數據,以便在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); } 通過異構數據中間件,將用戶輸入的數據存入各異構數據庫的步驟是: 1.在用戶端在處理量數據提交的表單時,可以使用Ajax提交,并將數據轉換成JSON格式,使用jquery.serializeJSON,可以在基于jQuery技術實現。 2.頁面中,調用 .serializeJSON() 方法來序列化form表單的數據成JS對象。 3.將JS對象轉換成實體類。調用JSONObject 的toBean方法。示例代碼如下: for(Object obj : arr){ JSONObject jsonObject =JSONObject.fromObject(obj); EnterpriseInfoEntity entInfo = (EnterpriseInfoEntity)JSONObject.toBean(jsonObject, EnterpriseInfoEntity.class); } 4.使用ORM技術,將實體映射到相應的關系表中,實現數據的存儲。 利用Java技術實現的該農業異構數據集成平臺,具有平臺無關性、安全性等特點。通過系統測試,可以兼容SQL Server、MySql、Oracle等大型關系庫。 JSON (JavaScriptObject Notation) 是一種輕量級的數據交換格式,主要用于傳送數據。JSON采用了獨立于語言的文本格式,類似XML,但是比XML簡單,易讀并且易編寫。對機器來說易于解析和生成,并且會減少網絡帶寬的傳輸。由于JSON格式可以解耦javascript客戶端應用與服務器端的方法調用,因而在互聯網應用中被大量使用。所以,系統采用JSON技術,將異構數據統一成JSON格式輸出顯示,和將用戶數據轉換成JSON格式對象保存到異構數據庫。以此為基礎構建的數據集成中間件,具有易實施,擴展性強等優點,為從事異構數據集成提供了借鑒。4.2 把JSON數據存放到數據庫
5 系統特點
6 總結