潘海蘭
(上海第二工業(yè)大學(xué)計(jì)算機(jī)與信息學(xué)院,上海 201209)
可擴(kuò)展標(biāo)記語(yǔ)言 (eXtensible Markup Language,XML)的出現(xiàn),提高了數(shù)據(jù)描述能力和數(shù)據(jù)交換能力。它不僅可以自定義數(shù)據(jù)類型,還可以定義表示數(shù)據(jù)的方法。與超文本標(biāo)記語(yǔ)言(HyperText Mark-up Language,HTML)相比,XML是面向內(nèi)容的。它以一種開(kāi)放、自我描述的方式定義數(shù)據(jù)結(jié)構(gòu),簡(jiǎn)單而易于掌握。MVC(Model-View-Controller)設(shè)計(jì)模式的實(shí)質(zhì)是將數(shù)據(jù)與其表現(xiàn)形式分離開(kāi)來(lái),減少各層次之間的耦合。運(yùn)用這種模式,可以減少開(kāi)發(fā)時(shí)間,很好地實(shí)現(xiàn)多用戶系統(tǒng)中控制邏輯與表現(xiàn)邏輯的分離,從而提高平臺(tái)的可擴(kuò)展性和可重用性。
本文所論述的XML課程設(shè)計(jì)正是鍛煉學(xué)生使用MVC開(kāi)發(fā)模式實(shí)現(xiàn)WEB應(yīng)用程序,并掌握對(duì)XML數(shù)據(jù)的 CRUD(Create(創(chuàng)建)、Read(讀取)、Update(更新)和 Delete(刪除))操作。課程設(shè)計(jì)是目前大多數(shù)理工科院校本科課程中很重要的一個(gè)環(huán)節(jié),目的是讓學(xué)生鞏固在課堂中學(xué)到的知識(shí)點(diǎn),并結(jié)合已學(xué)相關(guān)課程綜合運(yùn)用這些知識(shí),所以如何設(shè)計(jì)課程設(shè)計(jì)的內(nèi)容,對(duì)于學(xué)生掌握這門課程是至關(guān)重要的。下面主要介紹XML課程的知識(shí)點(diǎn)及其課程設(shè)計(jì)的內(nèi)容和考核方式。
上海第二工業(yè)大學(xué)電子商務(wù)專業(yè)開(kāi)設(shè)《XML及其應(yīng)用》課程已有多年。本課程是計(jì)算機(jī)類專業(yè)的一門專業(yè)選修課程。通過(guò)學(xué)習(xí),學(xué)生應(yīng)了解并掌握XML的編寫及它具體的、實(shí)際的運(yùn)用;同時(shí)深刻體會(huì)XML語(yǔ)言給網(wǎng)絡(luò)上信息共享所帶來(lái)的區(qū)別于HTML的優(yōu)越性,掌握XML和網(wǎng)頁(yè)技術(shù),特別是能將其與數(shù)據(jù)庫(kù)技術(shù)結(jié)合,靈活地進(jìn)行信息的描述、交換和顯示。以下具體介紹該課程的設(shè)置和知識(shí)點(diǎn)。
作為應(yīng)用型本科高校的一門課程,《XML及其應(yīng)用》課程的教學(xué)階段分為授課階段和課程設(shè)計(jì)階段。其中32學(xué)時(shí)的授課階段給學(xué)生介紹設(shè)計(jì)和使用XML文檔所必需的技術(shù),主要包括:根據(jù)給定的信息,編寫一個(gè)結(jié)構(gòu)良好的XML文檔;使用文檔類型定義DTD(Document Type Definition)和XML Schema去規(guī)范XML文檔的邏輯結(jié)構(gòu);掌握驗(yàn)證 XML有效性的方法;使用數(shù)據(jù)島將 XML文件嵌入到網(wǎng)頁(yè)文件中以提取XML數(shù)據(jù);使用可擴(kuò)展樣式表語(yǔ)言XSL(eXtensible Stylesheet Language)格式化提取和顯示XML文件;了解XPATH、XQUERY和XLINK等XML高級(jí)應(yīng)用;使用DOM和SAX解析器對(duì)XML文件數(shù)據(jù)進(jìn)行CRUD操作,以及將XML技術(shù)與數(shù)據(jù)庫(kù)技術(shù)和其他高級(jí)語(yǔ)言的混合編程等[1]。
隨著XML技術(shù)的發(fā)展, XML的新應(yīng)用知識(shí)和領(lǐng)域不斷出現(xiàn)。在大學(xué)本科低年級(jí)的專業(yè)選修課程中,我們注重對(duì)XML基礎(chǔ)知識(shí)點(diǎn)的講解,并把這些知識(shí)點(diǎn)結(jié)合到本課程的課程設(shè)計(jì)項(xiàng)目中,使得學(xué)生能對(duì)XML技術(shù)有系統(tǒng)全面的學(xué)習(xí)。當(dāng)然,我們會(huì)在學(xué)生后續(xù)的高年級(jí)課程中逐步引入目前常用的XML高級(jí)技術(shù)。
(1) DTD
DTD是為XML文檔提供正規(guī)語(yǔ)法的一組規(guī)則約束,是一種保證XML文檔格式正確的有效方法,可以通過(guò)比較XML文檔和DTD文件來(lái)看文檔是否符合規(guī)范,元素和標(biāo)簽使用是否正確。一個(gè)DTD文檔包含:元素的定義規(guī)則;元素間關(guān)系的定義規(guī)則;元素可使用的屬性、實(shí)體或符號(hào)規(guī)則。
(2) Schema
XML Schema如同DTD一樣是負(fù)責(zé)定義和描述XML文檔的結(jié)構(gòu)和內(nèi)容模式。但是XML Schema從多方面改善了DTD,具有自身的優(yōu)勢(shì),這包括:Schema基于XML,沒(méi)有專門的語(yǔ)法,可以像其他XML文件一樣解析和處理;Schema支持一系列的數(shù)據(jù)類型(int,float,Boolean,date等);提供可擴(kuò)充的數(shù)據(jù)模型;支持綜合命名空間并且支持屬性組。
(3) XSL
XML不像HTML,它不包含任何顯示格式的信息。XSL正是專門針對(duì)XML文檔而提出來(lái)的一種規(guī)則,能夠使XML文檔得到更加有效的表現(xiàn)。XSL語(yǔ)法規(guī)范可以把XML源樹(shù)轉(zhuǎn)換成HTML、XML或其他文檔。XSL包含三個(gè)部分:XSLT、XPATH和XSL FO(Fomatted Object)。XSLT是一種把XML轉(zhuǎn)換為HTML的語(yǔ)言;XPath是一種定義XML節(jié)點(diǎn)路徑的語(yǔ)言;XSL FO則是一種定義XML顯示格式化對(duì)象的語(yǔ)言。課程還簡(jiǎn)單介紹了XQUERY、XLINK和XPointer等XML高級(jí)語(yǔ)法。
(4) XML應(yīng)用編程
XML僅僅用來(lái)存放數(shù)據(jù),其他像XML數(shù)據(jù)讀寫、添加、刪除、修改、查詢和管理等工作,都需要用戶利用XML編程接口開(kāi)發(fā)相應(yīng)的應(yīng)用程序來(lái)完成。XML編程接口指的是應(yīng)用程序操作XML文檔或XML數(shù)據(jù)所使用的API函數(shù)的集合,目前最重要最基本的接口有DOM和SAX。DOM對(duì)XML文檔結(jié)構(gòu)樹(shù)中的節(jié)點(diǎn)對(duì)象進(jìn)行訪問(wèn)和操作,在很大程度上保證了各平臺(tái)之間的互操作性。SAX接口基于事件驅(qū)動(dòng)模型,以順序方式訪問(wèn)XML文檔,具有良好的兼容性。
(5) 數(shù)據(jù)島
XML數(shù)據(jù)島是指存在于HTML頁(yè)面中的XML數(shù)據(jù),既是一種數(shù)據(jù)顯示技術(shù),也是一種數(shù)據(jù)傳遞技術(shù)。采用數(shù)據(jù)島作為交互手段,不僅可以使數(shù)據(jù)具備一定的語(yǔ)義信息,同時(shí)還能保持HTML原有的一些特色。另外,XML數(shù)據(jù)島還可以減少數(shù)據(jù)庫(kù)的壓力,主要是使查詢數(shù)據(jù)庫(kù)的用戶不再需要頻繁地訪問(wèn)服務(wù)器端的數(shù)據(jù)庫(kù),而是訪問(wèn)客戶端的XML文檔,既提高了查詢速度,也減輕了服務(wù)器端的負(fù)擔(dān)。
在授課階段之后的學(xué)期末安排了三周課程設(shè)計(jì)階段來(lái)運(yùn)用和鞏固授課階段講解的知識(shí)。在開(kāi)設(shè)XML及其應(yīng)用課程之前,整個(gè)專業(yè)的學(xué)生前期課程有JAVA程序設(shè)計(jì)基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)(JAVA)、數(shù)據(jù)庫(kù)技術(shù)與應(yīng)用、網(wǎng)頁(yè)設(shè)計(jì)基礎(chǔ)和JAVA高級(jí)程序設(shè)計(jì),因此XML課程設(shè)計(jì)可以在這些基礎(chǔ)上要求學(xué)生完成一個(gè)相對(duì)完整的WEB應(yīng)用。
這個(gè)小型的WEB應(yīng)用主題由小組成員商定,要求完成整個(gè)項(xiàng)目的需求設(shè)計(jì)、業(yè)務(wù)流程設(shè)計(jì)、數(shù)據(jù)庫(kù)設(shè)計(jì)、系統(tǒng)實(shí)現(xiàn)和系統(tǒng)測(cè)試的全過(guò)程,使學(xué)生掌握項(xiàng)目開(kāi)發(fā)的基本步驟和技能,并掌握單元和功能測(cè)試方法,從中考核學(xué)生的動(dòng)手能力。項(xiàng)目中數(shù)據(jù)庫(kù)設(shè)計(jì)要求使用 XML格式存儲(chǔ)數(shù)據(jù),并分別使用 DTD和 Schema來(lái)進(jìn)行數(shù)據(jù)定義,使用JDOM來(lái)解析XML文檔數(shù)據(jù),要求至少實(shí)現(xiàn)XML數(shù)據(jù)的CRUD操作,同時(shí)要求在項(xiàng)目中至少使用XSL、XPATH或XQUERY中的兩種技術(shù)。當(dāng)然由于JDOM的使用在上課階段沒(méi)有介紹,課程設(shè)計(jì)的教師會(huì)用2個(gè)課時(shí)帶學(xué)生入門,并提供詳細(xì)的參考文檔。
如何把這些要求很好地結(jié)合到課程設(shè)計(jì)的項(xiàng)目中是很多學(xué)生的疑問(wèn)。下面我們?cè)?MVC設(shè)計(jì)模式的基礎(chǔ)上對(duì)XML技術(shù)的應(yīng)用做一個(gè)解答。
目前眾多 Web開(kāi)發(fā)框架都基于 MVC模式進(jìn)行設(shè)計(jì)。MVC的主要關(guān)系是由 Observer,Composite和Strategy三個(gè)設(shè)計(jì)模式給出的。它把應(yīng)用程序分成三個(gè)核心模塊:視圖(View)、模型(Model)和控制器(Controller)。三個(gè)核心模塊分別負(fù)責(zé)不同的任務(wù),從而強(qiáng)制性地分開(kāi)應(yīng)用程序的輸入、處理和輸出。圖1顯示了這三個(gè)核心模塊的關(guān)系和功能。
圖1 MVC 設(shè)計(jì)模式Fig.1 MVC Design Pattern
從圖1[2]中我們可以總結(jié)出MVC模式的處理過(guò)程:控制器接收用戶請(qǐng)求,并決定處理請(qǐng)求的相應(yīng)處理模型,在模型中通過(guò)業(yè)務(wù)邏輯調(diào)用來(lái)生成返回?cái)?shù)據(jù),然后仍然通過(guò)控制器來(lái)選擇視圖格式化模型返回的數(shù)據(jù),并通過(guò)表示層呈現(xiàn)給用戶。
現(xiàn)在我們來(lái)解答在MVC模式下的XML技術(shù)應(yīng)用。與傳統(tǒng)的MVC實(shí)現(xiàn)不同,XML可以貫穿視圖、模型和控制器三個(gè)層次,并有效地銜接各層之間的數(shù)據(jù)交互。圖2[3]顯示XML技術(shù)在每個(gè)層次的不同應(yīng)用。
圖2 WEB應(yīng)用結(jié)構(gòu)圖Fig.2 The Chart of Web Application
(1) 視圖部分
視圖是用戶交互界面,可以接受用戶輸入數(shù)據(jù)和請(qǐng)求傳遞給控制器,并獲取來(lái)自模型處理后的數(shù)據(jù)顯示給用戶,但不包括在視圖上的業(yè)務(wù)流程的處理。課程設(shè)計(jì)項(xiàng)目中視圖層可以用 XML+XSL來(lái)實(shí)現(xiàn)數(shù)據(jù)的篩選、查詢和排序等操作,實(shí)現(xiàn)數(shù)據(jù)顯示的多元化,同時(shí)也減少對(duì)用戶瀏覽平臺(tái)的限制,可以提高頁(yè)面的靈活性。
(2) 模型部分
MVC最主要的核心是業(yè)務(wù)模型部分,它封裝了業(yè)務(wù)處理中的數(shù)據(jù)和規(guī)則,并控制著對(duì)數(shù)據(jù)的瀏覽和更新。模型層的業(yè)務(wù)流程處理過(guò)程對(duì)其它層來(lái)說(shuō)是不可見(jiàn)操作。模型接受視圖請(qǐng)求的數(shù)據(jù),并返回最終的處理結(jié)果,這樣有利于模型的重構(gòu)和提高重用性。課程設(shè)計(jì)項(xiàng)目中,模型層主要采用 Javabean組件,分為實(shí)體Beans和Action Beans兩部分,分別負(fù)責(zé)數(shù)據(jù)處理和業(yè)務(wù)處理,并結(jié)合DOM來(lái)解析XML文檔。對(duì)于數(shù)據(jù)存儲(chǔ),可以直接采用XML作為載體,讓用戶可以根據(jù)自己的需求定制XML文檔,對(duì)應(yīng)應(yīng)用程序的實(shí)體,或通過(guò)XML映射關(guān)系型數(shù)據(jù)表,實(shí)現(xiàn)實(shí)體類的轉(zhuǎn)換。如果使用XML作為直接數(shù)據(jù)存儲(chǔ),則需要通過(guò)Dom或Sax對(duì)XML數(shù)據(jù)進(jìn)行解析訪問(wèn),結(jié)合XPath和XQuery技術(shù)來(lái)更好地拓展XML技術(shù)在MVC中的應(yīng)用。
(3) 控制器部分
在基于MVC的項(xiàng)目中,模型和視圖二者是多對(duì)多的關(guān)系,它們之間的關(guān)聯(lián)要通過(guò)控制器來(lái)匹配,從而共同完成一個(gè)請(qǐng)求過(guò)程。也就是可以把控制層看成一個(gè)分發(fā)器,支配視圖的選擇和模型的處理,但它并不做任何的數(shù)據(jù)處理[4]。課程設(shè)計(jì)項(xiàng)目中的控制層,可以使用Servlet作為控制器,并結(jié)合XML技術(shù)實(shí)現(xiàn)邏輯處理的封裝。
在《XML及其應(yīng)用》的課程設(shè)計(jì)階段,學(xué)生按4~6人組成一個(gè)小組,各自進(jìn)行分工,培養(yǎng)團(tuán)隊(duì)合作能力。課程設(shè)計(jì)階段實(shí)施主要關(guān)注以下四個(gè)主要環(huán)節(jié)。
(1) 明確任務(wù)、制定計(jì)劃
每個(gè)小組在明確課程設(shè)計(jì)任務(wù)后,選定項(xiàng)目主題,明確本小組課程設(shè)計(jì)的內(nèi)容和目標(biāo),并上報(bào)指導(dǎo)老師。項(xiàng)目小組成員共同商議決定如何有序地完成整個(gè)項(xiàng)目開(kāi)發(fā)的計(jì)劃,包括收集資料、需求分析、數(shù)據(jù)庫(kù)設(shè)計(jì)、系統(tǒng)設(shè)計(jì)、編碼、系統(tǒng)測(cè)試和文檔整理等工作[4-5],最后選出項(xiàng)目組長(zhǎng)負(fù)責(zé)協(xié)調(diào)小組每個(gè)成員的工作,確保項(xiàng)目順利完成。
(2) 文檔和編碼過(guò)程
課程設(shè)計(jì)安排在學(xué)期末三周集中的時(shí)間,全程在學(xué)校電子商務(wù)實(shí)驗(yàn)室完成。這是課程設(shè)計(jì)的最重要階段,要求學(xué)生實(shí)現(xiàn)項(xiàng)目編碼,并進(jìn)行代碼測(cè)試,同時(shí)完成相關(guān)文檔編寫。在此期間每個(gè)班級(jí)由一名指導(dǎo)老師全程進(jìn)行答疑輔導(dǎo),要求學(xué)生做好日志記載。組長(zhǎng)負(fù)責(zé)將每位組員完成的情況和項(xiàng)目進(jìn)度做真實(shí)的記錄,以此作為教師打分的一個(gè)依據(jù)。整個(gè)過(guò)程采用小組方式進(jìn)行開(kāi)發(fā),加強(qiáng)學(xué)生的團(tuán)隊(duì)合作精神,更重要的是讓學(xué)生學(xué)會(huì)分析問(wèn)題與解決問(wèn)題的方法。
(3) 測(cè)試和答辯環(huán)節(jié)
學(xué)生在作品的完善過(guò)程中要求不斷測(cè)試BUG,并及時(shí)修正。最后由指導(dǎo)老師對(duì)每個(gè)小組開(kāi)發(fā)的項(xiàng)目進(jìn)行了驗(yàn)收。驗(yàn)收不僅看項(xiàng)目運(yùn)行情況,還要求學(xué)生對(duì)完成的項(xiàng)目進(jìn)行答辯,這樣改變了以往只看結(jié)果的評(píng)分方式。在以往考核方式下,教師往往忽略了設(shè)計(jì)過(guò)程,對(duì)學(xué)生的主觀印象分所占的比重較大,給出的成績(jī)有失客觀性,不利于調(diào)動(dòng)學(xué)生的積極性。
評(píng)分標(biāo)準(zhǔn)先給設(shè)計(jì)團(tuán)隊(duì),也就是教師從設(shè)計(jì)方案的正確性和合理性、設(shè)計(jì)說(shuō)明書文檔的完整性和團(tuán)隊(duì)協(xié)作能力,以及學(xué)生答辯時(shí)的狀態(tài)等方面評(píng)定出團(tuán)隊(duì)成績(jī);然后再根據(jù)組內(nèi)每個(gè)成員的完成情況,進(jìn)一步給出每個(gè)成員的成績(jī)。團(tuán)隊(duì)的整體設(shè)計(jì)成績(jī)直接與組內(nèi)每個(gè)成員的設(shè)計(jì)成績(jī)相關(guān)聯(lián),團(tuán)隊(duì)的整體成績(jī)將是團(tuán)隊(duì)中成員的最高分?jǐn)?shù),這樣團(tuán)隊(duì)每個(gè)成員都會(huì)為團(tuán)隊(duì)的成績(jī)盡自己的一份力量,使團(tuán)隊(duì)成績(jī)更好。答辯形式采取按團(tuán)隊(duì)進(jìn)行答辯的方式,每組推選一名學(xué)生用一刻鐘的時(shí)間陳述全組課程設(shè)計(jì)情況,然后組員共同回答指導(dǎo)老師和另一名參加答辯教師提出的問(wèn)題。當(dāng)然,在團(tuán)隊(duì)成員中,如果存在渾水摸魚或抄襲他人設(shè)計(jì)完成設(shè)計(jì)任務(wù)者,則設(shè)計(jì)成績(jī)按不及格論處[6]。
(4) 課程設(shè)計(jì)總結(jié)
每次課程設(shè)計(jì)結(jié)束時(shí),相關(guān)教師必須進(jìn)行經(jīng)驗(yàn)總結(jié),提出授課過(guò)程中的問(wèn)題及需要改進(jìn)的意見(jiàn),為下次課程設(shè)計(jì)的準(zhǔn)備提供參考。
目前在校電子商務(wù)系學(xué)生的 XML應(yīng)用課程設(shè)計(jì)中采用了以上說(shuō)明過(guò)程。學(xué)生通過(guò)這種形式的學(xué)習(xí),大大提高了對(duì)XML技術(shù)的掌握程度,并能融會(huì)貫通理論課所學(xué)的知識(shí)點(diǎn)來(lái)完成整個(gè)項(xiàng)目,收效良好。
應(yīng)用型本科高校對(duì)于 XML技術(shù)的教學(xué)越來(lái)越受到重視,這從近幾年不斷更新的教材就可以看出。而一門技術(shù)的掌握需要不斷地應(yīng)用它。利用課程設(shè)計(jì)的手段來(lái)加深學(xué)生的理解,加強(qiáng)學(xué)生的實(shí)踐是一種十分有效的方法。幾年來(lái),我校計(jì)算機(jī)與信息學(xué)院在教學(xué)中逐步提高實(shí)踐環(huán)節(jié),不斷改進(jìn)課程設(shè)計(jì)的教學(xué)方法。從學(xué)生的反饋來(lái)看,課程設(shè)計(jì)不僅能鞏固學(xué)生的專業(yè)理論知識(shí),提高實(shí)踐能力,更能提高學(xué)生項(xiàng)目開(kāi)發(fā)技能和軟件設(shè)計(jì)水平,并使學(xué)生掌握項(xiàng)目測(cè)試和項(xiàng)目文檔編寫技術(shù),培養(yǎng)學(xué)生團(tuán)隊(duì)協(xié)作能力與應(yīng)變能力,適合于應(yīng)用型本科院校的教學(xué)。
[1]牛紀(jì)楨, 陸 坤, 宋 丹.以XML擴(kuò)充的MVC設(shè)計(jì)模式[J].計(jì)算機(jī)工程與設(shè)計(jì).2005, 26(12):3372-3374.
[2]盧菊平, 郭江杰.精通JSP+XML+CSS網(wǎng)絡(luò)開(kāi)發(fā)混合編程[M].北京:電子工業(yè)出版社, 2006.
[3]劉愛(ài)琴, 葛君偉.基于XML模型的支持多終端的MVC模式實(shí)現(xiàn)方式 [J].計(jì)算機(jī)應(yīng)用與軟件, 2005, 22(7):51-53.
[4]迪·芬克.大學(xué)課程設(shè)計(jì)自學(xué)指南:如何設(shè)計(jì)課程以促進(jìn)意義深遠(yuǎn)的學(xué)習(xí)[J].李康譯.復(fù)旦教育論壇, 2008, 1(2):23-26.
[5]羅伯特·M·戴爾蒙德.課程與課程體系的設(shè)計(jì)和評(píng)價(jià)實(shí)用指南[M].杭州:浙江大學(xué)出版社,2006.
[6]肖鵬.大學(xué)課程設(shè)計(jì)的快速整合方法模型[J].現(xiàn)代教育管理, 2009, 5:56-58.