简单的数据协议――SDP
版本:1.2
概述
SDP――Simple Data Protocol,简单的数据协议。
本文章提供一种数据描述的设计参考,统一解决Server to Server,Client(UI) to Server通信时对业务数据、UI显示数据的描述、封装、传输需求,支持多种高级的数据类型定义,便于序列化、持久化。
常见的高级数据有:数组(值数组,对象数据),树,对象(key/value),二进制数据(文件、图片…)等。
数据项定义
数据项分为基础数据项和高级数据项,通过基础数据项和高级数据项的嵌套组合来描述复杂的业务数据,例如:数组、树。
字符串(基础)
type属性:string,缺省时默认是string类型。
节点值:字符串(由CDATA包括的字符串,避免xml解析导致字符串的空白前缀和后缀丢失)
例子:
<set name="参数名称" type="string">字符串</set>
<set name="参数名称"><CDATA[ 字符串(有前后空白) ]]></set>
布尔值(基础)
type属性:bool。
节点值:true或者false,大小写不敏感
XML例子:
<set name="参数名称" type="bool">true</set>
<set name="参数名称" type="bool">false</set>
整数(基础)
type属性:int。
节点值:整数。
例子:
<set name="参数名称" type="int">123456</set>
<set name="参数名称" type="int">-123456</set>
实数(基础)
type属性:number。
节点值:实数。
例子:
<set name="参数名称" type="number">123456.789</set>
<set name="参数名称" type="number">-123456.789</set>
日期(基础)
type属性:date。
节点值:yyyy-MM-dd HH:mm:ss格式字符串
例子:
<set name="参数名称" type="date">2011-12-30 23:59:59</set>
XML(基础)
type属性:xml。
节点值:xml字符串
例子:
<set name="参数名称" type="xml"><xml/></set>
二进制流(基础)
type属性:stream/base64。
节点值:base64字符串
例子:
<set name="参数名称" type="stream/base64">welkrwelkrjlsdkfjsldkfasf==</set>
URL引用(基础)
type属性:url。
节点值:相对路径或绝对路径。
例子:
<set name="参数名称" type="url">loadimage?id=123456</set>
<set name="参数名称" type="url"><CDATA[doc/20130101/file1.doc]]></set>
对象(高级)
type属性:entity。
节点值:entity节点。
<!--type:实体类型名称-->
<entity type="">
<!--实体属性节点:多个set节点集合-->
<set/>
</entity>
例子:
<set name="参数名称" type="entity">
<entity type="Product">
<set name="产品名称" type="string">XXXX产品</set>
<set name="产品编码" type="int">0001</set>
</entity>
</set>
树节点(高级)
type属性:node。
节点值:node节点。
<!--type:实体类型名称-->
<node type="">
<!--树节点属性节点:多个set节点集合(不支持表单set节点)-->
<set/>
<nodes>
<!--树节点子节点:多个node节点集合-->
<node/>
</nodes>
</node>
例子:
<set name="参数名称" type="node">
<node type="FoodType">
<set name="名称" type="string">餐饮</set>
<set name="编号" type="int">01</set>
<nodes>
<node type="FoodType">
<set name="名称" type="string">中餐</set>
<set name="编号" type="int">0101</set>
</node>
<node type="FoodType">
<set name="名称" type="string">西餐</set>
<set name="编号" type="int">0102</set>
</node>
</nodes>
</node>
</set>
数组(高级)
type属性:array。
节点值:多个set节点集合,不设置set节点的name属性。
例子1:对象数组(表格)
<set name="参数名称" type="array">
<set type="entity">
<entity type="Product">
<set name="产品名称" type="string">XXXX产品1</set>
<set name="产品编码" type="int">0001</set>
</entity>
</set>
<set type="entity">
<entity type="Product">
<set name="产品名称" type="string">XXXX产品2</set>
<set name="产品编码" type="int">0002</set>
</entity>
</set>
</set>
例子2:字符串数组
<set name="参数名称" type="array">
<set type="string">字符串1</set>
<set type="string">字符串2</set>
</set>