APP下载

云环境下基于XUpdate的XML更新研究

2018-06-25方少卿

长春师范大学学报 2018年6期
关键词:命令文档指令

张 涛,方少卿

(铜陵职业技术学院,安徽铜陵 244061)

[通讯作者]方少卿(1965- ),男,教授,硕士,从事Web数据挖掘研究。

1 研究背景

目前,云计算技术与应用正在蓬勃发展,大数据处理技术也取得了长足的进步,企业和单位在积极进行智慧化建设,纷纷把业务处理和数据处理搬到云端,提升了数据指导决策的应用价值。随着云计算、移动互联网、物联网的快速发展,数据增长规模加快,半结构化及非结构化的数据呈指数级增长。云计算、大数据时代的到来将给各行各业带来根本性的变革。

XML(eXtensible Markup Language),即可扩展标识语言,对结构化、半结构化的数据表示具有先天的优势。在云计算技术广泛应用和发展的今天,XML业已成为数据表示和交换的标准[1]。当前,用XML描述的数据在云计算、大数据时代增长迅猛,应用领域也在不断扩大。对于云计算环境下XML的研究,大部分是基于XML查询的[2],对XML更新研究的较少,往往借助传统标准进行实现,缺少标准支持。因此,把XML数据迁移到云计算平台中,对XML更新标准和技术的研究成为一项具有重要意义的内容。

2 XUpdate更新技术

2.1 云计算与XML

XML在云平台上架起了各类数据之间交互的桥梁,是不同平台、组件间进行数据交换、集成的中间表示形式,是配置文件的重要数据载体,信息表示方便[1]。对于XML文档的管理方式主要有:文件系统平面文件、关系数据库、面向对象数据库、Native XML数据库。Native XML数据库保存XML文档能做到不丢失信息,在管理XML数据上具有突出优势。在云平台进行原生XML数据存储和管理,对原始数据的结构化、非结构化的展现和数据安全有着重要的意义。XML技术将成为云计算、大数据发展的基础技术[3]。当前,Native XML数据库的研究已进入相对成熟的时期,基于DBaaS技术,将Native XML数据库与云计算平台整合可以进一步拓展云平台的处理能力,并为XML数据管理提供一个良好的方式。

2.2 XUpdate

XPath和XQuery是W3C推荐的XML文档查询语言。更新作为管理XML数据的一个重要功能,当前还没有一个统一的语言和操作标准,XML文档更新实现主要是基于XQuery语言扩展和自定义模型的更新[4]。XUpdate[5]更新语言为XML数据的更新操作提供了实际规范,推动了XML更新技术以及Native XML数据库的发展。XUpdate(XML Update Language)由XML∶DB Initiative制定,其功能是更新XML文档中的数据。XUpdate是一种基于XML的词汇表,类似于XSLT,但比XSLT要简单。XUpdate语言仅对如何修改XML数据作了明确定义,查询文档节点是通过XPath语法实现的。

Xupdate基于XML语法描述,制定的元素类型有:xupdate∶element、xupdate∶text、xupdate∶comment、xupdate∶processing-instruction、xupdate∶variable、xupdate∶cdata、xupdate∶attribute。XUpdate制定的操作命令有:xupdate∶insert-before、xupdate∶insert-after、xupdate∶update、xupdate∶append、xupdate∶rename、xupdate∶remove、xupdate∶variable、xupdate∶value-of。

XUpdate语言的命名空间是http://www.xmldb.org/xupdate,更新语句使用XML文档描述,根元素为xupdate∶modifications。xupdate∶modifications元素有一个表示XUpdate使用的版本的version属性,目前版本为1.0。xupdate∶modifications包含基本更新指令元素,用于更新XML数据。

XUpdate更新XML数据,通过XPath查询更新节点,更新XML文档的操作为:insert、update、append、rename、remove等。同时,为了更好地执行更新指令,还应包含自定的variables。

(1)Insert指令用于向XML文档中添加新的内容,可在节点后(xupdate∶insert-after)添加和节点前(xupdate∶insert-before)添加数据,通过XPath表达式表示的select属性获取待操作的节点。Insert指令可向XML文档中添加的数据类型有元素、文本、预处理指令、属性、注解、节点。语法示例:

xmlns∶xupdate="http://www.xmldb.org/xupdate">

Columbia

(2)xupdate∶append指令用于向XML文档中追加新建的元素节点,其select属性用于选择操作节点,child属性(整型值)用于定位新建节点在被选择节点中子节点的位置(默认为最后一个子节点)。xupdate∶append指令可追加的元素与Insert指令类似。语法示例:

(3)xupdate∶update指令用于更新节点内容,其属性select指定待更新节点。语法示例:

Greatest Hits

(4)xupdate∶remove指令用来删除XML文档数据节点,其属性select获取待删除节点。语法示例:

(5)xupdate∶rename指令用于对XML数据的属性或者元素节点进行重命名操作,通过select属性(值须为元素或属性节点集)获取待重命名的节点。语法示例:

title

(6)xupdate∶variable元素用于自定义更新变量。变量名通过name属性定义,变量的值可通过XPath表达式获取。对变量的引用xupdate∶value-of元素获取。语法示例:

XUpdate的基础语法、语义都简单明确,通过基础更新指令间的组合,可构建出多变的更新语句,为云平台下的XML数据更新提供了一个良好的机制。

3 XUpdate应用实施

3.1 XUpdate应用架构

图1 XUpdate更新架构

基于对Native XML数据库的拓展,结合开源框架类库,对XUpdate语言进行实现。采用模块化、低耦合开发实现,处理框架见图1。

基于XUpdate更新语言处理XML文档的开发实现由1个协调控制器和5个子模块组成。5个子模块为:XUpdate语言编译、XML文档存取、XUpdate指令执行、结果输出以及事务处理模块。

XUpdate更新命令通过XUpdate语言编译模块进行解析,转换成内部命令表示;基于命令中的select属性值进XPath表达式解析,获取待更新的数据信息;XUpdate协调控制器调用XUpdate命令执行模块遍执行命令集中的具体命令操作; XML文档存取模块负责把更新后的XML文档存入存储介质(如:Native XML数据库);通过对文档加锁机制和延迟写入实现更新过程中的事务处理模块。

3.2 实现算法

3.2.1 XUpdate语言编译

XUpdate更新命令以XML来描述,基于SAX解析XUpdate更新命令[6],生成基础的更新处理信息,通过Vector数据结构保存解析结果,完成内部命令表示。主要算法思想如下:

遍历XUpdate更新语句文档{

对于命名空间URL,加入命名空间Vector;

对于文本节点,添加文本处理指令,保存到文本Vector,在文本节点末,添加文本处理结束标志;

对于元素节点开始标记,

若该元素为更新指令元素,把指令转化为内部整数表示,添加该指令及其属性分别到命令、属性Vector;

若为Insert、Append指令的待更新元素,在命令Vector里添加元素指示指令和属性指示指令,对元素名进行命名空间映射,并添加到属性Vector中。对待更新元素的子元素进行同样的遍历操作。

对于元素节点结束标记,

若该元素为更新指令元素,在命令Vector里添加命令结束指令;

若为Insert、Append指令的待更新元素,在命令Vector里添加元素指示结束指令;

}

对于下面XUpdate语句,解析后,更新命令Vector表示见表1。

1

Tlpt,Tongling,Anhui

表1 更新命令Vector

3.2.2 XML文档更新实现

更新命令表示为内部定义的整型常量。XML文档更新基于XUpdate编译后Vector内部命令对待更新的XML文档进行操作。XUpdate操作实现算法如下:

获取待更新的XML文档;

遍历命令Vector,根据select属性选择上下文节点{

对于属性指示指令,构建属性元素;

对于文本节点,构建字符串元素,

对于variable命令,把属性seclect指定的节点集保存在HashTable中;

对于其他命令,根据命令类型,调用响应的execute()方法执行对应的更新操作;

}

保存更新后的结果。

XUpdate的命令主要为:插入、删除、更新。定义一个基础命令处理类,具体命令的实现继承于基础命令类,并改写自己命令的实现,实现调用格式的统一。基本算法如下:

(1)remove指令

被删除的对象为属性,获取其所属节点元素,调用节点删除属性方法删除;

被删除的对象为元素,获取其父节点元素,调用节点删除子节点方法删除;

(2)append指令

获取待追加的元素及其属性;

遍历所选择节点集,在child属性指定位置,追加命令操作对象。

(3)insert操作

获取待插入的元素及其属性;

遍历所选择节点集,在每个节点的前/后追加命令操作对象。

insert-after算法与insert-before算法类似。进行插入操作(包括append)需要基于namespaces、characters、attributes信息创建新节点,基于DOM模型构建出attribute、element、comment、text、CDATA,processing instruction以及variable对应的节点集,用于对XML文档进行更新。

(4)update操作

遍历所选择节点集{

对于元素节点,删除节点对应的文本节点,在追加上更新的文本节点;

对于文本节点,改变当前节点的值;

对于属性、注释等节点,直接设置其替换值即可;

}

(5)rename操作

遍历所选择节点集,获取所更新节点的父节点{

对于属性节点,获取属性所属节点元素,添加新属性,删除原有属性;

对于处理指令节点,创建新处理指令节点替换原有的指令节点;

对于元素节点,创建新元素节点{

遍历待重命名元素的属性,转换命名空间后,在新元素节点上添加之;

遍历待重命名元素的子元素,转换命名空间后,在新元素节点上添加之;

父节点替换原有的元素节点为新创建的元素节点;

}

}

rename操作的对象须为元素节点、属性节点或者处理指令。

3.3 结果测试

结合以上XUpdate更新处理架构,基于Java语言和开源框架,在Eclipse开发环境进行编码测试,结合云计算实验平台,通过虚拟机和PaaS平台部署测试代码,能够成功地对XML数据进行更新,为云平台基于模板的配置文件更新、XML数据管理提供了一种有意义的方式。

XUpdate更新实施主要包括XUpdate语言解析和XUpdate更新命令执行,经测试,对XUpdate更新文档的解析一般为30ms左右,对常规XML文档的处理,根据命令的复杂度和文档规模的不同,用时一般基于200~1000ms之间。更新性能与传统的基于DOM的XML文档更新进行比较[6],在小规模XML文档更新上两者相率相当,但随着XML文档规模的提升,基于XUpdate的更新处理显示了较好的更新性能,效率提高15%~40%。

4 结语

云计算、大数据技术的发展进一步促进了XML数据的应用和快速增长,本文基于XUpdate语言对XML文档的更新技术进行了研究和实施,提供了XML文档更新操作的基础规范和体系结构,对云计算环境下基于XUpdate的XML更新研究有着一定的实践意义。XML文档的更新是一个复杂的过程,更新时的事务处理、XML更新标准、基于云计算平台的XML更新技术以及Native XML 数据库、XUpdate与云平台的融合,都是需要进一步解决的问题。

[参考文献]

[1]赵伟,卓伟,李占波,等.基于云计算的一种新的数据交换架构[J].计算机工程与科学,2013(8):15-19.

[2]魏永山,张峰,陈欣,等.一种云计算环境下的XML查询数据服务的优化方法[J].计算机工程与科学,2013(6):31-36.

[3]王向阳.基于Hadoop的海量小型XML数据挖掘的研究[D].西安:西安邮电大学,2016.

[4]马程,徐海燕.基于CB+-tree的时态XML索引动态更新方法[J].广东石油化工学院学报,2016(1):44-47.

[5]Andreas Laux,Lars Martin.XML Update Language(XUpdate)[EB/OL].(2000-09-14)[2017-08-08].http://xmldb-org.sourceforge.net/xupdate/xupdate-wd.html.

[6]王磊,张红梅,姚保峰,等.XML文档解析技术研究[J].常州工学院学报,2013(5):36-41.

猜你喜欢

命令文档指令
浅谈Matlab与Word文档的应用接口
只听主人的命令
有人一声不吭向你扔了个文档
ARINC661显控指令快速验证方法
移防命令下达后
基于RI码计算的Word复制文档鉴别
杀毒软件中指令虚拟机的脆弱性分析
这是人民的命令
Persistence of the reproductive toxicity of chlorpiryphos-ethyl in male Wistar rat
中断与跳转操作对指令串的影响