


摘要:試題庫建設是基于Moodle平臺建設網絡課程的重要工作之一,快速將現有Word格式試卷轉換為網絡課程的可用試題庫具有十分現實的意義。因此,使用阿里云服務器 ECS 與LAMP架構搭建開發環境,借助正則表達式及Eloquent ORM等技術,設計并實現了一個簡便易用的可分類型批量制作 Moodle 試題的Web應用。用戶使用瀏覽器,通過復制/粘貼、預覽、保存、下載等簡單步驟即能生成兼容Moodle XML格式的試題文件。該應用在轉換效率上較現有方案提升了一個數量級。
關鍵詞:試題庫;Moodle;Web應用;批量制作;EloquentORM;正則表達式
Design and Development of Web Application for Batch Production of Moodle Questions
SHEN Han?fei
(Suzhou Industrial Park Institute of Services Outsourcing, Suzhou 215123, China)
Abstract:The construction of test question bank is an important work in the construction of online courses based on Moodle platform. It is of great practical significance to quickly convert the existing Word format test paper into the test question bank for online courses. Therefore, by using Aliyun server ECS and LAMP architecture to build a development environment, a simple and easy Web application for batch production of Moodle test questions is designed and implemented with the help of regular expressions and Eloquent ORM. By using a browser, users can generate a Moodle XML?compatible question file through simple steps such as copy/paste, preview, save, download, etc. The conversion efficiency is about an order of magnitude faster than the existing solutions.
Key Words:question bank;Web application;Moodle;batch production;EloquentORM;regular expression
0?引言
Moodle是全球排名第一的開源課程與學習管理系統,它是由澳大利亞教師Martin Dougiamas基于建構主義教育理論與PHP/MySQL技術開發的免費開源軟件[1]。據Moodle官網統計, 截至2018年8月22日, 已有230個國家的99 642個站點取得了注冊資格,上面共有15 271 903門課程,用戶總數達到131 368 177人[2]。試題庫建設是基于Moodle平臺建設網絡課程的重要環節。采用試題庫系統進行組卷考試,能有效避免人工組卷過程中命題與評分的主觀隨意性,充分發揮課程考試的引導、評價、反饋和激勵作用,調動教學雙方積極性[3?4]。
Moodle支持的試題題型非常豐富,包括單選題、填空題、判斷題、多選題、完形填空、拖放填空、計算題、簡答題等,并支持以插件方式添加更多試題類型[5]。如何快速、高效地將已有大量Word格式試題轉換為適合在Moodle環境下使用的試題,是網絡課程建設面臨的一個重要問題。Moodle試題制作大體上可以分為兩類:①在線錄入;②通過各類工具生成Moodle XML格式文件,然后導入系統。Moodle默認的在線試題輸入方式是通過在Web頁面直接編輯題目,然后提交至服務器。輸入題目步驟為:首先選擇題型,然后輸入題干和答案,并進行詳細設置,包括題目分數、各答案選項反饋以及整體反饋等,最后提交保存。但該方式處理效率很低,適合小批量輸入題目或對已有題目進行修改與補充,而不適合大批量導入題目。Moodle官網提供了由Vyatcheslav Yatskovsky編寫的“Quiz authoring template for Microsoft Word”插件[6], 該插件將 Word 作為試題輸入界面,并由VBA 生成XML格式的試題文件。
由于Moodle平臺在國內應用廣泛,目前已有很多學者對Moodle試題的批量導入方法進行了深入研究。曹新社[7]提出在 Word 中使用表格制作 Moodle 試題,再轉換為XML格式;代永平[8]提出使用HTML 應用程序(HTAs)進行編寫,并利用 XML DOM 對象生成 XML 文件;李飛等[9]介紹了利用Excel強大的宏錄制與VBA編程功能, 在Excel工作表里批量建立試題, 然后轉換為XML文件。這些方式本質上是在新界面中逐題錄入已有試卷中的題目,然后導出為XML格式。盡管該方式較在線錄入方式效率有了很大提升,但仍存在自動化程度低、勞動強度高、環境使用受限等問題。
本文介紹一個簡便易用的分類型批量制作 Moodle 試題的Web應用,運行于阿里云ECS平臺。該應用基于LAMP架構,采用正則表達式與EloquentORM技術開發,用戶通過復制/粘貼、預覽、保存、下載等簡單步驟即能生成兼容Moodle XML格式的試題文件,在轉換效率上較現有方案提升了一個數量級。
1?應用設計思路、開發環境與關鍵技術
1.1?設計思路
結合長期Moodle試題制作實踐,分析了現有大量真實試卷結構,并借鑒龔春亞等[10]提出的將整卷試題一次性批量導入數據庫的思想, 開發一個簡便易用的可分類型批量制作 Moodle 試題的Web應用。該應用設計目標是能將現有試卷的客觀題部分快速轉換為Moodle XML格式后再導入系統。用戶在現有試卷基礎上通過幾個簡單步驟(復制/粘貼、預覽、保存和轉換)即能完成格式轉換。
應用采用B/S架構,操作簡單,維護和升級也十分方便[11],而且具有分布式特點,可以隨時隨地處理業務[12]。在應用處理目標上,首先選擇各類考試中應用最為廣泛的單選題、多選題、判斷題和填空題,其它類型題目如英語考試中的完形填空、匹配題等作為下一步開發目標,從而簡化應用實現邏輯,實現快速開發。
1.2?開發環境
在綜合考慮國內公有云服務的安全性、價格、運維能力和可伸縮性后,平臺選擇了阿里云的ECS(Elastic Compute Service)服務,該服務能自動調整其彈性計算資源,有助于提升運維效率并降低成本,使開發者只需專注于自身核心業務[13]。在軟件配置上,采用免費開源軟件LAMP架構,這是一組用來搭建動態網站服務器的開源軟件組合[14],操作系統為Ununbu 16.04,Web服務器為Apache 2.4,腳本語言為PHP 7.0,數據庫服務器為MySQL 5.7。該架構技術已非常成熟,且部署簡單,運行與維護成本低。
1.3?關鍵技術
在開發過程中,采用的兩個關鍵技術是正則表達式和ORM工具Eloquent。Moodle系統支持多種題目格式,其中既可導入又可導出的題目格式只有兩種:Moodle XML和GIFT。相比而言,Moodle XML支持的題目信息更完整,適合用來與Moodle交換題目數據[15]。開發主要工作是將試題文本轉化為MoodleXML格式文件,開發過程中需要大量使用正則表達式進行文本處理。正則表達式是由美國數學家Stephen Kleene[16]于1956年提出的, 主要用于描述正則集代數。它是一串由特定意義字符組成的字符串, 表示某種匹配規則。正則表達式能夠應用于多種操作系統中,并支持幾乎所有程序設計語言[17]。正則表達式最基本的3種功能是匹配、替換和提取。
為了簡化數據庫操作,在開發中采用來自Laravel框架[18]的Eloquent ORM。Laravel框架是目前應用最為廣泛的PHP框架,其遵循Model-View-Controller(MVC)架構模式,提倡模型、視圖與控制器的分離[19]。由于本文架構并不復雜,所以只采用其內置的Eloquent ORM 。ORM是關系型數據庫和對象之間產生的自動映射,因此在具體數據庫操作中不需要與繁瑣的SQL語句打交道。軟件開發人員只需關注業務邏輯中的對象架構即可,而不底層重復性的SQL語句。據統計,采用ORM可將軟件開發時間與成本減少40%,并且由于其將業務層與實際數據存儲分離,簡化了代碼優化與調試[20]。Eloquent ORM 提供了簡潔的ActiveRecord 實現方式,每張數據表對應一個與該表進行交互的模型,從而簡化了數據查詢、插入、更新、刪除等常用操作[21]。
2?用戶界面及使用
用戶界面由前綴、題目類型、題干、答案等組成。由于是批量制作試題,同一批試題標題由用戶統一指定前綴。如圖1所示的試題來自江蘇省2015年普通高校專轉本選拔考試《計算機基礎》科目,標題前綴為ZZB-2015,表示2015年的專轉本(ZZB)題目,前綴結合每道題序號即生成最終標題,如第21題的最終標題為ZZB-2015-021。標題在整個試題庫中最好能夠保證其唯一性,從而在試題需要配圖的情況下,可由工具將圖片自動插入題目中。
應用在使用時,每次轉換的試題要求是同一類型,從而有助于簡化程序的邏輯判斷設計,增強程序健壯性。在保存題目之前,用戶可使用“預覽”查看題目解析效果,如圖2所示。
由于試題的復雜性及試題來源本身可能存在錯誤,程序解析出的結果可能不符合用戶預期,采用“預覽”功能有助于幫助用戶識別并改正錯誤。用戶確認無誤后,再點擊“保存”按鈕將題目保存到數據庫中。在將多個批次題目全部保存完畢后,用戶可以點擊“下載”獲取所有題目。
3?應用詳細設計
3.1?處理流程
Web應用處理流程分為兩個階段:①試題保存到數據庫;②從數據庫中提取試題,經格式化轉換后導出為XML文件。
第1階段具體流程如圖3所示。
切分輸入即將輸入的題干、答案等根據題號特征進行切分,然后將每題的題干和答案合并為單個題目;類型判斷是指根據用戶輸入判斷題型類別;效果預覽是指將試題解析后的結果輸出為網頁,由用戶確認是否與預期一致。如果符合要求,則保存到數據庫,否則由用戶調整文本輸入。用戶可以輸入多個批次的題目,每次輸入題目類型必須相同。
第2階段具體流程如圖4所示。
當用戶完成所有題目的輸入后,可以點擊“導出”按鈕請求下載試題文件;提取試題是指從數據庫中提取該用戶多次輸入的所有題目;格式轉換是指根據題目類型,利用程序轉化為單題的XML格式;合并 XML是指將所有題目的XML內容合并后,再添加XML的頭部和尾部,形成完整文件供用戶下載。
3.2?數據庫設計與初始化
應用的數據庫設計相對簡單,包含數據表question,各個字段如表1所示。
其中字段名 choices僅用于保存單選題和多選題的各個選擇分支,保存格式選擇XML,在讀取時再解析XML為各個選項。對于填空題和判斷題,該字段為空。
在使用EloquentORM模型前,需要初始化配置,代碼如下:
require_once '/var/www/common-libs/Laravel/vendor/autoload.php';
use Illuminate\Container\Container;
use Illuminate\Database\Capsule\Manager as Capsule;
MYMcapsule = new Capsule;
MYMcapsule->addConnection(MYMdatabase); // 創建鏈接
MYMcapsule->setAsGlobal(); // 設置全局靜態可訪問
MYMcapsule->bootEloquent();?// 啟動Eloquent
use?Illuminate\Database\Eloquent\Model?as Eloquent;
class Question extends?Eloquent
{
protected MYMtable = ‘question';
public MYMtimestamps = false;
}
將這些配置單獨保存到數據庫配置文件 db.php 中,使用時引用該文件即能通過ORM進行數據庫操作。
3.3?主要模塊設計
在兩個階段的流程處理中,切分輸入、效果預覽、格式轉換、XML合并與XML導出是關鍵模塊,下面對這些模塊進行說明。
切分輸入包含兩部分:切分試題與切分答案。通常試卷題目都是以題目序號和標點符號(如點或頓號)為開頭,可使用正則表達式進行識別并采用 preg_split函數進行切分;答案切分則根據單選題、多選題、填空題、判斷題等類型分別進行處理。以單選題為例,首先將答案輸入一律轉換為大寫字母,然后使用正則表達式提取出其中字母。如圖5所示,無論對于哪一種輸入都能正確切分。切分完成后,再將相應題目和答案合并到一個PHP關聯數組。
效果預覽需要將題目的題干、答案和解析填充到相應題目類型的HTML模板后,再合并所有題目的HTML輸出,顯示在瀏覽器中供用戶查看。
格式轉換是指將題目的題干、答案和解析填充到單題題目類型的XML模板中。由于Moodle官網對題目類型格式的解釋很少,筆者采用的方式是從題庫中將各種類型題目導出為XML格式后,在此基礎上創建各類型題目的單題模板。圖6為一道判斷題的XML格式輸出。
合并XML是將同一批所有單題的XML輸出合并后,在頭部前添加<?xml version="1.0" encoding="UTF-8"?><quiz>,在尾部添加 </quiz>,從而形成一個完整符合Moodle XML規范的文件提供給用戶下載。
導出XML的要點是設置Web頁面的header為attachment,瀏覽器獲取內容后會提示用戶將其保存到磁盤,而不是在瀏覽器中顯示為HTML,關鍵代碼如下:
MYMfilename = "questions.xml";
header("Content-type: text/xml;charset=utf-8");
header('Content-Disposition: attachment;filename='.MYMfilename);
4?使用效果
為評估應用轉換效率,以江蘇省2015年普通高校專轉本選拔考試《計算機基礎》科目試卷為例進行轉換。試卷全部為客觀題,包括20道判斷題、50道單項選擇題、10道多項選擇題和20道填空題,共計100題。如果采用Moodle在線錄入方式制作試題,按照平均每道題2min計算,共需200min。采用本文應用后,分別按照判斷題、單選題、多選題和填空題分4次導入,并1次下載,除填空題答案需要略微調整外,其它操作都是直接從Word文件復制后粘貼到Web頁面。試題轉換可以在10min內完成,時間主要花費在預覽轉換過程中是否有異常狀況,從而使效率提升了約20倍。由于應用支持批量導入,每批題目數量越多,效率提升越顯著。
5?結語
Moodle平臺可支持多種類型試題,將現有試卷快速導入系統是課程信息化建設的關鍵環節。本文基于LAMP平臺,采用正則表達式與EloquentORM等技術開發了一個可分類型批量制作 Moodle 試題的Web應用。該應用運行于阿里云ECS服務器,且界面友好,操作簡單,主要包含切分輸入、效果預覽、格式轉換、XML合并、XML導出等功能。用戶使用瀏覽器,通過復制/粘貼、預覽、保存、下載等簡單步驟即能生成兼容Moodle XML格式的試題文件,在轉換效率上較現有方案提升了一個數量級。
參考文獻:
[1]?History?MoodleDocs. Moodle history [EB/OL]. https://docs.moodle.org/35/en/History.
[2]?Moodle Statistics.Moodle統計[EB/OL].https://moodle.org/stats/.
[3]?曾任仁,林宇洪,呂義勇.通用試題庫管理系統的設計與實現[J].福建農林大學學報:自然科學版,2008(3):324?328.
[4]?任愛華,武新利.題庫建設的目標及數學模型[J].山東師范大學學報:自然科學版,1998(4):82?86.
[5]?Question?MoodleDocs. Question types[EB/OL].http://docs.moodle.org/35/en/Questions.
[6]?YATSKOVSKY V. Quiz authoring template for Microsoft Word[EB/OL]. https://moodle.org/mod/data/view.php?d=13&rid=578.
[7]?曹新社.如何批量制作Moodle試題[J].電腦知識與技術,2011,7(35):9285?9286.
[8]?代永平.用HTAs編寫Moodle試題導入文件生成工具[J].中國教育信息化,2010(21):85?88.
[9]?李飛,廖捷.基于Moodle平臺網絡課程試題庫建設的研究[J].廣西廣播電視大學學報,2017,28(1):28?31.
[10]?龔春亞,張國華.基于C#的題庫批量錄入算法研究[J].電腦知識與技術,2010,6(27):7545?7547.
[11]?王心路,趙文耘,余春. C/S向B/S系統遷移的技術[J]. 計算機工程, 2004(3):71?73.
[12]?程英蕾,殷肖川,吳豐.從C/S模式轉向B/S模式[J].空軍工程大學學報:自然科學版,2000(2):48?51.
[13]?沈涵飛.基于云計算的高可用性英語學習平臺的構建[J].信息與電腦:理論版,2017(24):213?214,217.
[14]?沈莉.基于Moodle+LAMP技術構建網絡課程管理系統的實踐研究[J].軟件導刊,2011,10(12):211?213.
[15]?王耀,徐鸝.關于Moodle XML結構的題目及其離線編輯器設計[J].中國醫學教育技術,2013,27(5):523?526.
[16]?沙金.精通正則表達式[M].北京:人民郵電出版社, 2008.
[17]?瓦特.正則表達式入門經典[M].李松峰,譯.北京:清華大學出版社, 2008.
[18]?OTWELLT.Laravel[EB/OL].https://laravel.com.
[19]?李瑩,王甲民.一種基于Petri?Net的新型MVC模式及實現[J].計算機工程與應用,2007(17):202?205.
[20]?黃建.基于ThinkPHP框架的ActiveRecord技術應用與研究[J].現代計算機:專業版,2010(4):195?197.
[21]?許日丹, 楊俊.基于Rails框架的ActiveRecord[J].算法與語言, 2007(7):127?129.