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