梁廣吉 宋曉慧
摘要:隨著網(wǎng)絡(luò)技術(shù)的迅速發(fā)展,越來(lái)越多的信息被以XML文檔形式來(lái)交換。XML具有開(kāi)放性、自描述性和平臺(tái)無(wú)關(guān)性,近來(lái)己成為網(wǎng)上應(yīng)用系統(tǒng)間數(shù)據(jù)交換的標(biāo)準(zhǔn)。本文提出了一種復(fù)雜的XML格式之間轉(zhuǎn)換的通用解決方案,解決了商務(wù)通信系統(tǒng)中不同XML格式文檔的數(shù)據(jù)轉(zhuǎn)換問(wèn)題,使得行業(yè)數(shù)據(jù)傳輸和表達(dá)按照行業(yè)規(guī)范自動(dòng)分析和處理。
關(guān)鍵詞:XML;格式轉(zhuǎn)換;文檔
隨著互聯(lián)網(wǎng)應(yīng)用需求及其相關(guān)支撐技術(shù)的發(fā)展,XML[1]的元語(yǔ)言特性及其本身良好的結(jié)構(gòu)性使它成為互聯(lián)網(wǎng)異構(gòu)環(huán)境中各種不同類(lèi)型和不同領(lǐng)域數(shù)據(jù)相互交換的開(kāi)放標(biāo)準(zhǔn)。XML格式之間的轉(zhuǎn)換是XML技術(shù)領(lǐng)域內(nèi)的一個(gè)比較常見(jiàn),且又是一個(gè)很重要的題。即使是在同一個(gè)行業(yè)的內(nèi)部,數(shù)據(jù)文檔的XML Schema之間的差距也非常大。企業(yè)信息系統(tǒng)的集成,數(shù)據(jù)信息的交換等都需要進(jìn)行XML數(shù)據(jù)格式之間的轉(zhuǎn)換工作。本文提供一種更適合于解決復(fù)雜的XML格式之間轉(zhuǎn)換的解決方案。該方案成功的解決了PDF的XAF文件格式,FileNet表單文件格式到IBM Lotus Forms表單文件格式的轉(zhuǎn)換工作。
1 一種XML格式之間轉(zhuǎn)換的構(gòu)架
不同XML格式之間的轉(zhuǎn)換工作是常見(jiàn)而又非常重要的。在IT領(lǐng)域,為了解決這一問(wèn)題,各種新方法、新技術(shù)層出不窮。比如利用XSLT[4]等技術(shù)進(jìn)行XML數(shù)據(jù)格式的轉(zhuǎn)換,XSLT(Extensible Stylesheet Language Transformations)是一種基于XML的一種語(yǔ)言,用以將一種XML格式數(shù)據(jù)轉(zhuǎn)換為另一種XML格式數(shù)據(jù),也可以轉(zhuǎn)換成任意其它格式的數(shù)據(jù)。而對(duì)于復(fù)雜轉(zhuǎn)換經(jīng)常是困難的,甚至是不可能的。又比如RDF/RDFS/OWL技術(shù)(XML Schema是用來(lái)定義XML文檔結(jié)構(gòu),而RDFS/OWL(本體描述語(yǔ)言)則定義了文檔詞匯,提供了一種共同的理解)。本文提出了一種XML格式之間轉(zhuǎn)換的方案構(gòu)架。如圖1所示。
圖1 XML格式轉(zhuǎn)換框架
原文件(XML格式)通過(guò)解析器(Parser)解析生成數(shù)據(jù)信息,并存儲(chǔ)在數(shù)據(jù)模型里。數(shù)據(jù)模型是整個(gè)構(gòu)架的核心部分。數(shù)據(jù)模型主要是基于目標(biāo)文件的XML Schema[2]而構(gòu)建的,也可以基于目標(biāo)XML文件的領(lǐng)域知識(shí)構(gòu)建。它可以是普通的數(shù)據(jù)模型,也可以是基于EMF(Eclipse Modeling Framework)的數(shù)據(jù)模型。在對(duì)原XML文件進(jìn)行解析的過(guò)程中,解析器要根據(jù)基于原文件和目標(biāo)文件的XML Schema文件而生成的映射表中的信息,做相應(yīng)的解析優(yōu)化處理。
在輸出目標(biāo)XML文件之前,優(yōu)化器和轉(zhuǎn)換規(guī)則先后對(duì)數(shù)據(jù)模型中的數(shù)據(jù)信息進(jìn)行相應(yīng)處理。配置文件在構(gòu)架中的作用是用來(lái)管理優(yōu)化器和轉(zhuǎn)換規(guī)則的。用戶可以根據(jù)業(yè)務(wù)邏輯的需要通過(guò)配置文件來(lái)定制優(yōu)化器和轉(zhuǎn)換規(guī)則??梢钥闯鲞@種解決方案的簡(jiǎn)單靈活性,可復(fù)用性和可擴(kuò)展性。只需為不同的原文件提供一個(gè)解析器就擴(kuò)展了構(gòu)架的應(yīng)用。
2 構(gòu)建XML格式轉(zhuǎn)換的數(shù)據(jù)模型
2.1 模板及其性質(zhì)
數(shù)據(jù)模型是用來(lái)存儲(chǔ)解析進(jìn)來(lái)的數(shù)據(jù)信息的,它是構(gòu)架的核心部分。目前有兩種構(gòu)建數(shù)據(jù)模型的辦法:普通的數(shù)據(jù)模型和基于EMF技術(shù)構(gòu)建的數(shù)據(jù)模型。
普通的數(shù)據(jù)模型是應(yīng)用普通的Java類(lèi)來(lái)構(gòu)建,主要是基于目標(biāo)文件的領(lǐng)域知識(shí),通常是結(jié)構(gòu)化的數(shù)據(jù)模型。這種模型構(gòu)建的優(yōu)點(diǎn)是簡(jiǎn)單、通用,主要的缺點(diǎn)是需要構(gòu)建輸出模塊從而把模型中的信息輸出為滿足目標(biāo)XML Schema的XML文件。圖2顯示了在電子表單領(lǐng)域中應(yīng)用的結(jié)構(gòu)化數(shù)據(jù)模型片段。
圖2 電子表單領(lǐng)域的結(jié)構(gòu)化數(shù)據(jù)模型片段
基于EMF技術(shù)構(gòu)建數(shù)據(jù)模型的技術(shù)已經(jīng)相當(dāng)成熟。我們主要應(yīng)用目標(biāo)文件的XML Schema來(lái)構(gòu)建EMF數(shù)據(jù)模型?;贓MF的數(shù)據(jù)模型具有事件通知機(jī)制和持久化方面的支持。因此,模型帶來(lái)的最大的好處就是開(kāi)發(fā)者不必自己動(dòng)手構(gòu)建輸出模塊。
模型的構(gòu)建是XML格式之間轉(zhuǎn)換的關(guān)鍵。構(gòu)建的模型應(yīng)當(dāng)滿足應(yīng)用程序的需求(對(duì)照映射表,模型要完全支持原文件中的可匹配信息),不要求模型囊括相關(guān)領(lǐng)域的所有通用知識(shí),但模型提供給原文件解析器的API應(yīng)該簡(jiǎn)單易用,模型要具有高可擴(kuò)展性和良好的可維護(hù)性。
3 優(yōu)化器(Optimizers)在解析原XML文件中的應(yīng)用
當(dāng)原XML文件中的信息被解析進(jìn)來(lái),并存儲(chǔ)在已經(jīng)建立的數(shù)據(jù)模型里,此時(shí)的數(shù)據(jù)模型稱為原始數(shù)據(jù)模型,模型里面的數(shù)據(jù)信息稱為原始數(shù)據(jù)信息。我們根據(jù)目標(biāo)XML文件的特性,需要對(duì)原始數(shù)據(jù)信息進(jìn)行優(yōu)化處理??梢愿鶕?jù)需要?jiǎng)?chuàng)建若干個(gè)Optimizers。
根據(jù)電子表單領(lǐng)域的實(shí)際需要,我們創(chuàng)建了很多Optimizers。舉例如下:
(a)線(Line)的對(duì)齊、連接,如圖4所示:
我們通過(guò)對(duì)以上Optimizers的應(yīng)用,使得PDF文件的轉(zhuǎn)換效果更佳。
事實(shí)上,優(yōu)化器的開(kāi)發(fā)應(yīng)用取決于兩種格式文件之間的可匹配的程度。如果兩種文件的可匹配性很高,基本上不用開(kāi)發(fā)優(yōu)化器。反之,為了使數(shù)據(jù)平滑輸出,需要根據(jù)業(yè)務(wù)邏輯的需要進(jìn)行相應(yīng)的優(yōu)化處理。
此外,如果某種原文件的解析器需要用戶通過(guò)UI配置一些解析參數(shù)的話,我們也可以提供Parser階段應(yīng)用的“Optimizers”。舉例來(lái)說(shuō),原XML文件的某個(gè)元素和可匹配的目標(biāo)XML文件的相應(yīng)元素是一對(duì)多的關(guān)系,那么Parser的解析就有了多種選擇。這時(shí)候,讓用戶進(jìn)行選擇似乎是最合理的解析策略了。
4 轉(zhuǎn)換規(guī)則在生成目標(biāo)XML[3]文件格式中應(yīng)用
數(shù)據(jù)模型里面的信息經(jīng)過(guò)優(yōu)化后,就可以輸出或者序列化為滿足目標(biāo)XML Schema的數(shù)據(jù)文件。在這個(gè)過(guò)程中,我們又可以根據(jù)用戶的轉(zhuǎn)換要求執(zhí)行一些通用的轉(zhuǎn)換規(guī)則。比如在電子表單領(lǐng)域,用戶經(jīng)常有這樣的轉(zhuǎn)換要求:對(duì)轉(zhuǎn)換后的電子表單文件,要求統(tǒng)一更改標(biāo)簽(Label)的前景顏色(Font color),統(tǒng)一更改頁(yè)面(Page)的背景顏色(background color),所有轉(zhuǎn)換后的文件都要加入一個(gè)標(biāo)準(zhǔn)的包含企業(yè)標(biāo)志(Logo)的Toolbar模版等等。這些轉(zhuǎn)換要求可以以轉(zhuǎn)換規(guī)則的形式存在。用戶可以開(kāi)發(fā)定制并應(yīng)用自己的轉(zhuǎn)換規(guī)則來(lái)批量轉(zhuǎn)換原文件。對(duì)比Optimizers,我們知道轉(zhuǎn)換規(guī)則主要是針對(duì)目標(biāo)文件的通用操作的。用戶對(duì)目標(biāo)文件的常用的操作都可以以Rules的形式存在于轉(zhuǎn)換框架里,極大的豐富了格式轉(zhuǎn)換的框架。
5 應(yīng)用配置文件管理Optimizers和Rules
配置文件就是一個(gè)XML格式的文件,用以持久化管理所有的Optimizers和Rules。用戶可以通過(guò)定制Optimizers和Rules來(lái)配置自己的Profile(通常情況下,每一種原文件的解析器都對(duì)應(yīng)一個(gè)缺省默認(rèn)的Profile。系統(tǒng)還為所有解析器(包括用戶定制的解析器,既第三方解析器)提供了一個(gè)可擴(kuò)展的通用的 Profile)。在轉(zhuǎn)換的過(guò)程中,需要加載Profile,進(jìn)而應(yīng)用里面的優(yōu)化器和轉(zhuǎn)換規(guī)則來(lái)對(duì)數(shù)據(jù)模型進(jìn)行深入處理,從而完成轉(zhuǎn)換工作。
清單1. 給出了 Profile 文件的示例片段。
xml version="1.0" encoding="UTF-8"?
http://sample.com.cn/profile
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://sample.com.cn/profile ProfileSchema.xsd ">
version control is applied for developer
< !-- 假定有一個(gè)后綴名為 .form 的基于 XML 格式的電子表單文件 -->
FAlignOptimizer
…
…
…
…