用HTAs编写Moodle试题导入文件生成工具
2010-10-18代永平
代永平
(武汉大学 计算机学院,湖北 武汉 430072)
用HTAs编写Moodle试题导入文件生成工具
代永平
(武汉大学 计算机学院,湖北 武汉 430072)
Moodle是目前应用广泛的开源网络教学平台,提供了试题导入功能,但要求文件符合一定格式规范。本文通过编写HTAs,解决试题编写、生成试题导入文件的问题。
Moodle;HTAs;DHTML
一、引言
Moodle(Modular Object-Oriented Dynamic Learning Environment),即:模块化面向对象的动态学习环境,是一套基于社会建构主义理论设计开发的开放源代码的网络教学平台,体现了以学生为中心的创新教育理念。目前全球已有54793个注册的Moodle站点,超过200万注册用户通过这一系统进行学习。在中国Moodle同样得到了广泛普及。
Moodle系统功能强大,涉及教学环节的诸多方面,下面仅就涉及考试(测验)试题题库方面遇到的输入问题提出一种解决方案。
二、问题的提出与分析
Moodle提供了在线试题输入功能,通过在Web页面直接编辑题目,提交至服务器。该方式存在一些不便之处。从输入过程看,每编辑一道题需要先选择题型,然后在试题输入页面进行详细的设置并输入,包括题目分数、各答案选项的反馈信息、整体反馈信息等,完成后需要提交保存方可编辑下一道题目,使得这一过程繁琐而低效。从习惯差异看,Moodle没有单项选择和多项选择之分,其填空题型等同于简答题,而完型题等同于我们的填空题,这在理解上带来了不便。
Moodle同样提供了导入导出试题文件的功能,通过导入,批量输入多道题目,这可以解决在线编辑的低效问题。从这一角度切入,可以编写离线试题文件生成工具,并且从界面上提供符合国人习惯的试题编辑方式,最终通过它生成符合标准的试题文件导入Moodle。
Moodle对试题文件的格式做了规定,并支持多种类型的试题文件。比较常用的有 GIFT、Moodle XML、MissingWord、Aiken等,其中Moodle XML格式是Moodle专有的试题导出导入格式。通过对比研究,该格式适应多种题型,最适合试题导入。Moodle XML格式遵循W3C的XML1.0规范,它的一般格式是:
通过研究该格式,弄清各个节点的含义,下一步即考虑采用何种技术开发应用程序。
Moodle官方网站 (www.moodle.org)已经提供了由Vyatcheslav Yatskovsky编写的用于试题输入的Word模板,利用Word提供试题输入界面,以VBA代码生成试题文件。该模板以MIT许可协议授权用户使用,稍加汉化即能满足批量试题输入的要求。由于Word操作的灵活,使得编辑试题时出错改错的机率较高。另外,仍然存在题型理解差异问题,使用起来还是不便。因此有必要编写符合国人习惯的应用程序。
Moodle的试题最终以网页的形式呈现,如果以编辑网页的形式输入试题,则可以实现编写时的题目内容、格式与将来呈现出来的题目保持一致。本文开发的Moodle试题导入文件生成工具实质上是一个特殊的HTML编辑器,我们可以把多道题目以文本或HTML的形式直接输入页面,使其成为页面的某个元素或者某个元素的值,利用脚本从HtmlDocument对象可以获取该元素对象,从而得到题目本身的内容。
Microsoft提供了HTML应用程序 (HTAs)的示例程序:Microsoft HTML Editor,直接利用DHTML的支持就能实现Web编辑。该示例为Moodle试题导入文件生成工具的编写提供了思路和支持。
当用户编辑完题目后,利用XML DOM对象,即可生成题目对应的Moodle XML的节点。所有节点生成后,就可以生成Moodle XML类型的试题文件。
三、问题解决方案
1.HTML页面元素与XML节点的对应是实现目标的关键
用户在页面上编辑的内容最终要成为XML节点的数据,因此首先要解决编辑内容与XML节点的对应。本文使用带有name属性的HTML容器元素<div>实现这种对应。
以选择题为例:当用户输入题目后,该题目题干内容最终成为questiontext/text节点的值。可以在页面上生成<divname=questiontext></div>元素,并设置containtEditable属性为true,使用户可以编辑该元素的内容。最后利用div对象的innerHTML或innerTEXT属性获取题目内容,然后赋予questiontext/text节点值。同理,对于选项部分(常见的为4个选项),可以在页面上生成4个<div name=answer></div>元素,实现各答案选项与 answer/text节点的对应,如图1所示。
对于其他必要的节点,如<defaultgrade>、<name>等亦可考虑使用<div>或者根据编程需要采用其他元素。
2.Moodle试题导入文件生成工具的框架
编写该工具实际上就是编写一个包含脚本的HTML文件,以.hta为扩展名,从而成为HTAs。可以使用已有的Web编辑器编写。其主要内容如下:
以上元素中,<div id="oEditArea">从界面上提供一个编辑区,多个<input type=button>元素提供用户交互,比如“添加题目”按钮调用AddQuestion()脚本函数在编辑区添加表示一道题目的各个页面元素。
3.页面元素的布局
解决了HTML元素与XML节点对应的问题以及界面上如何操作来添加这些HTML元素后,必须考虑这些页面元素的布局,以便提供良好的用户界面。本文采用了布局表格,以单项选择题为例,采用如图2所示的布局:
图2 单选题布局
以上是一个2×2表格(以下称为题目布局表),cell(1,1) 用来显示小题号,cell(1,2) 用来装入<div name=questiontext></div>元素,cell (2,1) 用来为题目附加分数值,而cell(2,2)则嵌入另一个布局表(以下称为答案布局表),此处为4×2表格。每行的第2列装入<div name=answer></div>元素,此表格可有更多的行表示更多选项。每行第1列用来装入一个控件元素,比如对单选题,使用<INPUT type=radio>单选按钮,所有按钮具有相同的name属性,使用户在界面上能选择正确选项。更为重要的是,Moodel XML要求提供客观性题型(选择题、判断题等)的正确答案,并使用XML节点<answer>的fraction属性值保存,以便系统评分。使用控件元素可以根据其checked属性值,获知题目正确答案项。
同样的布局也适用于其他题型,判断题实质上是只有两个选项的单选题,对应答案布局表格只有两行;问答题和论述题这些主观性题型则不需要嵌入答案布局表,改为用<INPUT type=text>控件满足外观要求。
对于填空题(对应Moodle的Cloze题型),目前仍然在输入时存在一定难度。按照Moodle的规定,空缺处的表示方法最简单的是格式字符串:“{分值:SHORTANSWER:=答案}”,并且该字符串以文本形式嵌入题干。该题型可以有两种考虑,一种是在编辑题干部分时,需要填空的位置用脚本添加文本框,导出时把该文本框替换为格式字符串,该方法在界面上比较美观;另一种仍然保留答案布局表,用来保存填空处的答案,而编辑题干时在需要填空的位置用特殊符号占位,导出时把特殊符号替换为格式字符串。
至此,每一道题目都对应页面上一个题目布局表,该表赋予name=“tbQuestion”。然而要实现多种题型输入,并且便于脚本处理,应该把同类型题目归类,因此页面上使用容器<div>把同一题型的所有题目布局表装入其中,并使用ID属性区别不同题型。题型容器中可加入一些元素表示大题名称,大题分数等,使得界面更加美观。典型的单选题示例如图3。
<div id=sc>一、单选题:(n 小题,共 m 分)
图3 单选题大题布局
4.生成页面元素
DHTML提供了各种动态生成页面元素的技术,例如:document对象的createElement方法,多种页面元素的innerHTML属性、insertAdjacentHTML方法等等,利用这些技术可以编写脚本生成上面所述的布局表和其中的各种元素,并把它们加入页面。为简化编程,可以利用现有的Web编辑器,预先编辑好不同题型对应的布局内容(模版),并各自保存为文件,需要时直接从文件中读取这些HTML文本加入网页。
比如对于单选题,可用singlechoice.htm文件保存布局模版,当需要生成一道单选题时,AddQuestion()脚本函数利用FileSystemObject对象读取该文件,处理后加入题型容器<DIV id=sc></DIV>中:
5.XML节点的生成及Moodle XML文件的导出
当用户导出题目时,要根据每道题生成相应的XML节点树。利用脚本可以生成XML document对象并生成根节点<quiz></quiz>:
var objXMLDoc=new ActiveXObject("Microsoft.XMLDOM");
objXMLDoc.loadXML("<quiz></quiz>");
使用该对象的createnode方法即可生成所需的节点,并加入XML document对象,最终使用save方法保存为文件。
同样为简化编程,参照布局模版文件的方式,把不同题型的节点树以xml文件(模版)的形式存放,利用XML数据岛(xml data island)嵌入网页。
例如,单选题节点树以singlechoice.xml保存,内容如下:
网页中以<xml id=quizTypeXML_sc src=singlechoice.xml></xml>元素嵌入,这样在导出单选题时,首先克隆该数据岛的节点树,然后加入objXMLDoc,简化了编程。
当最终导出Moodle XML文件时,首先获取页面中所有的题目布局表(name=“tbQuestion”),然后依次对每一个布局表生成对应题型的XML节点树,并根据该布局表中的元素与节点树中的节点的对应关系,依次修改节点值,最后利用XML document对象的save方法即可生成文件。
四、结束语
笔者通过编写Moodle试题导入文件生成工具,较好地解决了在Moodle中输入题目的问题。界面友好,符合国人习惯,实现了WYSIWYG的编辑风格,规范编辑降低出错的几率,在Moodle教学中收到了良好的效果。
本工具不足之处在于,忽略了题目的一些细节内容,比如对答题的总体反馈,对每个选项的反馈等,这些都可以根据要求加入,并在界面上提供设置,供不同用户的需要。另外,由于采用HTAs实现,只适用于Microsoft Windows和IE6以上系统。
[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