admin 管理员组

文章数量: 1184232


2024年4月19日发(作者:netty向客户端写数据)

维普资讯

基于表格驱动的XML配置文件解析与生成技术 

郭瑞杰 王斌 丁捷 

(中国科学院研究生院,北京100039) 

(中国科学院计算技术研究所,北京100080) 

E—mail:ruijieguo@software.iet.ac.ca 

摘要XML文件作为配王文件是很多系统的首选,但是目前针对XML文件的配王信息提取与配王文件的构造技术都 

缺乏通用性,效率较低,扩展性很差。针对这一问题,论文提出了一种通用的基于表格驱动的XML配王文件解析与构造 

技术。谊技术具有如下几个特征:第一。采用表格驱动,用表格来表示XML的结构信息,可实现配王信息更加严格的验 

证;第二,利用表格中的槽(slot)结合函数回调来提取配王信息和生成配置文件,使数据和对数据的操作分开,降低了与 

配王文件的耦舍性。同时也使解析和构造统一化,具有高效性。第三,采用基于插件的开放式架构,通过扩展插件可以解 

析、生成任何复杂的配置文件,具有易扩展性;实际应用表明,论文提出的XML配王文件解析与构造技术具有通用性、易 

扩展性和高效性。 

关键词 配王文件 表格驱动 XML解析嚣xerees—c++ICU 

文章编号1002—8331一(2006)09一O089—04 文献标识码A 中圈分类号TP311 

Table-Driven XML—Based Configuration Ffie Parsing 

and Constructing Technology 

Guo Ruijie ・ Wang Bin2 Ding jie2 

(Graduate School of the Chinese Academy of Sciences,Beijing 100039) 

(Software Division,Institute of Computing Technology,Chinese Academy of Sciences,Beijing 100080) 

Abstract:XML configuration files ale gaining increasing popularity due to its convenience.But most of the current 

methods which parse and construct XML confiugration files perform poor in efifcent,extensibility and generality.In this 

paper.a table-driven method is proposed to solve this problem.Diferent from traditional ones,the method has following 

features,Firstly,it is based on table—driven,and stores XML structure information in tables which can validate the 

configuration information more strictly,Secondly,by using table's slots and adopting callback function mechanism,it 

separates data from the operations on them SO as to deduce the conpling with confiugration files.Finally,it employs 

plug—in based open framework,with which can parse and consturct any complex confiugration files.Experimental results 

also show that our method is general,extensible,and efficient,and very valuable in practice. 

Keywords:confiugration file,table—driven,XML parser,xercc8一c十十,ICU 

1 引言 

置参数的提取和配置文件的构造都会显得很繁杂。对于配置参 

配置文件是用来存储系统各种参数的文件。也是很多系统 

数提取,在工程中通常的做法有两种:一种是采用DOM编程模 

必不可少的一部分。Ini文件、文本文件和XML文件都是配置 

型解析整个XML配置文件形成DOM树,然后从中提取配置参 

文件的常见形式,ini文件和文本文件作为配置文件在存储、读 

数.另一种方法是采用SAX编程模型一边解析一边提取。这两 

取方面都比较简单,但是在灵活性和可扩展性上效果比较差, 

种处理方法都与配置文件的耦合性太强,通用性很差,而且也 

而且很难表达复杂的配置参数。XML文件是一种可扩展标志 

不易扩展,对于新的配置文件,除了重写代码。别无他法。对于 

语言。提供了一个可扩展的、强有力的标准来描述数据,使得数 

XML配置文件的生成,也存在同样的问题。对于这一问题,目 

据可以在各种应用程序中使用或在不同平台、不同应用中交换【71。 

前还没有文章提出很好的解决方法。本文提出一种基于表格驱 

因此使用XML作为配置文件是一种理想的选择,它表达配置 

动的配置文件解析与构造算法,它具有通用性、灵活性和易扩 

参数灵活,可读性强,可扩展性好,而且可以表达任意复杂的参 

展性等特点 

数:利用XML的验证机制也可以很好地对参数进行有效性验 

证 但是XML配置文件的解析与构造与ini配置文件、纯文本 

2总体结构 

配置文件相比较为复杂。特别是当配置参数较多、较复杂时,配 

系统的总体结构如图1所示。虚线上面部分是预处理阶 

基金项目:国家973基础研究发展规划资助项目(编号:2004CB318109) 

作者简介:郭瑞杰(1982一),男,硕士研究生,主要研究领域为网络信息安全、信息检索。 ̄(1972一),男。博士,副研究员。硕十生导师,研究方向为 

信息检索(IR)、自然语言处理(NLP)和信息安全。丁捷(1976一),男,硕士,助理研究员。主要研究方向计算机网络与信息安全。 

计算机工程与应用2006.09 89 

维普资讯

段.虚线下面部分是解析和生成阶段。预处理阶段使后阶段配 

程中的基本信息(drivetabh)。另一部分是XML配置文件的结 

置信息的提取和配置文件的生成简单化,通用化。基于插件式 构信息(XMLtable)。表l是drivetabh的格式。 

的引擎提供了扩展接口,允许方便地增加对新配置文件的支 

裹1 drivetable格式定义 

持。两个阶段的详细描述如下: 

Transformer l CallbackFunc I herator l DOMDo ̄I Exception  lXMLmble I Counter 

(1)预处理阶段 

负责从XML Schema文件中提取XML配置文件的结构并 

Transformer是一个编码转换器。用于Unicode编码和当地 

生成驱动表格,详细算法见3.2节。驱动表格主要包含XML配 

编码的相互转换;CallbackFunc是一个回调函数,每处理一个 

置文件的结构信息、回调函数接口以及用于存放配置参数的槽 

XML文档树节点将调用此函数;Iterator是XML文档树的迭代 

(slot)等.详细信息将在3,l节阐述。预处理阶段使后阶段的解 

子,在解析过程中用于遍历文档树;DOMDoc是文档对象,在构 

析与构造与具体的配置文件分开.降低了与配置文件的耦合 

造过程中用于生成XML文档树[31;Exception保存处理过程中 

性。使整个系统具有通用性。 

的错误信息;XMLtable指向XML配置文件的结构信息表格; 

(2)解析和生成阶段 

Counter是一个计数器,在递归处理过程中记录当前处理的驱 

由解析、构造引擎模块和XML解析器模块构成。解析、构 

动表格的哪一项。 

造引擎通过XML解析器模块。利用预处理阶段生成的驱动表 

XMLlable表格包含了XML配置文件的所有结构信息,表 

格的结构信息和回调函数,提取配置参数并填充到驱动表格的 

2是它的格式定义。 

槽中。或者从驱动表格的槽中提取配置信息生成配置文件。详 

裹2 XMLtable格式定义 

细算法见4.1及4.2。 

Tag I Type l Min l Max  lParent J Child l CMlbackFuncl Slot l DefValuel ErrorTip 

XML解析器模块是整个系统的基础模块。解析方式一般 

有两种嘲:基于事件驱动的解析方式(SAX方式)和基于树的解 

Tag表示XML文档节点名称;Type是节点类型,其值可以 

析方式(D0M方式);这里采用的是基于树的解析方式。并使用 

是node、int、stirng、bool、double等;Min/Max表示节点最小值,最 

XML Schema验证。这种方式在解析完XML文档后生成一个 

大值(数值类型)或最小长度,最大长度(字符串类型);Parent是 

文档树。应用程序可以遍历、搜索、编辑该文档树。选择的xML 

此节点的父节点在表格中的索引;Child表示于节点数目; 

解析器是Apache的Xerces—C++Version 2.6.0t”。考虑到各种 

CallbackFunc是扩展的回调函数指针:Slot是表格的槽,用于存 

编码格式之间转换的需要,还结合了IBM的ICU 3.0m作为编 

放节点值的地址;DefVahe是节点的默认值;ErrorTip存放当处 

码转换器。 

理此节点出错时的提示信息。 

在这里需要说明的是。当处理的节点有特殊的处理要求(例 

xML schem文件或XML 

如编码转换,循环参数,自定义验证)时,可以设定XMLtable的 

文件1 『 文件2 l…1文件n l 

CallhackFunc扩展回调函数指针,如果没有设定.将由 

‘ ● 

drivetable的CallbackFunc回调函数处理。理论上,通过扩展引 

预 

处 

l XML ̄H 

擎提供的扩展回调函数,可以处理任意复杂的XML配置文件。 

理 

』 

阶 

3.2驱动表格生成算法 

段 

驱动表格 

表格1 I l表格2 …l 表格n l 

XMLtable表根据XML Schema文件生成。XML Schemata! 

定义了XML文档的结构,充当XML数据的Schema。另外一个 

提取信息 i 填充信息…… 

解析、构造 擎 

作用就是充当XML文档的语法。从XML Schema中可以提取 

扩 —I芝墨!!!!f 

出XML文档详细、严格的结构信息。在这里只讨论从XML 

Schema中提取结构信息的算法。 

基础引擎 展 — 

接 i 

算法1 XML Schema结构提取 

解 

析 

口 —’r 

输入:XMLtable.Schema文件B 

和 

生 

输出:填充有结构信息的XMLtable 

成 

阶 

生成l f解析 

步骤1解析s,形成DOM树t,获取t的根节点D0MNode, 

段 

XML基础解析器模块 

初始化节点队列,curNode=O,n_Parent=一1; 

I xeIce8 ++解析器 —_一ICU编码转换模块I 

步骤2如果DOMNode非空,则转步骤3,否则算法结束; 

图1 解析部分整体架构图 

步骤3根据DOMNode填充t ̄bleicurNode] ̄.table[curNode ̄ 

Parent--nParent; 

步骤4如果DOMNode有孩子节点则转步骤5.否则转步 

3驱动表格设计及其生成算法 

骤6: 

驱动表格在预处理阶段由XML结构提取器生成。在解析 

步骤5 nParent=curNode,DOMNode的孩子节点按从左到 

和生成阶段还需要填充部分域的信息,详见4.1和4.2节。驱动 

右顺序进入队列: 

表格的作用主要有两点:第一、实现比XML Schema更加严格 

步骤6从队列中取节点DOMNode,curNode++,转步骤2。 

的验证;第二、使解析与构造引擎和具体配置文件无关.实现配 

下面结合实例简要阐述算法的执行过程。图2是一个简单 

置信息自动提取。 

的配置文件,图3是该配置文件对应的Schema文件【81。解析 

3.1驱动表格设计 

Schema文件后形成如图4所示的图。接下来深度遍历该图。每 

驱动表格主要包括两部分信息:一部分是在解析与构造过 遍历一节点则填充表格中相应的一项。由算法知此例的遍历顺 

90 2006.09计算机工程与应用 

维普资讯

序是S一>1一>2一>3一>5一>4。生成的表格如表3所示。Callback 

档树中提取配置信息,并填充至XMLtable的槽(slot)中;第二、 

Function、Slot和ErrorTip字段将由解析与生成阶段的引擎填充。 

图2 XML配置文件样例 

图3 XML配置文件样例的Schema文件 

图4 Schema的图衰示 

袅3 XML配置文件样例对应的驱动表格 

4解析、构造引擎设计 

引擎分为基础引擎和扩展引擎。扩展引擎通过扩展接13与 

基础引擎一起工作。该引擎主要有两个功能:第一、从DOM文 

根据XMLtable及其槽中的配置信息,构造DOM文档树。配置 

信息提取算法和配置文件生成算法分别实现这两个功能。 

4.1 配置信息提取算法 

XML解析器模块使用XML Schema验证(可选)、解析XML 

配置文件后形成DOM树,此算法遍历该DOM树,通过驱动表 

格的回调函数实现自定义验证、提取配置信息。回调函数可以 

是基础解析引擎的CallbackFunC,也可以是由用户实现的扩展 

引擎的自定义回调函数。下面是提取算法的详细步骤。 

算法2配置信息提取算法 

输入:DOM文档树 

输出:填充有配置信息的XMLtable 

(1)初始化 

①创建DOM文档树的迭代子: 

②初始化drivertable的各个域,包括设置基础引擎的解析 

回调函数CallbackFunc; 

③填充XML表格(XMLtable)各项的槽(Slot域),可以填 

充C结构域的指针或内存块地址; 

④如果有特殊处理要求,则填充XMLtable的扩展回调函 

数CallbackFunc。 

(2)进入基础引擎的CallbackFunc回调函数 

①向前推进文档树迭代子; 

②判断表格当前项是否是属性节点,是则文档树迭代子后 

退一步,并置属性节点标志;否则跳过非Element Node,进入 

③;如果迭代子结束则设置错误信息异常退出; 

③判断表格当前项节点名称是否与文档树当前节点名称 

致,如果一致则进入④;否则设置错误信息并退出; 

④(a)若是Tag节点,则对所有子节点。指向表格下一项, 

调用扩展回调函数或递归调用基础引擎的回调函数,处理子 

节点: 

(b)若是stirng、int、bool节点,则从文档树节点中提取、验 

证信息,如正确则填充到槽(Slot)指向的地址中,如有孩子节 

点,则处理于节点,方法同(a);否则设置错误信息并退出。 

如果在XML解析阶段使用XML Schema验证,则上述算 

法有些验证就可以去掉,但考虑到通用性还是保留。 

4.2配置文件生成算法 

构造算法基本上是解析算法的逆。首先将已填充配置信息 

的C结构或内存块各个域的地址存人驱动表格的槽中,接着遍 

历驱动表格的每一行.通过表格中的回调函数,对配置信息进 

行有效性验证,验证通过后使用XML解析器生成DOM树,最 

后解析器将DOM树序列化,生成XML配置文件。因为XML 

table包含了配置文件的结构等信息,算法不需要其他输入便 

可自动进行。下面是算法的详细步骤。 

算法3配置文件构造算法 

输入:配置信息 

输出:XML配置文件 

(1)预处理 

①创建空的XML文档树; 

②初始化drivetable的各个域,包括设置基础引擎的构造 

回调函数CallbackFunc; 

③将c结构各个域的指针或内存块的地址填充到 

XMLtable表格各项的槽中(Slot域); 

计算机工程与应用2006.09 91 

维普资讯

④如果有特殊处理要求,则填充XMLtable的扩展回调函 

数CaUbackFunc。 

(2)进入基础引擎的CMlbackFunc回调函数 

件在参数结构上也改变。可以预见,传统方法代码改动量将 

更大。 

①判断表格当前项是否是属性节点,是则进入②,否则进 

入③; 

②给文档树的当前节点添加属性,属性名是XMLtable表 

格的Tag域的值;属性值则是XMLtable槽中的配置信息;进 

匦 垂 

入④; 

③给文档树添加树节点,节点名称是XMLtable Tag域的 

薹毒呷蓑囊唧 

图5解析速度对比 图6可扩展性对比 

值。如果设置了string、int或bool标志,则根据XMLtable槽中 

的配置信息设置节点值;进入④; 

6结论 

④如果XMLtable表格项的Child域大于0,则对于所有子 

本文提出了一种新的XML配置文件解析与生成技术.该 

节点.递归调用基础引擎的构造回调函数或调用扩展引擎的构 

技术采用驱动表格.使配置文件的解析与生成不依赖于具体的 

造回调函数.处理子节点; 

配置文件。这样做的最大好处是对于不同的配置文件,只需在 

⑤将文档树序列化,生成配置文件。 

预处理阶段生成对应的驱动表格。而无需改动代码。可扩展引 

擎的使用使整个系统易扩展,理论上可以处理任何复杂的 

5实验 

XML配置文件。经实验验证,这种方法具有通用性、易扩展性 

整个系统采用C++语言实现.同时在Windows XP和 

和高效性。 

Redhat Linux9.0系统下测试通过。为了验证本文方法的优势, 

该技术应用在某大型项目中.取得了很好的效果。这种方 

我们使用了实际系统的三种不同类型的XML配置文件各10M 

法不仅仅适用系统配置文件的解析与构造,稍作扩展之后可以 

进行解析实验。这三种XML配置文件的配置参数复杂性递增。 

应用到各种基于XML的系统中,例如,基于XML的数据交换、 

标定为简单配置文件、复杂配置文件和较复杂配置文件,简记 

数据传递等。 

为简单、复杂和较复杂。其中较复杂配置文件包含了复杂的配 

今后的工作将继续完善这一技术,并做成开发包,形成独 

置参数结构。本文的方法主要考虑的是通用性、可扩展性和解 

立的公共模块,供各种软件系统使用,减少重复工作,提高效 

析效率。通用性是通过可扩展性实现的。因此实验就可扩展性 

率。(收稿日期:2005年8月) 

和解析效率进行。可扩展性是很难精确衡量的指标,在这里简 

单地将可扩展性评价指标定义如下: 

参考文献 

定义设 是解析XML配置文件的代码总行数. 是该配 

1.Xerces Home Page.http://xm1.apache.org/xerces-c/ 

置文件参数名称、参数类型改变后所要修改的代码行数,则可 

2.ICU HomePage.http://www一124.ibm.com/icu/ 

扩展性 l 。E越大则扩展性越好。 

3.Rick Parrish.Make the most of Xerees—C++.Part 2,A DOM imple— 

实验在WindowxXP平台,CPU P4 1.7G,内存256M DDR 

mentation.http://www一90o.ibm.com/developerWorks/cn/xml/x—xerec2/ 

环境下进行。图5是使用传统DOM方式和本文方法在解析速 

index

eng.shtml 

度(平均值)上的对比。本文的方法在底层解析xML也是使用 

4.W3C.XML Schema Part l:Structures Second Edition.http://www.w3. 

DOM方式,而解析XML的时间占整个解析过程的大部分,因 

orgfrR]xmlschema—l/#intm 

此两种方法解析速度相差不多。但是本文的方法在验证、提取 

5.Mark Davis.Forills of Unicode.http://www-106.ibm.com/developerworkd 

配置参数时使用驱动表格,避免了很多重复操作,所以速度比 

library/utfencodingforms/ 

传统方法有所提高。特别是当配置文件较复杂时.这种优势就 

6.Wodd Wide Web Consortium.http://www.w3.org 

越明显。图6是在可扩展性方面的对比实验。对于简单和复杂 

7.Extensible Markup Language(XML)1.0(Second Edition)W3C Re- 

commendation.http://www.w3.org/TR/REC-xm1.2000-1O一06 

的XML配置文件,本文的方法基本不用修改任何代码,但是传 

8.XML Schema Part 0:Primer W3C Recommendation.http://www.w3. 

统方法的代码修改比较大。对于第三种较复杂的配置文件,编 

org/XML/Schema.20ol—O5一O2 

写了一个简单的扩展引擎辅助解析.增加了一点代码,但是并 

9.Document Object Model(DOM)Level 3 Core Speciifcation Version 

没有修改已有代码。而传统方法,基本是所有代码的重写。这仅 

1.O W3C Candidate Recommendation.http://www.w3.o,w'rw20o3/CR— 

仅是配置文件参数名称、参数类型改变时的情况,如果配置文 

DOM—Level一3一Core一20o3l lO7,.20o3—1 l—O7 

(上接88页) 

6.Zhang Z.Friedrich K.Artiifcial neural networks applied to polymer 

and Manufacturing,2004;35(5):585 ̄594 

composites:A review[J].Composites Science and Technology,2003; 

5.Cherian R P,Smith L N,Midha P S.A neural network approach for 

63(14):2029 ̄2044 

selcetion of powder metallurgy materilas and process pammete瑁【J】. 

7.高诚辉,林有希等.一种混杂纤维摩擦材料及其制备.中国发明专利。 

Artiifcial Intelligence in Engineering,2000;14(1):39—4_4 

公开号:CNI487005A 

92 2006.09计算机工程与应用 


本文标签: 配置文件 解析 表格 节点 生成