摘要:針對(duì)電子商務(wù)應(yīng)用中的網(wǎng)絡(luò)數(shù)據(jù)交互和業(yè)務(wù)集成的需求,利用XML文檔的跨平臺(tái)性實(shí)現(xiàn)數(shù)據(jù)在異質(zhì)系統(tǒng)之間的交換。在Windows平臺(tái)下實(shí)現(xiàn)數(shù)據(jù)從Microsoft Server2000到XML文檔的轉(zhuǎn)換,從而實(shí)現(xiàn)數(shù)據(jù)內(nèi)容和表現(xiàn)形式的完全分離,使用XSL樣式表顯示不同風(fēng)格的頁面。
關(guān)鍵詞:電子商務(wù);發(fā)布技術(shù);JDOM接口;XML數(shù)據(jù)交換
中圖分類號(hào):F724文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2008)09-11603-03
Research on Technology of Content Publishing in E-Commerce
ZHOU Chao-feng, LI Ye-bai, LIAO Lian-jun, ZHANG Xian-chun
(College of Information Engineering, North China University of Technology, Beijing 100041, China)
Abstract: Base on the needs of network data transport and service integration in E-commerce Web System, realizes data exchange between different systems with XML's promise of cross-platform support for applications. Transform the data from Microsoft Server2000 to the XML documents under the Windows platform, thus realizes the data content and the form complete separation, uses the XSL cascading style sheet to show different styles of pages.
Key words: E-commerce; publishing technology; JDOM interface; XML data exchange
1 引言
內(nèi)容(Content)指各種非結(jié)構(gòu)化或半結(jié)構(gòu)化的數(shù)字資源,不僅指文字資料和數(shù)據(jù),還包括圖片、音頻和視頻等各種信息載體。隨著企業(yè)數(shù)據(jù)成幾何級(jí)數(shù)增長(zhǎng),而這些企業(yè)中有價(jià)值信息,真正能夠以結(jié)構(gòu)化數(shù)據(jù)的形式被數(shù)據(jù)庫管理的部分是非常有限的,而大量的信息都是以非結(jié)構(gòu)化形式散落在企業(yè)的各個(gè)角落,包括企業(yè)的各種報(bào)表、賬單、電子文檔、圖片、傳真,以及大量的多媒體的音頻、視頻信息等等。
針對(duì)上述存在的問題,本文主要從研究電子商務(wù)中的內(nèi)容發(fā)布技術(shù)角度出發(fā),側(cè)重研究以下內(nèi)容的發(fā)布:網(wǎng)絡(luò)廣告(包含Banner、Button 、通欄、豎邊、巨幅廣告等)是以GIF、JPG、Flash等格式建立的圖像文件,定位在網(wǎng)頁中大多用來表現(xiàn)廣告內(nèi)容;以及與內(nèi)容相結(jié)合的新聞、專題的可定制化、個(gè)性化發(fā)布。與現(xiàn)有的內(nèi)容發(fā)布技術(shù)相比,主要實(shí)現(xiàn):
對(duì)不同類型的數(shù)據(jù),如圖片、動(dòng)畫、網(wǎng)頁等非結(jié)構(gòu)化數(shù)據(jù)進(jìn)行分類存儲(chǔ)。
使用XML格式分析器將不同類型數(shù)據(jù)進(jìn)行統(tǒng)一描述。
設(shè)計(jì)供用戶表現(xiàn)數(shù)據(jù)的XSL樣式表(模版)。
獲取數(shù)據(jù)的良好表現(xiàn),實(shí)現(xiàn)良好的人機(jī)界面交互。
2 相關(guān)背景
在發(fā)布技術(shù)方面,互聯(lián)網(wǎng)絡(luò)的發(fā)展使HTML成為網(wǎng)絡(luò)上應(yīng)用最為廣泛的語言,HTML使用各種定義好的標(biāo)記來分別標(biāo)識(shí)和格式化不同的網(wǎng)頁元素,其簡(jiǎn)單性和易用性,使得Web技術(shù)及其應(yīng)用得到空前的發(fā)展。但是隨著Web應(yīng)用需求的不斷增長(zhǎng),HTML的局限性逐漸顯現(xiàn):由于標(biāo)注的HTML標(biāo)記由W3C預(yù)先確定,不能根據(jù)需要自行定義,所以當(dāng)描述各種復(fù)雜內(nèi)容的文檔時(shí),HTML就顯得力不從心。其次,HTML無法真正實(shí)現(xiàn)數(shù)據(jù)的交互,沒有專門的編程接口來解析數(shù)據(jù),這就限制了它和各種應(yīng)用程序、數(shù)據(jù)庫以及操作系統(tǒng)的交互,對(duì)于不同數(shù)據(jù)格式之間的轉(zhuǎn)換和信息傳遞也束手無策。
正是由于HTML語言存在交互性差、語義模糊的缺點(diǎn),XML應(yīng)運(yùn)而生。XML具備了HTML的簡(jiǎn)單性的同時(shí)又具有強(qiáng)大的可擴(kuò)展性。與HTML不同的是,XML并不是用于編排內(nèi)容,而是用于描述數(shù)據(jù),用戶可以根據(jù)描述數(shù)據(jù)的需要自己定義各種標(biāo)記。在電子商務(wù)模式中有很多規(guī)范的信息模型采用層次模型,因?yàn)閷哟文P捅阌诿枥L由許多元素和子元素構(gòu)成的數(shù)據(jù)。XML非常適合描述層次模型。一份XML文檔就是由一系列包含內(nèi)容和屬性的元素按層次結(jié)構(gòu)所組成的。XML的靈活性允許它描述不同種類應(yīng)用軟件中的數(shù)據(jù)。同時(shí),由于基于XML的數(shù)據(jù)是自我描述的,數(shù)據(jù)不需要有內(nèi)部描述就能被交換和處理。
和目前通用的HTML語言相比,XML的優(yōu)點(diǎn)在于:(1)可擴(kuò)展性:縣有良好的可擴(kuò)展性,可根據(jù)應(yīng)用的需要定義新的標(biāo)記;(2)結(jié)構(gòu)化:可采用結(jié)構(gòu)化的方法表示任意復(fù)雜程度的數(shù)據(jù);(3)可驗(yàn)證性:提供了一種機(jī)制以檢查數(shù)據(jù)的結(jié)構(gòu)是否正確;(4)媒體無關(guān)性:能夠以多種格式發(fā)布內(nèi)容;(5)廠商和平臺(tái)獨(dú)立性:能夠用標(biāo)準(zhǔn)的商業(yè)軟件甚至簡(jiǎn)單的文本工具處理任何符合標(biāo)準(zhǔn)的文檔。
3 系統(tǒng)架構(gòu)
通常大量的網(wǎng)絡(luò)應(yīng)用都需要對(duì)數(shù)據(jù)庫進(jìn)行存取。目前基于HTML的應(yīng)用都由Web瀏覽器來解釋HTML頁,而由服務(wù)器端
的應(yīng)用程序(Servlet),如CGI腳本程序來負(fù)責(zé)處理HTML頁上的數(shù)據(jù),完成對(duì)數(shù)據(jù)庫的存取工作。由于XML本身側(cè)重對(duì)數(shù)據(jù)的語義描述,而將數(shù)據(jù)的表示交給了擴(kuò)展樣式語言XSL和客戶端,這就避免了HTML通常將二者混雜在一起,使HTML文檔異常繁瑣而難以分析。因此基于XML的應(yīng)用采取了這種方式(如圖1):通過一個(gè)中間件來實(shí)現(xiàn)數(shù)據(jù)在XML與數(shù)據(jù)庫間的格式轉(zhuǎn)換,這一中間件可以作為客戶端的應(yīng)用工具,也可作為Servlet。再由另外的Servlet負(fù)責(zé)通過XSL對(duì)XML文檔進(jìn)行格式轉(zhuǎn)換和界面設(shè)計(jì)。圖1所給出的應(yīng)用模式主要針對(duì)較大型的網(wǎng)站,因此采用三層服務(wù)器結(jié)構(gòu)將中間件程序和XSL處理器分別交由專門的網(wǎng)絡(luò)應(yīng)用服務(wù)器去運(yùn)行。此外,應(yīng)用服務(wù)器還要完成HTML到XML的格式轉(zhuǎn)換,它實(shí)際上實(shí)現(xiàn)的是XML與HTML間格式的雙向映射。
XML文檔在Java Servlet中可以通過多種方法生成。最簡(jiǎn)單的方法是以文本的方式生成XML的標(biāo)簽,這種方法最易于實(shí)現(xiàn),但在大型的Web應(yīng)用中,其維護(hù)性和擴(kuò)展性比較差。另一種方式是通過JDOM應(yīng)用接口產(chǎn)生XML文檔,通過JDOM可以很容易地將數(shù)據(jù)庫中獲得的記錄直接轉(zhuǎn)換為XML文檔。
考慮到可擴(kuò)展標(biāo)記語言eXtensible Markup Language(XML)使得使用者可以以自己定義的格式來描述和構(gòu)造數(shù)據(jù),是一種以文本文件來存儲(chǔ)格式化數(shù)據(jù)的機(jī)制。與HTML的不同體現(xiàn)在XML重點(diǎn)在于對(duì)數(shù)據(jù)的存儲(chǔ),而自身并沒有為數(shù)據(jù)的顯示做處理。通過層疊樣式表CSS(cascading style sheets)和可擴(kuò)展樣式表語言XSL(extensible stylesheet language)技術(shù)來顯示。而XSLT應(yīng)用靈活,生成結(jié)果文件格式的多樣化正好滿足項(xiàng)目對(duì)于內(nèi)容和數(shù)據(jù)存儲(chǔ)的要求。
使用XML和Java技術(shù)結(jié)合,可以將Web設(shè)計(jì)人員有效進(jìn)行兩層分工:
第一層為程序代碼設(shè)計(jì)者,主要設(shè)計(jì)Java Servlet,使用JDOM接口技術(shù)從數(shù)據(jù)庫中讀取數(shù)據(jù)轉(zhuǎn)換為相應(yīng)的XML文檔;
另一層為頁面風(fēng)格設(shè)計(jì)者,主要負(fù)責(zé)設(shè)計(jì)樣式單通過XSL樣式表單將XML文檔以多種風(fēng)格(HTML)向用戶展示。從而達(dá)到內(nèi)容與形式分離,實(shí)現(xiàn)對(duì)應(yīng)工作人員的分工,提高電子商務(wù)企業(yè)發(fā)布效率。
4 關(guān)鍵技術(shù)及實(shí)現(xiàn)
基本開發(fā)環(huán)境是Windows Server 2003 操作系統(tǒng),采用的數(shù)據(jù)庫是Microsoft SQL Server2000和Tomcat Web服務(wù)器。開發(fā)語言是Java,使用到XML作為數(shù)據(jù)轉(zhuǎn)換的中間層,使用XSLT語言實(shí)現(xiàn)對(duì)XML數(shù)據(jù)的表示,從而達(dá)到數(shù)據(jù)內(nèi)容和表示的分離。關(guān)鍵技術(shù)如下:
4.1 使用JDOM實(shí)現(xiàn)數(shù)據(jù)庫到XML文件的數(shù)據(jù)轉(zhuǎn)換
JDOM是基于樹操作的純Java API,它提供一套用于解析、創(chuàng)建、處理和實(shí)現(xiàn)XML的解決方案。JDOM的內(nèi)部邏輯結(jié)構(gòu)基本上與DOM的相同,比如具有Document、Element、Comment等文檔節(jié)點(diǎn)類型,其中每一個(gè)JDOM文檔必須有一個(gè)Document節(jié)點(diǎn),并且為節(jié)點(diǎn)樹的根節(jié)點(diǎn)。該根節(jié)點(diǎn)可以有子節(jié)點(diǎn)或者葉子節(jié)點(diǎn)如Comment、Text等。JDOM文檔中的每一個(gè)節(jié)點(diǎn)類型均對(duì)應(yīng)格式良好的XML文當(dāng)中的每一個(gè)元素。這也就為我們利用JDOM轉(zhuǎn)換數(shù)據(jù)庫到XML文檔提供了可操作的依據(jù)。
下載JDOM組件,解壓縮之后把jdom.jar包放入Web應(yīng)用的“Web-INF/lib”或者Tomcat安裝的“common/lib”目錄下,關(guān)鍵代碼實(shí)現(xiàn):
……
<TITLE>用JDOM實(shí)現(xiàn)數(shù)據(jù)庫到XML的轉(zhuǎn)換</TITLE>
……
<%@page import=\"org.jdom.*\"%>
<%@page import=\"java.*\"%>
<%Class.forName(\"com.microsoft.jdbc.sqlserver.SQLServerDriver\").newInstance();
String url=\"jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=DB_CUSTOM\";
//載入jdbc odbc的驅(qū)動(dòng)程序
String user=\"sa\";
String password=\"sa\";
Connection conn= DriverManager.getConnection(url,user,password); //連接數(shù)據(jù)庫
Statement stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
//創(chuàng)建一個(gè)statement
String sql=\"select * from client\"; //定義查詢的SQL語句
ResultSet rs=stmt.executeQuery(sql); //執(zhí)行查詢
Document document=new Document(new Element(\"客戶列表\")); //創(chuàng)建文檔
ResultSetMetaData rsmd = rs.getMetaData(); //獲取字段名
int numberOfColumns = rsmd.getColumnCount(); //獲取字段數(shù)
int i=0;
while(rs.next()){ //將查詢結(jié)果取出
Element element0=new Element(\"客戶姓名\"); //創(chuàng)建元素 生成JDOM樹
document.getRootElement().addContent(element0);
for (i=1; i〈=numberOfColumns;i++)
{ String date=new String(rs.getString(i).getBytes(\"ISO-8859-1\"),\"gb2312\");
//代碼轉(zhuǎn)換
Element element=new Element(rsmd.getColumnName(i)).setText(date);
element0.addContent(element);
}
}
rs.close(); //關(guān)閉結(jié)果集
stmt.close(); //關(guān)閉statement
conn.close(); //關(guān)閉連接
XMLOutputter outp = new XMLOutputter();
outp.output(document, new FileOutputStream(\"d:data.xml\")); //輸出XML文檔
out.print(\"XML 文檔生成完畢!\");
%〉
……
這樣獲得數(shù)據(jù)表轉(zhuǎn)換的XML文檔。
4.2 利用XSL樣式表來轉(zhuǎn)換XML文檔
XML本身只專注于定義內(nèi)容數(shù)據(jù),為了能夠?yàn)g覽數(shù)據(jù)內(nèi)容,就要使用另一種機(jī)制來描述XML元素。在轉(zhuǎn)換XML數(shù)據(jù)時(shí),可以采用CSS和XSL兩種樣式表語言來轉(zhuǎn)換。這里是使用XSL樣式表來進(jìn)行轉(zhuǎn)換。XSL的全稱是eXtensible Stylesheet Language,即可擴(kuò)展樣式語言。XSL由兩部分組成,即數(shù)據(jù)轉(zhuǎn)換語言XSLT和數(shù)據(jù)格式化語言。XSLT結(jié)合Xpath的功能把電子商務(wù)中的XML文檔數(shù)據(jù)轉(zhuǎn)換成按照指定格式的HTML網(wǎng)頁,提供用戶瀏覽。
再用XSLT樣式表對(duì)XML文檔進(jìn)行轉(zhuǎn)換時(shí),XSLT處理器首先去尋找與XML文檔根節(jié)點(diǎn)相匹配的模板,因此,每一個(gè)XSLT樣式表都會(huì)有一個(gè)應(yīng)用到根節(jié)點(diǎn)的模板,關(guān)鍵代碼:
<? xml version=\"1.0\" encoding=\"gb2312\"?>
<!-- XML文件頭-->
<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">
<!—應(yīng)用到根節(jié)點(diǎn)的模板-->
<xsl:template match=\"/\">
<!--輸出形式-->
<html>
<head><title>客戶信息</title></head>
<body align=\"center\">
<p>客戶基本信息<br/><br/>
</xsl:template>
<xsl:template match=\"customer\">
<xsl:value-of select=\"name\" /><br/>
<xsl:value-of select=\"id\" /><br/>
<xsl:value-of select=\"address\" /><br/>
<xsl:value-of select=\"email\" /><br/>
</p>
</body>
</html>
<!--輸出形式結(jié)束-->
</xsl:template>
</xsl:stylesheet>
5 結(jié)束語
本文從研究電子商務(wù)信息發(fā)布的角度出發(fā),把數(shù)據(jù)庫的存取、數(shù)據(jù)的轉(zhuǎn)換和數(shù)據(jù)表示有效分離開來,形成了良好的三層服務(wù)器體系機(jī)構(gòu),同時(shí)利用XML文檔的平臺(tái)獨(dú)立性,使網(wǎng)絡(luò)應(yīng)用更易于維護(hù)和擴(kuò)展。
參考文獻(xiàn):
[1] 顧兵. XML實(shí)用技術(shù)教程[M].清華大學(xué)出版社,2007.
[2] 吳潔. XML應(yīng)用教程[M].清華大學(xué)出版社,2007.
[3] 鄧子云,燕鋒. JSP網(wǎng)絡(luò)編程從基礎(chǔ)到實(shí)踐(第二版)[M].2007.