摘 要:Moodle是目前應(yīng)用廣泛的開源網(wǎng)絡(luò)教學(xué)平臺,提供了試題導(dǎo)入功能,但要求文件符合一定格式規(guī)范。本文通過編寫HTAs,解決試題編寫、生成試題導(dǎo)入文件的問題。
關(guān)鍵詞:Moodle;HTAs;DHTML
中圖分類號:TP311.5文獻(xiàn)標(biāo)識碼:A 文章編號:1673-8454(2010)21-0085-04
一、引言
Moodle(Modular Object-Oriented Dynamic Learning Environment),即:模塊化面向?qū)ο蟮膭?dòng)態(tài)學(xué)習(xí)環(huán)境,是一套基于社會建構(gòu)主義理論設(shè)計(jì)開發(fā)的開放源代碼的網(wǎng)絡(luò)教學(xué)平臺,體現(xiàn)了以學(xué)生為中心的創(chuàng)新教育理念。目前全球已有54793個(gè)注冊的Moodle站點(diǎn),超過200萬注冊用戶通過這一系統(tǒng)進(jìn)行學(xué)習(xí)。在中國Moodle同樣得到了廣泛普及。
Moodle系統(tǒng)功能強(qiáng)大,涉及教學(xué)環(huán)節(jié)的諸多方面,下面僅就涉及考試(測驗(yàn))試題題庫方面遇到的輸入問題提出一種解決方案。
二、問題的提出與分析
Moodle提供了在線試題輸入功能,通過在Web頁面直接編輯題目,提交至服務(wù)器。該方式存在一些不便之處。從輸入過程看,每編輯一道題需要先選擇題型,然后在試題輸入頁面進(jìn)行詳細(xì)的設(shè)置并輸入,包括題目分?jǐn)?shù)、各答案選項(xiàng)的反饋信息、整體反饋信息等,完成后需要提交保存方可編輯下一道題目,使得這一過程繁瑣而低效。從習(xí)慣差異看,Moodle沒有單項(xiàng)選擇和多項(xiàng)選擇之分,其填空題型等同于簡答題,而完型題等同于我們的填空題,這在理解上帶來了不便。
Moodle同樣提供了導(dǎo)入導(dǎo)出試題文件的功能,通過導(dǎo)入,批量輸入多道題目,這可以解決在線編輯的低效問題。從這一角度切入,可以編寫離線試題文件生成工具,并且從界面上提供符合國人習(xí)慣的試題編輯方式,最終通過它生成符合標(biāo)準(zhǔn)的試題文件導(dǎo)入Moodle。
Moodle對試題文件的格式做了規(guī)定,并支持多種類型的試題文件。比較常用的有GIFT、Moodle XML、MissingWord、Aiken等,其中Moodle XML格式是Moodle專有的試題導(dǎo)出導(dǎo)入格式。通過對比研究,該格式適應(yīng)多種題型,最適合試題導(dǎo)入。Moodle XML格式遵循W3C的XML1.0規(guī)范,它的一般格式是:
……
…… //更多的answer節(jié)點(diǎn)
……
通過研究該格式,弄清各個(gè)節(jié)點(diǎn)的含義,下一步即考慮采用何種技術(shù)開發(fā)應(yīng)用程序。
Moodle官方網(wǎng)站(www.moodle.org)已經(jīng)提供了由Vyatcheslav Yatskovsky編寫的用于試題輸入的Word模板,利用Word提供試題輸入界面,以VBA代碼生成試題文件。該模板以MIT許可協(xié)議授權(quán)用戶使用,稍加漢化即能滿足批量試題輸入的要求。由于Word操作的靈活,使得編輯試題時(shí)出錯(cuò)改錯(cuò)的機(jī)率較高。另外,仍然存在題型理解差異問題,使用起來還是不便。因此有必要編寫符合國人習(xí)慣的應(yīng)用程序。
Moodle的試題最終以網(wǎng)頁的形式呈現(xiàn),如果以編輯網(wǎng)頁的形式輸入試題,則可以實(shí)現(xiàn)編寫時(shí)的題目內(nèi)容、格式與將來呈現(xiàn)出來的題目保持一致。本文開發(fā)的Moodle試題導(dǎo)入文件生成工具實(shí)質(zhì)上是一個(gè)特殊的HTML編輯器,我們可以把多道題目以文本或HTML的形式直接輸入頁面,使其成為頁面的某個(gè)元素或者某個(gè)元素的值,利用腳本從HtmlDocument對象可以獲取該元素對象,從而得到題目本身的內(nèi)容。
Microsoft提供了HTML應(yīng)用程序(HTAs)的示例程序:Microsoft HTML Editor,直接利用DHTML的支持就能實(shí)現(xiàn)Web編輯。該示例為Moodle試題導(dǎo)入文件生成工具的編寫提供了思路和支持。
當(dāng)用戶編輯完題目后,利用XML DOM對象,即可生成題目對應(yīng)的Moodle XML的節(jié)點(diǎn)。所有節(jié)點(diǎn)生成后,就可以生成Moodle XML類型的試題文件。
三、問題解決方案
1.HTML頁面元素與XML節(jié)點(diǎn)的對應(yīng)是實(shí)現(xiàn)目標(biāo)的關(guān)鍵
用戶在頁面上編輯的內(nèi)容最終要成為XML節(jié)點(diǎn)的數(shù)據(jù),因此首先要解決編輯內(nèi)容與XML節(jié)點(diǎn)的對應(yīng)。本文使用帶有name屬性的HTML容器元素
以選擇題為例:當(dāng)用戶輸入題目后,該題目題干內(nèi)容最終成為questiontext/text節(jié)點(diǎn)的值。可以在頁面上生成元素,并設(shè)置containtEditable屬性為true,使用戶可以編輯該元素的內(nèi)容。最后利用div對象的innerHTML或innerTEXT屬性獲取題目內(nèi)容,然后賦予questiontext/text節(jié)點(diǎn)值。同理,對于選項(xiàng)部分(常見的為4個(gè)選項(xiàng)),可以在頁面上生成4個(gè)元素,實(shí)現(xiàn)各答案選項(xiàng)與answer/text節(jié)點(diǎn)的對應(yīng),如圖1所示。
對于其他必要的節(jié)點(diǎn),如
2.Moodle試題導(dǎo)入文件生成工具的框架
編寫該工具實(shí)際上就是編寫一個(gè)包含腳本的HTML文件,以.hta為擴(kuò)展名,從而成為HTAs??梢允褂靡延械腤eb編輯器編寫。其主要內(nèi)容如下:
.EditArea {border-style:groove; border-width:2px; width: 100%; height:86%; overflow:auto; background-color:#FFFFFF}
……//內(nèi)聯(lián)CSS,提供各個(gè)頁面元素外觀布局設(shè)置
......
以上元素中,
3. 頁面元素的布局
解決了HTML元素與XML節(jié)點(diǎn)對應(yīng)的問題以及界面上如何操作來添加這些HTML元素后,必須考慮這些頁面元素的布局,以便提供良好的用戶界面。本文采用了布局表格,以單項(xiàng)選擇題為例,采用如圖2所示的布局:
以上是一個(gè)2×2表格(以下稱為題目布局表),cell(1,1)用來顯示小題號,cell(1,2)用來裝入元素,cell(2,1)用來為題目附加分?jǐn)?shù)值,而cell(2,2)則嵌入另一個(gè)布局表(以下稱為答案布局表),此處為4×2表格。每行的第2列裝入元素,此表格可有更多的行表示更多選項(xiàng)。每行第1列用來裝入一個(gè)控件元素,比如對單選題,使用單選按鈕,所有按鈕具有相同的name屬性,使用戶在界面上能選擇正確選項(xiàng)。更為重要的是,Moodel XML要求提供客觀性題型(選擇題、判斷題等)的正確答案,并使用XML節(jié)點(diǎn)
同樣的布局也適用于其他題型,判斷題實(shí)質(zhì)上是只有兩個(gè)選項(xiàng)的單選題,對應(yīng)答案布局表格只有兩行;問答題和論述題這些主觀性題型則不需要嵌入答案布局表,改為用控件滿足外觀要求。
對于填空題(對應(yīng)Moodle的Cloze題型),目前仍然在輸入時(shí)存在一定難度。按照Moodle的規(guī)定,空缺處的表示方法最簡單的是格式字符串:“{分值:SHORTANSWER:=答案}”,并且該字符串以文本形式嵌入題干。該題型可以有兩種考慮,一種是在編輯題干部分時(shí),需要填空的位置用腳本添加文本框,導(dǎo)出時(shí)把該文本框替換為格式字符串,該方法在界面上比較美觀;另一種仍然保留答案布局表,用來保存填空處的答案,而編輯題干時(shí)在需要填空的位置用特殊符號占位,導(dǎo)出時(shí)把特殊符號替換為格式字符串。
至此,每一道題目都對應(yīng)頁面上一個(gè)題目布局表,該表賦予name=“tbQuestion”。然而要實(shí)現(xiàn)多種題型輸入,并且便于腳本處理,應(yīng)該把同類型題目歸類,因此頁面上使用容器
4.生成頁面元素
DHTML提供了各種動(dòng)態(tài)生成頁面元素的技術(shù),例如:document對象的createElement方法,多種頁面元素的innerHTML屬性、insertAdjacentHTML方法等等,利用這些技術(shù)可以編寫腳本生成上面所述的布局表和其中的各種元素,并把它們加入頁面。為簡化編程,可以利用現(xiàn)有的Web編輯器,預(yù)先編輯好不同題型對應(yīng)的布局內(nèi)容(模版),并各自保存為文件,需要時(shí)直接從文件中讀取這些HTML文本加入網(wǎng)頁。
比如對于單選題,可用singlechoice.htm文件保存布局模版,當(dāng)需要生成一道單選題時(shí),AddQuestion()腳本函數(shù)利用FileSystemObject對象讀取該文件,處理后加入題型容器中:
fso = new ActiveXObject(\"Scripting.FileSystemObject\");
f = fso.OpenTextFile(\"singlechoice.htm\", 1);
cXTMdan=f.ReadAll();
f.Close();
...... // 模版處理
sc.insertAdjacentHTML(\"beforeEnd\",cXTMdan);
5. XML節(jié)點(diǎn)的生成及Moodle XML 文件的導(dǎo)出
當(dāng)用戶導(dǎo)出題目時(shí),要根據(jù)每道題生成相應(yīng)的XML節(jié)點(diǎn)樹。利用腳本可以生成XML document對象并生成根節(jié)點(diǎn):
var objXMLDoc=new ActiveXObject(\"Microsoft.XMLDOM\");
objXMLDoc.loadXML(\"\");
使用該對象的createnode方法即可生成所需的節(jié)點(diǎn),并加入XML document對象,最終使用save方法保存為文件。
同樣為簡化編程,參照布局模版文件的方式,把不同題型的節(jié)點(diǎn)樹以xml文件(模版)的形式存放,利用XML數(shù)據(jù)島(xml data island)嵌入網(wǎng)頁。
例如,單選題節(jié)點(diǎn)樹以singlechoice.xml保存,內(nèi)容如下:
……// 其他相關(guān)節(jié)點(diǎn)
網(wǎng)頁中以
oNodes=quizTypeXML_sc.XMLDocument.documentElement.cloneNode(true);
objXMLDoc.firstChild.appendChild(oNodes);
當(dāng)最終導(dǎo)出Moodle XML 文件時(shí),首先獲取頁面中所有的題目布局表(name=“tbQuestion”),然后依次對每一個(gè)布局表生成對應(yīng)題型的XML節(jié)點(diǎn)樹,并根據(jù)該布局表中的元素與節(jié)點(diǎn)樹中的節(jié)點(diǎn)的對應(yīng)關(guān)系,依次修改節(jié)點(diǎn)值,最后利用XML document對象的save方法即可生成文件。
oTbQuestions=oEditArea.all(“tbQuestion”);
nQuestions=oTbQuestions.length;
for(i=0;i ......//判斷題型、生成節(jié)點(diǎn)樹、編輯節(jié)點(diǎn)值 } objXMLDoc.save(<導(dǎo)出文件路徑>); 四、結(jié)束語 筆者通過編寫Moodle試題導(dǎo)入文件生成工具,較好地解決了在Moodle中輸入題目的問題。界面友好,符合國人習(xí)慣,實(shí)現(xiàn)了WYSIWYG的編輯風(fēng)格,規(guī)范編輯降低出錯(cuò)的幾率,在Moodle教學(xué)中收到了良好的效果。 本工具不足之處在于,忽略了題目的一些細(xì)節(jié)內(nèi)容,比如對答題的總體反饋,對每個(gè)選項(xiàng)的反饋等,這些都可以根據(jù)要求加入,并在界面上提供設(shè)置,供不同用戶的需要。另外,由于采用HTAs實(shí)現(xiàn),只適用于Microsoft Windows和IE6以上系統(tǒng)。 參考文獻(xiàn): [1]Moodle XML format.http://docs.moodle.org/en/Moodle_ XML. [2]HTML Applications.http://msdn.microsoft.com/en-us/library/ms536471(v=VS.85).aspx. [3]DHTML Reference.http://msdn.microsoft.com/en-us/library/ms533050(v=vs.85).aspx. [4]Extensible Markup Language 1.0.http://www.w3.org/TR/1998/REC-xml-19980210. (編輯:隗爽)