代永平
(武漢大學(xué) 計(jì)算機(jī)學(xué)院,湖北 武漢 430072)
用HTAs編寫Moodle試題導(dǎo)入文件生成工具
代永平
(武漢大學(xué) 計(jì)算機(jī)學(xué)院,湖北 武漢 430072)
Moodle是目前應(yīng)用廣泛的開(kāi)源網(wǎng)絡(luò)教學(xué)平臺(tái),提供了試題導(dǎo)入功能,但要求文件符合一定格式規(guī)范。本文通過(guò)編寫HTAs,解決試題編寫、生成試題導(dǎo)入文件的問(wèn)題。
Moodle;HTAs;DHTML
Moodle(Modular Object-Oriented Dynamic Learning Environment),即:模塊化面向?qū)ο蟮膭?dòng)態(tài)學(xué)習(xí)環(huán)境,是一套基于社會(huì)建構(gòu)主義理論設(shè)計(jì)開(kāi)發(fā)的開(kāi)放源代碼的網(wǎng)絡(luò)教學(xué)平臺(tái),體現(xiàn)了以學(xué)生為中心的創(chuàng)新教育理念。目前全球已有54793個(gè)注冊(cè)的Moodle站點(diǎn),超過(guò)200萬(wàn)注冊(cè)用戶通過(guò)這一系統(tǒng)進(jìn)行學(xué)習(xí)。在中國(guó)Moodle同樣得到了廣泛普及。
Moodle系統(tǒng)功能強(qiáng)大,涉及教學(xué)環(huán)節(jié)的諸多方面,下面僅就涉及考試(測(cè)驗(yàn))試題題庫(kù)方面遇到的輸入問(wèn)題提出一種解決方案。
Moodle提供了在線試題輸入功能,通過(guò)在Web頁(yè)面直接編輯題目,提交至服務(wù)器。該方式存在一些不便之處。從輸入過(guò)程看,每編輯一道題需要先選擇題型,然后在試題輸入頁(yè)面進(jìn)行詳細(xì)的設(shè)置并輸入,包括題目分?jǐn)?shù)、各答案選項(xiàng)的反饋信息、整體反饋信息等,完成后需要提交保存方可編輯下一道題目,使得這一過(guò)程繁瑣而低效。從習(xí)慣差異看,Moodle沒(méi)有單項(xiàng)選擇和多項(xiàng)選擇之分,其填空題型等同于簡(jiǎn)答題,而完型題等同于我們的填空題,這在理解上帶來(lái)了不便。
Moodle同樣提供了導(dǎo)入導(dǎo)出試題文件的功能,通過(guò)導(dǎo)入,批量輸入多道題目,這可以解決在線編輯的低效問(wèn)題。從這一角度切入,可以編寫離線試題文件生成工具,并且從界面上提供符合國(guó)人習(xí)慣的試題編輯方式,最終通過(guò)它生成符合標(biāo)準(zhǔn)的試題文件導(dǎo)入Moodle。
Moodle對(duì)試題文件的格式做了規(guī)定,并支持多種類型的試題文件。比較常用的有 GIFT、Moodle XML、MissingWord、Aiken等,其中Moodle XML格式是Moodle專有的試題導(dǎo)出導(dǎo)入格式。通過(guò)對(duì)比研究,該格式適應(yīng)多種題型,最適合試題導(dǎo)入。Moodle XML格式遵循W3C的XML1.0規(guī)范,它的一般格式是:
通過(guò)研究該格式,弄清各個(gè)節(jié)點(diǎn)的含義,下一步即考慮采用何種技術(shù)開(kāi)發(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ī)率較高。另外,仍然存在題型理解差異問(wèn)題,使用起來(lái)還是不便。因此有必要編寫符合國(guó)人習(xí)慣的應(yīng)用程序。
Moodle的試題最終以網(wǎng)頁(yè)的形式呈現(xiàn),如果以編輯網(wǎng)頁(yè)的形式輸入試題,則可以實(shí)現(xiàn)編寫時(shí)的題目?jī)?nèi)容、格式與將來(lái)呈現(xiàn)出來(lái)的題目保持一致。本文開(kāi)發(fā)的Moodle試題導(dǎo)入文件生成工具實(shí)質(zhì)上是一個(gè)特殊的HTML編輯器,我們可以把多道題目以文本或HTML的形式直接輸入頁(yè)面,使其成為頁(yè)面的某個(gè)元素或者某個(gè)元素的值,利用腳本從HtmlDocument對(duì)象可以獲取該元素對(duì)象,從而得到題目本身的內(nèi)容。
Microsoft提供了HTML應(yīng)用程序 (HTAs)的示例程序:Microsoft HTML Editor,直接利用DHTML的支持就能實(shí)現(xiàn)Web編輯。該示例為Moodle試題導(dǎo)入文件生成工具的編寫提供了思路和支持。
當(dāng)用戶編輯完題目后,利用XML DOM對(duì)象,即可生成題目對(duì)應(yīng)的Moodle XML的節(jié)點(diǎn)。所有節(jié)點(diǎn)生成后,就可以生成Moodle XML類型的試題文件。
1.HTML頁(yè)面元素與XML節(jié)點(diǎn)的對(duì)應(yīng)是實(shí)現(xiàn)目標(biāo)的關(guān)鍵
用戶在頁(yè)面上編輯的內(nèi)容最終要成為XML節(jié)點(diǎn)的數(shù)據(jù),因此首先要解決編輯內(nèi)容與XML節(jié)點(diǎn)的對(duì)應(yīng)。本文使用帶有name屬性的HTML容器元素<div>實(shí)現(xiàn)這種對(duì)應(yīng)。
以選擇題為例:當(dāng)用戶輸入題目后,該題目題干內(nèi)容最終成為questiontext/text節(jié)點(diǎn)的值??梢栽陧?yè)面上生成<divname=questiontext></div>元素,并設(shè)置containtEditable屬性為true,使用戶可以編輯該元素的內(nèi)容。最后利用div對(duì)象的innerHTML或innerTEXT屬性獲取題目?jī)?nèi)容,然后賦予questiontext/text節(jié)點(diǎn)值。同理,對(duì)于選項(xiàng)部分(常見(jiàn)的為4個(gè)選項(xiàng)),可以在頁(yè)面上生成4個(gè)<div name=answer></div>元素,實(shí)現(xiàn)各答案選項(xiàng)與 answer/text節(jié)點(diǎn)的對(duì)應(yīng),如圖1所示。
對(duì)于其他必要的節(jié)點(diǎn),如<defaultgrade>、<name>等亦可考慮使用<div>或者根據(jù)編程需要采用其他元素。
2.Moodle試題導(dǎo)入文件生成工具的框架
編寫該工具實(shí)際上就是編寫一個(gè)包含腳本的HTML文件,以.hta為擴(kuò)展名,從而成為HTAs??梢允褂靡延械腤eb編輯器編寫。其主要內(nèi)容如下:
以上元素中,<div id="oEditArea">從界面上提供一個(gè)編輯區(qū),多個(gè)<input type=button>元素提供用戶交互,比如“添加題目”按鈕調(diào)用AddQuestion()腳本函數(shù)在編輯區(qū)添加表示一道題目的各個(gè)頁(yè)面元素。
3.頁(yè)面元素的布局
解決了HTML元素與XML節(jié)點(diǎn)對(duì)應(yīng)的問(wèn)題以及界面上如何操作來(lái)添加這些HTML元素后,必須考慮這些頁(yè)面元素的布局,以便提供良好的用戶界面。本文采用了布局表格,以單項(xiàng)選擇題為例,采用如圖2所示的布局:
圖2 單選題布局
以上是一個(gè)2×2表格(以下稱為題目布局表),cell(1,1) 用來(lái)顯示小題號(hào),cell(1,2) 用來(lái)裝入<div name=questiontext></div>元素,cell (2,1) 用來(lái)為題目附加分?jǐn)?shù)值,而cell(2,2)則嵌入另一個(gè)布局表(以下稱為答案布局表),此處為4×2表格。每行的第2列裝入<div name=answer></div>元素,此表格可有更多的行表示更多選項(xiàng)。每行第1列用來(lái)裝入一個(gè)控件元素,比如對(duì)單選題,使用<INPUT type=radio>單選按鈕,所有按鈕具有相同的name屬性,使用戶在界面上能選擇正確選項(xiàng)。更為重要的是,Moodel XML要求提供客觀性題型(選擇題、判斷題等)的正確答案,并使用XML節(jié)點(diǎn)<answer>的fraction屬性值保存,以便系統(tǒng)評(píng)分。使用控件元素可以根據(jù)其checked屬性值,獲知題目正確答案項(xiàng)。
同樣的布局也適用于其他題型,判斷題實(shí)質(zhì)上是只有兩個(gè)選項(xiàng)的單選題,對(duì)應(yīng)答案布局表格只有兩行;問(wèn)答題和論述題這些主觀性題型則不需要嵌入答案布局表,改為用<INPUT type=text>控件滿足外觀要求。
對(duì)于填空題(對(duì)應(yīng)Moodle的Cloze題型),目前仍然在輸入時(shí)存在一定難度。按照Moodle的規(guī)定,空缺處的表示方法最簡(jiǎn)單的是格式字符串:“{分值:SHORTANSWER:=答案}”,并且該字符串以文本形式嵌入題干。該題型可以有兩種考慮,一種是在編輯題干部分時(shí),需要填空的位置用腳本添加文本框,導(dǎo)出時(shí)把該文本框替換為格式字符串,該方法在界面上比較美觀;另一種仍然保留答案布局表,用來(lái)保存填空處的答案,而編輯題干時(shí)在需要填空的位置用特殊符號(hào)占位,導(dǎo)出時(shí)把特殊符號(hào)替換為格式字符串。
至此,每一道題目都對(duì)應(yīng)頁(yè)面上一個(gè)題目布局表,該表賦予name=“tbQuestion”。然而要實(shí)現(xiàn)多種題型輸入,并且便于腳本處理,應(yīng)該把同類型題目歸類,因此頁(yè)面上使用容器<div>把同一題型的所有題目布局表裝入其中,并使用ID屬性區(qū)別不同題型。題型容器中可加入一些元素表示大題名稱,大題分?jǐn)?shù)等,使得界面更加美觀。典型的單選題示例如圖3。
<div id=sc>一、單選題:(n 小題,共 m 分)
圖3 單選題大題布局
4.生成頁(yè)面元素
DHTML提供了各種動(dòng)態(tài)生成頁(yè)面元素的技術(shù),例如:document對(duì)象的createElement方法,多種頁(yè)面元素的innerHTML屬性、insertAdjacentHTML方法等等,利用這些技術(shù)可以編寫腳本生成上面所述的布局表和其中的各種元素,并把它們加入頁(yè)面。為簡(jiǎn)化編程,可以利用現(xiàn)有的Web編輯器,預(yù)先編輯好不同題型對(duì)應(yīng)的布局內(nèi)容(模版),并各自保存為文件,需要時(shí)直接從文件中讀取這些HTML文本加入網(wǎng)頁(yè)。
比如對(duì)于單選題,可用singlechoice.htm文件保存布局模版,當(dāng)需要生成一道單選題時(shí),AddQuestion()腳本函數(shù)利用FileSystemObject對(duì)象讀取該文件,處理后加入題型容器<DIV id=sc></DIV>中:
5.XML節(jié)點(diǎn)的生成及Moodle XML文件的導(dǎo)出
當(dāng)用戶導(dǎo)出題目時(shí),要根據(jù)每道題生成相應(yīng)的XML節(jié)點(diǎn)樹(shù)。利用腳本可以生成XML document對(duì)象并生成根節(jié)點(diǎn)<quiz></quiz>:
var objXMLDoc=new ActiveXObject("Microsoft.XMLDOM");
objXMLDoc.loadXML("<quiz></quiz>");
使用該對(duì)象的createnode方法即可生成所需的節(jié)點(diǎn),并加入XML document對(duì)象,最終使用save方法保存為文件。
同樣為簡(jiǎn)化編程,參照布局模版文件的方式,把不同題型的節(jié)點(diǎn)樹(shù)以xml文件(模版)的形式存放,利用XML數(shù)據(jù)島(xml data island)嵌入網(wǎng)頁(yè)。
例如,單選題節(jié)點(diǎn)樹(shù)以singlechoice.xml保存,內(nèi)容如下:
網(wǎng)頁(yè)中以<xml id=quizTypeXML_sc src=singlechoice.xml></xml>元素嵌入,這樣在導(dǎo)出單選題時(shí),首先克隆該數(shù)據(jù)島的節(jié)點(diǎn)樹(shù),然后加入objXMLDoc,簡(jiǎn)化了編程。
當(dāng)最終導(dǎo)出Moodle XML文件時(shí),首先獲取頁(yè)面中所有的題目布局表(name=“tbQuestion”),然后依次對(duì)每一個(gè)布局表生成對(duì)應(yīng)題型的XML節(jié)點(diǎn)樹(shù),并根據(jù)該布局表中的元素與節(jié)點(diǎn)樹(shù)中的節(jié)點(diǎn)的對(duì)應(yīng)關(guān)系,依次修改節(jié)點(diǎn)值,最后利用XML document對(duì)象的save方法即可生成文件。
筆者通過(guò)編寫Moodle試題導(dǎo)入文件生成工具,較好地解決了在Moodle中輸入題目的問(wèn)題。界面友好,符合國(guó)人習(xí)慣,實(shí)現(xiàn)了WYSIWYG的編輯風(fēng)格,規(guī)范編輯降低出錯(cuò)的幾率,在Moodle教學(xué)中收到了良好的效果。
本工具不足之處在于,忽略了題目的一些細(xì)節(jié)內(nèi)容,比如對(duì)答題的總體反饋,對(duì)每個(gè)選項(xiàng)的反饋等,這些都可以根據(jù)要求加入,并在界面上提供設(shè)置,供不同用戶的需要。另外,由于采用HTAs實(shí)現(xiàn),只適用于Microsoft Windows和IE6以上系統(tǒng)。
[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 Language1.0.http://www.w3.org/TR/1998/REC-xml-19980210.
(編輯:隗爽)
TP311.5
A
1673-8454(2010)21-0085-04