User:Miriya52/week10
Refer to project glossary for acronyms and definitions.
Week 10: February 6 - 10
Objectives
edit- Parse basic question
- Parse more types and more complicated questions
- Validation checks to reject illegal inputs
Summary
edit- Successfully parses basic well-formed question. See test_element() unittest.
- In progress for development of validation checks with schema, adding true/false type, and reading a file into the structures.
Progress Update
editAdding validation check to GIFT parser
editFor the XML format, a schema is defined to verify well-formedness and validity of an input. I am looking into how to integrate this for the GIFT parser.
GIFT basic question:
//comment
::Question title
::Question{
=A correct answer
~Wrong answer1
~Wrong answer2
~Wrong answer3
}
simple elements defined as:
<xs:element name="xxx" type="yyy"/>
where xxx is the name of the element and yyy is the data type of the element.
Proposed XSD schema
edit<xs:schema>
<xs:sequence>
<xs:element name="questionTitle" type="xs:string"/>
<xs:element name="question" type="xs:string"/>
<xs:complexType>
<xs:element name="correctResponse" type="xs:string"/>
<xs:element name="wrongResponse" type="xs:string" maxOccurs="unbounded"/>
<xs:complexType>
<xs:sequence>
</xs:schema>
Unless defined as a "sequence" or "group", the sequence of elements doesn't matter. Sequence is "questionTitle", "question", then *Responses are in order; however inside the *Response elements complexType, it should be able to occur in any sequence. Need to see if this definition works.
Eventually, I want to include feedback in the responses as follows:
<xs:schema>
<xs:element name="questionTitle" type="xs:string"/>
<xs:element name="question" type="xs:string"/>
<xs:element name="correctResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="value" type="xs:string"/>
<xs:element name="feedback" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element name="correctResponse">
<xs:element name="wrongResponse" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="value" type="xs:string"/>
<xs:element name="feedback" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element name="wrongResponse">
</xs:schema>
Adding True/False type
editI am working on parsing true/false. See test_true_false().
::Q1:: 1+1=2 {T}
That is a valid Moodle GIFT format. The issue is that until the parser gets to last brackets '{T}', it's not apparent that it is a true/false vs multiple choice. In multiple choice, = is that tag for a correct response. So I think the parser logic needs to be modified to take in the whole question, and then identify what type of question it is. That would be a different parser logic than the pyslet XML parser which an rely on tags.
Reading in a Document
editI am working on reading in readFile.txt. See unittest test_document(); ignore the assert tests for now, the first element should be "Question title". However, when I call Document.read(), it does read the file, but ends up with only one element in the tree "Wrong answer3".
Plan for next week
edit- Redesign parser to buffer the whole question, and then parse to the different child elements
- Keep debugging!