Friday, 14 September 2007

Types of Questions

Sorry for the silence over the summer. But the work went a bit quiet then. What we have done recently is to add the WSDL end points for the SOAP part of our service and attemted to test in anger the service.

A number of points we found

  1. We had to correct an oversight. Any attribute in xml cannot have a quotation mark in it (because the quotation mark is the delimiter of an attribute). This was causing problems with questions created with quotation marks. Therefore we are just bug fixing that.
  2. Also, we can't have questions with hash symbols in them either. If they appear in generated qml, QuestionMark refuses to import them.
  3. A third question is what variant of QML (by Questionmark) should we support. For now, we are working on supporting the importation of non graphical questions form QML in Perception 3 and Perception 4 - but only exporting to Perception 4's flavour of QML. This latter point has given us some problems with a question of this type:
    ---ORDER---
    Associate the following numbers with their type:
    1@Odd
    2@Even
    3@Odd
    If we export this as a QML "SEL" question, there is no problem - the three numbers appear with dropdown boxes beside each one allowing the student to choose "odd" or "even". However, the SEL is depracated in Perception 4 where a "MATCH" style question is used instead. However, in that "odd" appears twice in the drop down list -and more problematically - in runtime mode - you aren't allowed to choose an item you have chosen previously. Making this kind of question very difficult. However, an easy work around is to switch the question to type "MAT" (or Matrix) - where it will again become possible to make multiple associations of the same term.
All of which shows that translating questions is much like translating languages. There are often 1-1 correspondences which are easy. But also there are occaisions where you need to arrive at the essence of what is being said and then recast it in the terms of the other language. The English "the straw that broke the camel's back" - in Italian becomes "La goccia che fa traboccare il vaso d'aqua" literally - the drop that made the vase of water topple over.

Tuesday, 22 May 2007

Clarifying the questions

Sorting out QTEXT questions and their corresponding QTI and QML type of question has required alot of thought. Questions such as ORDER type questions can be represented in different ways and the challenge for us was deciding the best way to represent each for clarity. The following is therefore a clarification on how each QTEXT question is represented and how these correspond to QTI and QML question types.
QTEXT Representation of the five types of questions are shown below along with the question type they correspond to in QTI (R2Q2) and QML (QM perception 4) .

The first QTEXT question is a multiple choice question (MCQ) which has a single correct answer represented by the @ symbol. This corresponds to a "choice" question in QTI and a Multiple Choice question (QTYPE="MC") in QML.

-----------------MCQ---------------------
What is rightthree is right
This isn't
Nor is this
@This is
But this isn't
And neither is this


The second QTEXT question is a multiple response question (MRQ), which has multiple correct answers, again represented by the @ symbols. This question corresponds to a "choice_multiple" question in QTI and a Multiple Response question (QTYPE="MR") in QML.

-----------------MCQ---------------------
What is righttwo,three and four are right
This isn't
@This is
@This is too
@And so is this
But this isn't

The next QTEXT question in a Fill in the blank type question (CLOZE). This question corresponds to a "text_Entry" question for single blanks and a "gap_match" question for multple blanks in QTI. In QML this question corresponds to a Fill in Blanks type question(QTYPE="FIB").

-----------------CLOZE---------------------
This is a fill in the blank or text Entry question. The gaps are placed between [at] signs like @so@. You can have more than one blank.

The next QTEXT question is an order type of question. The answers are typed in in the correct order. This type of question corresponds to an "order" question in QTI and a Ranking question (QTYPE="RANK") in QML.

-----------------ORDER---------------------
Put the following in the correct order (order is implicit)They are only numbers

Uno

Due

Tre

Quattro

Cinque

The next type of QTEXT question is a match or association type of question, where the match is represented by the text following the @ symbol. This type of question corresponds to a "match" type question in QTI and a matching type question (QTYPE="MATCH") in QTI

----------------ORDER---------------------
Match the following numbers with their english meaningThey are only numbers

Uno @One
Due @Two
Tre @Three
Quattro @Four
Cinque @Five

Sunday, 20 May 2007

MCQFM on sourceforge.net

The MCQFM project has now been accepted on sourceforge.net, the Open Source software development web site. It can be found at http://sourceforge.net/projects/mcqfm and the current project code can be found by browsing the CVS repository.

Thursday, 3 May 2007

Converting from QML to Text

While so far we have been exploring translating from the low featured QTEXT to BQL and then finally to QTI or QML, now, when trying to convert the other way, we find we are doing more than just tree conversions, we have to make deductions about what a question is trying to say, and how, therefore, its data might be recast into another format.

Lets for example think of a very complex multiple response question:



---MCQ---
Which of these are valid responses to belonging to unappealing social groups?
A) Leave the group
B) Seek to change the group
C) Remain in the group but complain about it intensely
D) Do passive aggressive things like wearing slovenly clothes whenever the group meets
E) Try to change your attitude to see the good in each member of the group


We might use a question like this to see if someone is coherent in their thinking (regardless of which strategy they use). (A) on its own is valid if defeatest (E) on its own is valid but maybe a bit airy-fairy - (B) on its own is a bit overambitious - but (B) and (E) together seems like a wonderful strategy. (C) and (D) if done together are very negative, but still coherent. However if anyone choses either (C)or(D) AND any of (A)(B)or(E) - then they are obviously a basket case (which is probably overdoing it - since most of us are contradictory at various points in our lives). Based on that reasoning I have tried to produce some QML below with scoring to reflect the best strategy.

<QUESTION STATUS="Normal" DESCRIPTION="Which of these are valid responses to belonging to unappealing social groups?" TOPIC="a" ID="3123191976896635" TYPE="text/plain" >
<CONTENT TYPE="text/plain" >
Which of these are valid responses to belonging to unappealing social groups?</CONTENT>
<ANSWER QTYPE="MR" SHUFFLE="N">
<CHOICE ID="0">
<CONTENT TYPE="text/plain">
Leave the group</CONTENT>
</CHOICE>
<CHOICE ID="1">
<CONTENT TYPE="text/plain">
Seek to change the group</CONTENT>
</CHOICE>
<CHOICE ID="2">
<CONTENT TYPE="text/plain">
Remain in the group but complain about it intensely</CONTENT>
</CHOICE>
<CHOICE ID="3">
<CONTENT TYPE="text/plain">
Do passive aggressive things like wearing slovenly clothes whenever the group meets</CONTENT>
</CHOICE>
<CHOICE ID="4">
<CONTENT TYPE="text/plain">
Try to change your attitude to see the good in each member of the group</CONTENT>
</CHOICE>
</ANSWER>
<OUTCOME ID="simpleDefection" SCORE="1">
<CONDITION >
"0" AND NOT "1" AND NOT "2" AND NOT "3" AND NOT "4"</CONDITION>
<CONTENT TYPE="text/plain">
</CONTENT>
</OUTCOME>
<OUTCOME ID="changeAttitudeandGroup" SCORE="3">
<CONDITION >
NOT "0" AND "1" AND "4" AND NOT "2" AND NOT "3"</CONDITION>
<CONTENT TYPE="text/plain">
</CONTENT>
</OUTCOME>
<OUTCOME ID="justChangeAttitude" SCORE="2">
<CONDITION >
NOT "0" OR NOT "1" OR NOT "2" OR NOT "3" OR "4"</CONDITION>
<CONTENT TYPE="text/plain">
</CONTENT>
</OUTCOME>
<OUTCOME ID="ConsistentlySulk" SCORE="0">
<CONDITION >
NOT "0" AND NOT "1" AND "2" AND "3" AND NOT "4"</CONDITION>
<CONTENT TYPE="text/plain">
</CONTENT>
</OUTCOME>
<OUTCOME ID="contradictory" SCORE="-2">
<CONDITION >
"2" OR "3" AND "0" OR "1" OR "4"</CONDITION>
<CONTENT TYPE="text/plain">
</CONTENT>
</OUTCOME>
</QUESTION>





Now from reading this, the only thing it can really end up as in QTEXT terms would be
---MCQ---
Which of these are valid responses to belonging to unappealing social groups?
Leave the group
@Seek to change the group
Remain in the group but complain about it intensely
Do passive aggressive things like excessive slovenliness of clothes whenever the group meets
@Try to change your attitude to see the good in each member of the group

- which is to say, set the "true" answers to be that of the **choices implied by the highest-scoring outcome**.

In this example we see a massive loss of the original data when "compressed" into the new format. But this is the curse of readability

Monday, 23 April 2007

BQL - Basic Question Language

BQL is an xml language we have created which represents in XML form the question in as basic a form as possible (it stands for Basic Question Language).

BQL example - Multiple Choice, Order and Cloze Questions

<?xml version="1.0" encoding="UTF-8"?>

<!--
Document : BQLexample.xml
Created on : 30 January 2007, 10:06
Author : C Bettison
Description: BQL document for quiz example.
-->

<ns:quiz xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:ns="http://mcqfm/quiz/1_0"
xsi:schemaLocation="http://mcqfm/quiz/1_0 /C:/Documents%20and%20Settings/Administrator/TextFileReadApp/src/newXMLSchema.xsd">

<ns:item model="mcq" id="1">
<ns:choicequestion totalscorevalue="1" minvalue="1">
<ns:content>Is this computer turned on?</ns:content>
<ns:answer correct="false" scorevalue="0" id="1">Don't know</ns:answer>
<ns:answer correct="true" scorevalue="1" id="2">yes</ns:answer>
<ns:answer correct="false" scorevalue="0" id="3">No</ns:answer>
</ns:choicequestion>
</ns:item>

<ns:item model="order" id="2">
<ns:orderquestion totalscorevalue="1" minvalue="1">
<ns:content>What is the correct order of the following notes:</ns:content>
<ns:orderanswer correctorder="3" id="1" correct="true" scorevalue="1">me</ns:orderanswer>
<ns:orderanswer correctorder="1" id="2" correct="true" scorevalue="1">doh</ns:orderanswer>
<ns:orderanswer correctorder="2" id="3" correct="true" scorevalue="1">ray</ns:orderanswer>
<ns:feedback>The correct order is: doh, ray me</ns:feedback>
</ns:orderquestion>
</ns:item>

<ns:item model="cloze" id="3">
<ns:gapquestion totalscorevalue="1" minvalue="1">
<ns:content>Fill in the missing gap</ns:content>
<ns:sentencepart gap="false" id="1">A light wave is </ns:sentencepart>
<ns:sentencepart gap="true" id="2">electromagnetic</ns:sentencepart>
<ns:sentencepart gap="false" id="3">whereas a soundwave is </ns:sentencepart>
<ns:feedback>The correct answer is electromechanical</ns:feedback>
</ns:gapquestion>
</ns:item>
</ns:quiz>

BQL Schema

<?xml version="1.0" encoding="UTF-8"?>
<!--
Document : BQLSchema.xsd
Created on : 30 January 2007, 10:09
Author : C Bettison
Description:
Purpose of XML Schema document for mcqfm project.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:ns="http://mcqfm/quiz/1_0"
targetNamespace="http://mcqfm/quiz/1_0"
xmlns="http://mcqfm/quiz/1_0" elementFormDefault="qualified">

<xs:element name="quiz" >
<xs:complexType>
<xs:sequence>
<xs:element name="item" type="item" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:complexType name="item">
<xs:choice>
<xs:element name="choicequestion" type="question"/>
<xs:element name="orderquestion" type="question"/>
<xs:element name="gapquestion" type="question"/>
</xs:choice>
<xs:attribute name="model" type="xs:string" use="required" />
<xs:attribute name="id" type="xs:integer" use="required" />
</xs:complexType>

<xs:complexType name="question">
<xs:sequence>
<xs:element name="content" type="content"/>
<xs:choice>
<xs:element name="answer" type="answer" maxOccurs="unbounded"/>
<xs:element name="orderanswer" type="orderanswer" maxOccurs="unbounded"/>
<xs:element name="sentencepart" type="sentencepart" maxOccurs="unbounded"/>
</xs:choice>
<xs:element name="feedback" type="feedback" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="minvalue" type="xs:integer" use="optional" />
<xs:attribute name="totalscorevalue" type="xs:integer" use="required" />
</xs:complexType>


<xs:complexType name="sentencepart">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="gap" type="xs:boolean" use="required" />
<xs:attribute name="id" type="xs:integer" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>

<xs:complexType name="answer">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="correct" type="xs:boolean" use="required" />
<xs:attribute name="id" type="xs:integer" use="required" />
<xs:attribute name="scorevalue" type="xs:integer" use="optional" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>

<xs:complexType name="orderanswer">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="correctorder" type="xs:integer" use="required" />
<xs:attribute name="scorevalue" type="xs:integer" use="optional" />
<xs:attribute name="correct" type="xs:boolean" use="required" />
<xs:attribute name="id" type="xs:integer" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>


<xs:simpleType name="content">
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>


<xs:simpleType name="feedback">
<xs:restriction base="xs:string">
<xs:whiteSpace value="collapse"/>
</xs:restriction>
</xs:simpleType>

</xs:schema>