XML的跨平台的WEB分布式数据交互

在需要对不同WEB系统之间进行跨语言、跨系统、跨平台的复杂的数据交互和共享,我们可以使用WDDX,它是一种基于XML的WEB分布式数据交互技术,这样就更能提高WEB站点的整体价值和方便构建强大的WEB系统。
下面先简要解释一下WDDX的交互原理
WDDX是通过“XML中间件”来实现数据交互。在WEB的各式各样的开发环境(PHP、ASP.net、Java等)都提供数据库支持,都有自己的数据结构,而WDDX为每个语言都提供 了一些模块,而这些模块能将这些数据结构转换成一种基于XML所描述的数据结构,即对这些数据进行序列化,反之,也可以把这些序列化的数据转换为某个语言的数据结构,也即是反序列化。在序列化和反序列化都是对数据进行无损转换。同时,由于所有的XML处理和交互过程都转移至WDDX模块中,开发者就不必再对XML文档本身进行编程和处理,从而使得这种语言之间的转换过程对于开发者来说就更加透明。
WDDX是由两个部分组成:


  1. 第一部分是根据XML 1.0规范制定的一种独立语言的数据描述。依据规范,WDDX支持的数据类型有布尔型(boolean)、 数字型(number)、 日期型(date-time) 和字符串型(string)这些基本数据类型。此外WDDX还支持下列复杂数据类型:数组(array)、 结构(structure)和记录集(recordset)。其中,数组可以是用整数标引的任意类型对象的集合,结构可以是用字符串标引的任意类型对象的集合,记录集则是对数据的列表型封装。记录集中只允许有基本数据类型。

  2. 第二部分就是为那些使用WDDX的语言所编制的模块集合。这些语言包括PHP 、Java、ASP.net、Python、ActiveX、COM、Perl等。另外,WDDX不仅仅适用于Web应用,将WDDX同COM相结合,开发人员甚至可以在任意一种流行的Windows应用开发环境下(包括Visual Basic,Delphi,PowerBuilder,C++和Java)用WDDX进行分布式数据开发。


下面是一个WDDX的范例:
<wddxPacket version="1.0">
<header>
<comment>PHP</comment>
</header>
<data>
<struct>
<var name="pi">
<number>3.1415926</number>
</var>
<var name="cities">
<array length="3">
<string>a</string>
<string>b</string>
<string>c</string>
</array>
</var>
</struct>
</data>
</wddxPacket>
下面介绍一下WDDX的应用
使用WDDX主要包括数据序列化、WDDX包创建、数据反序列化三个步骤,通过调用相关函数实现。WDDX为不同的应用开发语言提供了不同的相关函数,为了简化,这里以利用WDDX在两个不同服务器上的PHP脚本之间传递复杂的数据结构为例,简要说明WDDX的使用。
PHP中的WDDX函数
wddx_packet_start(): 创建一个新的WDDX包,返回一个包标识。
语法: int wddx_packet_start(string [comment]);返回值: 整数
wddx_packet_end(): 结束一个指定的 WDDX包,并返回WDDX的字符串表示。参数 packet_id 为封包的标识代码。
语法: string wddx_packet_end(int packet_id);返回值: 字符串
wddx_serialize_value(): 生成一个单值的序列化表示,并创建一个新的WDDX包来包含该序列化的值,返回WDDX包的字符串表示。参数 var为将被序列化的值的内容。参数comment为在封包表头的字符串,可省略。。
语法: string wddx_serialize_value(mixed var, string [comment]);返回值: 字符串
wddx_serialize_vars(): 将多个数值序列化,并创建一个新的WDDX包来包含这一组序列化后的值,返回WDDX包的字符串表示。参数依次为将被序列化的值的内容。。
语法: string wddx_serialize_vars(string var_name | array var_names [, ... ] );返回值: 字符串
wddx_add_vars(): 用于增加一个或多个变量到使用wddx_packet_start()所创建的包中。若不成功则返回 false。
语法: boolean wddx_add_vars(int packet_id, ...);返回值: 布尔值
wddx_deserialize()/wddx_unserialize(): 将WDDX封包反序列化成分散资料,返回一个混合类型的变量,可以是字符串、数组等。如果 WDDX包包括超过一个的变量,一个相关数组将被返回,数组的键值将是序列化变量的名字。 参数 packet 为封包字符串。
语法: mixed wddx_deserialize(string packet);返回值: 混合类型资料
$pi = 3.1415926;
$packet_id = wddx_packet_start("PHP");
wddx_add_vars($packet_id, 'pi');
$cities = array('a', 'b', 'c');
wddx_add_vars($packet_id, 'cities');
$packet = wddx_packet_end($packet_id);
//header("Content-Type: text/xml");
echo $packet; //输出WDDX字符串
//解析WDDX字符串
$t = wddx_deserialize($packet);
var_dump($t);

Need a translation service?

Please enter your personal details and we will contact you shortly

Words translated by CCJK

146,096,379

We are Certified

Our Client Satisfaction

rating for previous quarte

4.00

Over 95% of our clients recommend our language services to others

Copyright © CCJK Technologies Co., Ltd. 2000-2017. All rights reserved.
TOP