王振铎, 王振辉, 边倩, 王英强
(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 总结