XML Data Binding在OMA WV-IMPS的应用

本文作者:admin       点击: 2007-04-10 00:00
前言:
本文讨论程序设计师使用XML与Java技术,XML Data Binding与传统撰写APIs或公用程序来转换XML文件,从分析XML文件结构、取出数据,以及转换成可用的数据格式的过程。提供国际标准组织开放行动联盟(Open Mobile Alliance;OMA) WV-IMPS,在XML转载无线数据交换讯息应用的范例说明。依据OM-WV-CSP_DTD-V1_1-20021001-A文件所制定的DTD规范而窥探出的复杂程度,包括:使用了多份DTD 约制规则验证XML数据造成结构冲突的问题,以及XML文件格式元素排列的顺序,和元素型别相互成为多层果状且元素型别名称重复…等等复杂的问题与解决方法。

OMA WV-IMPS XML转载
无线数据交换讯息简介


WV-IMPS简介
2001年Ericsson、Motorola、Nokia等手机大厂,共同成立了Wireless Village组织。主旨为制定适合于移动通信网路上使用之IMPS通信协议,使移动设备相互之间,或移动装置与其它通信设备间可以彼此交换实时信息与状态信息。亦即可在移动设备参与者间实时的交换各种媒体内容信息,并且可以实时知道参与者的状态信息,从而选择适当的方式进行交流。

官方网址与规格文件网址
本文依据OM-WV-CSP_DTD-V1_1-20021001-A文件所制定的规范,说明在XML转载无线数据交换信息的应用。该文件提供DTD约制规则与交易的范例。官方网址http://www.openmobilealliance.org/;DTD规格文件(OM-WV-CSP_DTD-V1_1-20021001-A)网址http://www.openmobilealliance.org/release_program/docs/CopyrightClick.asp?pck=IMPS&file=OMA-WV-PA_DTD-V1_1-20021001-A.pdf。

XML Data Binding基本原理

基本原理
通常在解析XML数据时,经常利用W3C DOM tree或SAX event-driven APIs来剖析XML文件。程序设计师需要很清楚XML文件的结构,以便处理XML元素名称、字符,和属性…等新增、修改节点数据的操作。
XML Data Binding技术,其目标就是把一个XML文件模型同一个Java对象导向语言中的对象关联起来。这样程序设计师只需要对这个对象进行操作,并且操作结果就能直接地对映到XML文件档中。

例如我们解析一份递送讯息交易结果的XML文件,取得元素下用户的辨识码节点和屏幕名称节点的数据。如果要进一步处理的子元素数据,程序设计师还需要解析DOM Tree的元素与其子元素,以取得子元素的数据,再将它们转换成适当的Java数据型别。
    
XML DOM Tree
如果使用Data Binding技术,那么程序设计师只需获得这个节点所对应的对象模块,如DetailedResult Class,然后处理这个对象模块下UserID和ScreenName成员变量的值;或ScreenName Class,以及处理这个对象模块下SName和GroupID成员变量的值就可以了。如此可以简化解析DOM tree额外的程序代码,提高了程序开发的效率。

复杂的XML文件格式在程序
设计上的问题与解决方法


依据OM-WV-CSP_DTD-V1_1-20021001-A文件所制定的规范,包括:使用了多份DTD 约制规则验证XML数据造成结构冲突的问题,以及XML文件格式元素排列的顺序,和元素型别相互成为多层巣状且元素型别名称重复…等等复杂的问题,提供说明与解决方法。

使用了多份DTD 约制规则验证XML数据

1. 问题描述:
依据OM-WV-CSP_DTD-V1_1-20021001-A文件所制定的DTD规范,虽然只有一份DTD文件型别定义檔(Document Type Definitions),却可分为三个部份DTD 的约制规则。为了说明,将此三部份分别归类为WV-CSP-Message元素所包含的部份、TransactionContent元素所包含的Presence部份,和TransactionContent部份中所包含非Presence的部份。这三个部份的约制规则在整合过程中,将因不同DTD的约制规则造成结构冲突的问题。

2. 解决方法:
使用DTD的条件式区段可以解决整合多份DTD的约制规则所造成结构冲突的问题。条件式区段内包含了二个主要的关键词“INCLUDE”与“IGNORE”,如果条件式区段的关键词是“INCLUDE”,则条件式区段的内容是DTD的一部份;如果条件段的关键词是“IGNORE”,则条件式区段的内容便不属于 DTD 逻辑上的一部份。

请参考下列“外部Doc Type宣告”内容:
注:以WV-CSP-Header.dtd描述WV-CSP-Message元素所包含的部份,以WV-CSP-Body.dtd描述TransactionContent元素所包含的部份,以PresenceSubList.dtd描述TransactionContent部份中所包含的Presence部份,并以WV-CSP-Message.dtd来整合此三份DTD的约制规则文件。

并且还需要在Java相关的对象模块转换(marshal)为XML文件的程序中,加入Presence交易的判断,并以下面“内部Doc Type宣告”来覆写“外部Doc Type宣告”中条件式区段内关键词“INCLUDE”与“IGNORE”的实体参照设定。如此,上述

XML文件格式元素型别相互成为多层巣
状且元素型别名称重复


1. 问题描述:
依据OM-WV-CSP_DTD-V1_1-20021001-A文件所制定的DTD规范,XML文件格式元素型别相互成为多层巣状且元素型别名称重复。请参考下面DTD规范的片段:
程序设计师可以依据此DTD规范,撰写对映的Java对象模型(object model),它是持有属性与getter-setter方法的一种Java Bean设计型态的类别。
但是根据这样的DTD规范,将使得Java程序在解析XML文件至Java object model时;或由Java object model产生XML文件时,容易因为XML元素名称同名造成覆写的错误情形发生。
2. 解决方法:

● 解析XML文件至Object Model:
为避免同名称元素被覆写的情形发生。程序必须能剖析XML元素,取得其下所有子元素的List,然后将XML元素List对映于Java object model。
上述JDOM APIs程序代码,首先取得Result类别object model的实体,并取得DeliveryReport的子元素的List,即Result子元素的List(范例第1至第2行)。然后透过for循环来剖析整个Result List,由resultChild.getName() 来判断是否为Code或是Description子元素。假如是Description元素,则取出该Description元素的字符值,然后设定至Result下Description的属性字段(范例第3至第7行)。

如果是DetailedResult元素的话,则取得DetailedResult的子元素的List(范例第5行),然后重复上述的方式,透过for循环继续来剖析整个DetailedResult List,取出元素的字符值至相对映的属性字段(范例第8行至39行)。

● 由Object Model产生XML文件:
程序设计师通常将欲产出XML文件格式,先设定为Java Properties组态档案的格式注3,然后程序直接转换成XML文件。为避免同名称元素被覆写的情形发生,必须将组态档案中每一个XML元素的型别名称,储存成类似XML位置路径的常数变量,然后程序转换对映于Map后,再转成XML文件。使得在解析XML文件时,能辨识每一个XML元素,使产出数据验证正确。