[Cache from http://cvs.seul.org/~vernier/teresa/Thesis.html; please use this canonical URL/source if possible.]
By
TERESA FERRANDEZ
B.S.C.E., University of Dalarna, 1997
A thesis submitted in partial fulfillment of the requirements for the degree of
Master of Science in Computer Engineering
in the Department of Electrical and Computer Engineering
in the College of Engineering
at the University of Central Florida
Orlando, Florida
Fall Term
1998
This document presents development of a markup language created to enable instructors to share instructional material. The language is developed as an Extensible Markup Language (XML), and it is intended to be used as a common file format for Internet distance learning tools. The markup language can model the information of an entire course but the research has been focused towards creating a markup language for requirements of questions and quizzes.
The Instructional Management Systems (IMS) project group, a research group focused on distance learning over the Internet, has defined a set of requirements for distance learning tools. The markup language developed for this thesis complies with these requirements and thus, any distance learning tool using this markup language will also comply with these standards.
Apart from the markup language, a set of tools has also been developed to save the information stored in the XML files to a content server. The overall objective of the content server is to allow users to share materials amongst different classes and sets of users.
I would to express my sincere appreciation to those people whose guidance assisted me in the completion of this thesis. Foremost, I would like to thank Dr. Eaglin for his support and encouragement, and Dr. Bauer for serving as my advisor. I would also like to express my gratitude to Dr. Linton and Dr. Klee for serving on my committee.
I would also like to thank my fiancé Lars Norlander for being patient with my neglected domestic chores, and most of all, for always being there to offer support when I needed
it.
Figure Common file format for Distance learning material
The file format will be called Standardized Assessment and Testing Markup Language (or SATML) and the draft for the file format will be submitted to the IMS (Instructional Metadata Systems) Question Interoperability group, as a suggestion for the IMS distance learning file format for this type of data.
In the thesis the issues related to the development of the file format and the converter, will be addressed:
Related work.
The parts of the IMS Specification that are related to this thesis.
Background of XML.
Other applications that have used XML as basis for their files.
XML design considerations.
Rendering XML files using XSL.
Information which needs to be stored.
Security issues when transferring XML files over the Internet, such as methods to avoid that the students read the files with answers to quizzes and assessments.
Methods for parsing XML files.
Figure Example of entry form for multiple choice questions in WebCT
:::MC:::1:::0
:::TITLE:::Question 24
:::QUESTION:::H
In general, the annual temperature ranges are greater in the Southern Hemisphere than in the Northern Hemisphere.
:::IMAGE:::
:::LAYOUT:::vertical
:::ANSWER1:::0:::H
True
:::ANSWER2:::100:::H
False
Figure Example of a WebCT Multiple Choice file
shows an example of how a multiple choice question is stored in WebCT's flat file database format.
":::MC:::1:::0" states that the question is a multiple choice question where the student is only allowed to choose one of the answers and a wrong answer can never result in a negative score.
The second line ":::TITLE:::Question 24", defines the title of the question.
":::QUESTION:::H"
"In general, the annual temperature ranges are greater in the Southern Hemisphere than in the Northern Hemisphere."
States the text of the question and the H on the first line declare that the question text should be treated as HTML as opposed to regular text.
After the question text optional image links can be inserted to illustrate the question but in this case ":::IMAGE:::" has been left empty which means that the creator of the question has chosen not to provide any images.
The next line ":::LAYOUT:::vertical" defines that the answers of the question should be lined up vertically. This line is followed by lines stating the possible answers of the question where the numbers 0 and 100 indicate how correct the answer is (correctness), and the H indicates that the answer text should be treated as HTML, instead of regular ascii text.
:::ANSWER1:::0:::H
True
:::ANSWER2:::100:::H
False
Optionally lines providing feedback to the student selecting a particular answer can also follow these lines.
Most distance learning tools store similar information about their quizzes and questions and since WebCT contained most of the data used in normal distance learning tools, the WebCT structure was used as the backbone of the SATML structure.
What is the sum of 40 and 25?
<question name = q1 type = symbolic solution = 65>
<hint name = q1>
<B>Hint:</B> If you can't add it in your head, use a
calculator!
</hint>
What is the name of the first U.S. President?
<question name = q2 type = singleword solution =
washington;george washington>
Which of these does not belong?
<question name = q3 type = multiple_choice solution = 3>
<option name = q3 value = 1>bird</option>
<option name = q3 value = 2>dog</option>
<option name = q3 value = 3>rock</option>
<option name = q3 value = 4>cat</option>
<option name = q3 value = 5>fish</option>
Figure Example of questions stored in CyberProf
The example above was taken from the web site .
The structure of the Cyberprof assignment files is very straightforward and easy to understand, but the questions that can be created in the CyberProf tools are very restricted. CyberProf has one nice feature that WebCT lacks and that is the possibility to give the students hints when they are not able to answer the questions.
Since the ability to give the students hints is a major advantage, this feature has been adopted in the creation of the SATML files.
The IMS working group has developed a prototype for a virtual university environment containing tools for conducting web based classes.
The tools range from student management tools to tools for displaying function graphs on a group of machines simultaneously.
The diagram in and its diagram description shows the architecture of an IMS tool as presented in the IMS Specification, version 0.5 .
1. A Search Engine may use meta-data information to query a Content Server for specific kinds of learning material.
2. A Search Engine may query a Profile Server to find persons with desired skill certifications.
3. An authoring tool may query a Profile Server for preference and performance data to customize its presentation.
4. A Search Engine can obtain course meta-data from a Content Server at an organization hosting an IMS server.
5. Authoring tools may exchange content with an IMS Management System.
6. Authoring tools may interact with content servers to find or provide content and content meta-data.
7. A content server may provide content material to an IMS Management System.
8. There will be many content servers reachable by search engines.
Each course or instructional unit created in the IMS prototype can have it's own distinct resources, and the resources can be anything from web sites containing instructional material to specific teaching tools.
The idea is that all the resources provided for a class or instructional unit should contain meta-data tags to enable searches, management, and reuse of the material.
Name | Type | Definition |
Author or Creator | Opt | The person responsible for the creation of the work |
Name | Type | Definition |
Coverage | Opt | The coverage of the instructional unit, (use of this field is very experimental) |
Date | Mand |
A date associated with the creation or the availability of the resource. May contain several sub elements such as Publication date, Availability date and expiration date. |
Description | Mand | A textual description of the contents of the resource. |
Format | Mand | The format of the resource, ex. Book, html etc. |
Language | Mand | The language the resource is presented in, ex. US-en |
Other Contributors | Opt | A person or organization besides the creator of the resource that has helped developing the resource |
Publisher | Mand | The entity responsible for making the resource available in its present form |
Relation | Opt | An identifier of a second resource and it's relationship with this resource |
Resource Identifier | Mand | A string or number that uniquely identifies this resource |
Resource Type | Opt | The type of the resource, ex. Tutorial |
Rights Management | Opt |
A list of what the student or instructor can do with the resource. It currently has two sub fields: agent and use rights. |
Source | Opt | Information that this resource is based on |
Subject | Mand | The topic or the keywords of this resource |
Title | Mand | The title of the resource |
Agent | Opt | A person responsible for managing a part of a resource. An instructor is an example of an agent. |
Availability Date | Opt | The date the resource is available for use. |
Concepts | Opt | Ideas related to the resource |
Container Type | Mand |
The container type is a very broad description of the resource type |
|
||
Name | Type | Definition |
Expiration Date | Opt | The date that the contents of the resource are no longer valid. |
Granularity | Opt |
The size of the resource Curriculum Course Unit Topic Lesson Fragment NA (Not applicable) |
Interactivity Level | Opt |
The level of interaction between the user and the container Low Medium High |
Keywords | Opt | One or more words exemplifying the contents of the course |
Last Modified Date | Opt | The day the resource was last modified |
Learning Level | Opt | The difficulty of the material |
Location | Opt | The URL showing where the resource can be retreived |
Meta-Meta-Data | Mand | Information about Meta-data |
Objectives | Opt | Learning objectives met by the container |
Pedagogy | Opt |
The method used to teach the contents of the resource Discovery, Expository |
Platform | Opt | Software and hardware required to use the contents of the resource |
Prerequisites | Opt | Courses and or capabilities needed to use the material |
Presentation | Opt |
Describes how the materials are presented to the user Images, Verbal, Sound, Multi-User |
Price Code | Cond | The price of using a particular offering |
Publication Date | Opt | The date the resource was first published |
Role | Opt |
The role of the entity serving as the learning resource Curriculum, Course, Unit, Topic, Lesson, Fragment, NA (Not applicable) |
Scheme | Mand | A description of the information structure of the resource |
Size Of | Opt | Size of the container in bytes |
Structure | Opt |
The organization of the material Linear, Hyperdimensional, Branched, Parceled, Null |
Name | Type | Definition |
Use Rights | Opt |
What a user can do with the offering Restricted Use Aggregatable Disaggregatable Distributable Editable |
Use Time | Opt | The average time a normal student would spend on the container (in minutes). |
User Support | Opt | Indicates whether user support is available or not |
Version | Mand | The version of the resource |
1. XML shall be straightforwardly usable over the Internet.
2. XML shall support a wide variety of applications.
3. XML shall be compatible with SGML.
4. It shall be easy to write programs which process XML documents.
5. The number of optional features in XML is to be kept to the absolute minimum, ideally zero.
6. XML documents should be human-legible and reasonably clear.
7. The XML design should be prepared quickly.
8. The design of XML shall be formal and concise.
9. XML documents shall be easy to create.
10. Terseness in XML markup is of minimal importance.
You can't search for parts of equations if they are represented by images.
If the font size or type is changed the equations still stay the same.
Images slow the downloading of the document.
Using images makes the text harder to read, since you need more line spacing between the lines that uses images than between the rest of the lines.
Images are harder to cut and paste than text.
Images can't be compressed like text.
The W3C formed a working group for developing a standard markup language for mathematics in 1997 and the first draft of the Mathematical Markup Language was submitted in May 1997.
There has been a lot of software developed to display and edit the Mathematical Markup Language. The most known of these software products is the MathML browser Amaya.
shows an example of a square root modeled in MathML.
The nth root of a is given by:
<apply> <root/>
<ci> a </ci>
<ci> n </ci>
</apply>
Figure Example of MML
The default rendering of the square root in Amaya is shown in .
n√a
Figure Default rendering of the nth root
For more information on the MathML draft consult the .
BOOKS
1. For an Insurance Companies list of property to be replaced or customs list of objects declared at the border, the only important thing is that the object is a book.
<BOOK TITLE="Mary's chance" Author="Sheldon, Sidney"/>
<BOOK>
<TITLE>Mary's chance</TITLE>
<AUTHOR>Sheldon, Sidney</AUTHOR>
</BOOK>
Figure Books - Example 3
4. A totally different approach, using links to the author
so that the author information can be reused for other books.
<BOOK ID="The Call of the Wild">
<AUTHOR UNIT="Jack London"/>
</BOOK>
<PERSON ID="Jack London">
<FIRST>Jack</FIRST>
<LAST>London</LAST>
<PHONE>(206) 555-3423</PHONE>
<WORK UNIT="The Call of the Wild"/>
<WORK UNIT="Love those Wolves"/>
</PERSON>
<STORE ID="Walmart">
<CUSTOMER UNIT="Jack London"/>
...
</STORE>
Figure Books - Example 4
RECTANGLES
These are two examples of how differently you can model a rectangle depending on your needs.
1. "Minimalist" approach as seen in .
<RECTANGLE X="0" Y="0" WIDTH="0" HEIGHT="0"/>
Figure Example of minimalist approach for XML rectangle
2. Extravagant approach as seen in .
<RECTANGLE>
<ORIGIN><X>0</X><Y>0</Y></ORIGIN>
<SIZE><DX>7in</DX><DY>9in</DY></SIZE>
<LABEL>My Pretty Rectangle</LABEL>
<IMAGE>floral.jpg </IMAGE>
<BACKGROUND>gold</BACKGROUND>
<FOREGROUND>blue</FOREGROUND>
...
</RECTANGLE>
Figure Example of extravagant approach for XML rectangle
<!ELEMENT EMPLOYEELIST (EMPLOYEE+)>
<!ELEMENT EMPLOYEE (NAME, EMPLOYEENUMBER,
OFFICEPHONE?)>
<!ELEMENT NAME (FNAME, LNAME)>
<!ELEMENT FNAME (#PCDATA)>
<!ELEMENT LNAME (#PCDATA)>
<!ELEMENT EMPLOYEENUMBER (#PCDATA)>
<!ELEMENT OFFICEPHONE EMPTY>
<!ATTLIST PART AREA CDATA #REQUIRED
NUMBER CDATA #REQUIRED>
Figure Employee DTD
<EMPLOYEELIST>
<EMPLOYEE>
<NAME>
<FNAME>Burt</FNAME>
<LNAME>Reynolds</LNAME>
</NAME>
<EMPLOYEENUMBER>123</EMPLOYEENUMBER>
<OFFICEPHONE AREACODE="407" NUMBER="555-1212" />
</EMPLOYEE>
<EMPLOYEE>
<NAME>
<FNAME>Ronald</FNAME>
<LNAME>Reagan</LNAME>
</NAME>
<EMPLOYEENUMBER>456</EMPLOYEENUMBER>
<OFFICEPHONE AREACODE="407" NUMBER="555-2323" />
</EMPLOYEE>
<EMPLOYEE>
<NAME>
<FNAME>Pete</FNAME>
<LNAME>Sampras</LNAME>
</NAME>
<EMPLOYEENUMBER>789</EMPLOYEENUMBER>
<OFFICEPHONE AREACODE="407" NUMBER="555-3434" />
</EMPLOYEE>
</EMPLOYEELIST>
Figure Employee XML
This chapter will describe the most common elements of a DTD and the possible values for these elements as stated in W3C's draft.
Example | Definition |
<!ELEMENT EMPLOYEE (NAME, OFFICEHOURS, PHONE+)> |
An employee element consists of a name element followed by a officehours element followed by one or more phone elements |
<!ELEMENT EMPLOYEE (NAME, OFFICEHOURS?, PHONE+)> |
An employee element consists of a name element optionally followed by a officehours element and one or more phone elements |
<!ELEMENT EMPLOYEE (NAME, OFFICEHOURS*, PHONE+)> |
An employee element consists of a name element followed by zero or more officehours element followed by one or more phone elements |
<!ELEMENT EMPLOYEE (NAME, OFFICEHOURS, (PHONE+|EMAIL*))> |
An employee element consists of a name element followed by an officehours element followed by either one or more phone elements or zero or more email elements |
<!ELEMENT EMPLOYEE ANY> | An employee element consists of any combination of elements and character data, in any order |
<!ELEMENT EMPLOYEE (((NAME, OFFICEHOURS) | (NAME, OFFICEHOURS)), PHONE?)> |
An employee element consists of the elements name and officehours in any order followed by an optional phone element |
Type | Example | Definition |
String |
<!ATTLIST PHONENUMBER AREACODE CDATA ...> |
The value of the areacode attribute can be any character string Ex. AREACODE="(407)" |
Enumerated |
<!ATTLIST OFFICEHOURS DAY (m|tu|w|th|f) ...> |
The value of the day attribute has to be one of the five indicated strings Ex. DAY="m" |
ID |
<!ATTLIST EMPLOYEE EMPLOYEENR ID ...> |
The value of the employeenr attribute has to be unique in the document for the XML document to be valid. An ID string can begin with a letter, a "_" or a ":" Ex. EMPLOYEENR="tf389" |
IDREF |
<!ATTLIST WORKORDER EMPID IDREF ...> |
The value of empid has to match a value assigned to an ID attribute somewhere in the document Ex. EMPID="tf389" |
IDREFS |
<!ATTLIST WORKORDER EMPIDS IDREFS ...> |
The same as IDREF but IDREFS can contain more than one ID reference Ex. EMPIDS="tf1 tf2" |
NMTOKEN |
<!ATTLIST EMPLOYEE PHONENR NMTOKEN ...> |
A nmtoken is similar to a string, except that a nmtoken can only contain letters, digits and the following characters ".-_:", no white spaces are allowed Ex. PHONENR="555-1212" |
NMTOKENS |
<!ATTLIST EMPLOYEE PHONENRS NMTOKENS ...> |
The same as NMTOKEN but NMTOKENS can contain more than one NMTOKEN. |
<person signature = "sig">
<name>Sean McGarth</name>
</person>
Figure Example of the use of notations in XML
is a fragment of an XML file taken from the book XML by Example showing an example of how the notation element can be used.
<?XML version='1.0'?>
<s:schema id="employeeList">
<elementType id="firstName">
<string/>
</elementType>
<elementType id="lastName">
<string/>
</elementType>
<elementType id="employeeNumber">
<string/>
</elementType>
<elementType id="employee">
<element id="fn" type="#firstName">
<element id="ln" type="#lastName">
<element id="en" type="#employeeNumber">
<key id="k1">
<keyPart href="fn"/>
<keyPart href="ln"/>
<keyPart href="en"/>
</key>
<attribute name="title" default="manager">
</elementType>
</s:schema>
Figure Schema for an employee list XML
The DCD element defines the beginning and the end of the DCD. Inside the DCD element there can optionally be a <?DCD> element containing compiler directives, and there must be at leas one <ElementDef> element.
<ElementDef Type="Loan">
<Description>A Bank Loan</Description>
<Group RDF:Order="Seq">
<Element>InterestRate</Element>
<Element>Amount</Element>
<Element>Maturity</Element>
</Group>
</ElementDef>
<ElementDef Type="InterestRate" Datatype="float"/>
<ElementDef Type="Amount" Datatype="int"/>
<ElementDef Type="Maturity" Model="Data"
Datatype="dateTime"/>
Figure DCD for bank loans
The DCD defines the element <Loan> that contains a InterestRate, a Amount and a Maturity element in that order.
The attributes of the ElementDef element and their possible values are shown in .
Table ElementDef Attributes
Attribute | Possible values | Description |
Type | A string that starts with a letter, _ or : continued by any series of letters, digits, ., _, or - | The type is the name of the element, ex. <title></title> has the type="title" |
Model |
Empty - No content Any - Text and elements Of any type Data - Only text Elements - Only Specific Elements Mixed - Text and specific Elements |
Indicates the possible content of this element |
Contents |
Open - may contain non Specified Elements Closed - may not contain Unspecified Elements |
Indicates if this element can have child elements not stated in the group statement |
Datatype | Can be string, int, number, dateTime etc. For full list see [1] the DCD submission to the W3C | Defines what data the element can contain |
Attribute | Possible values | Description |
Min, Max, MinExclusive, MaxExclusive | Numbers or strings depending on the data type of the contents | Upper or lower bounds on the contents, this attribute is only meaningful if the content model is data |
Default | Any value that is of the same datatype as the contents of the element | The default value of the contents if none is proviede |
Fixed | True or False | True means that other values than the default is allowed |
Root | True or False | True means that this element may serve as the root element of this kind of document |
Attribute | Possible values | Description |
Name | A string that starts with a letter, _ or : continued by any series of letters, digits, ., _, or - | The name of the attribute |
Global | True, False | Indicates whether the Name property of this attribute must be unique in the DCD |
Default | See Default for ElementDefs | |
Description | See Description for ElementDefs | |
Max, Min, MaxExclusive, MinExclusive | See Max, Min etc. for ElementDefs | |
Fixed | See Fixed for ElementDefs | |
ID-Role | ID, IDREF, IDREFS |
Signals that the attribute has unique ID pointer sematics |
|
||
Attribute | Possible values | Description |
Id | Ex. "sizeAtt" |
Attributes defined with Global="False" can be referred to in other element definitions in the DCD by this identifier. |
Resource |
A string referring to an attribute id in the document Ex. "#sizeAtt" |
Refers to the id of an attribute in the document. |
Occurs | Required, Optional | Indicates whether the precence of the attribute is required |
UniqueIn | Name of an element present in the DCD or null | Defines in what context the attribute is unique, an element name indicates that the attribute name is unique in that element, null indicates uniqueness in the whole document |
Datatype | See Datatype for ElementDefs |
Table Group attributes
Attribute | Values | Description |
Occurs | Required, Optional, OneOrMore, ZeroOrMore | Defines if the elements in the group are required or not and how many times they can occur within the parent element |
Order | Seq, Alt | Defines if the order of the child elements is important or not |
3.4.1 Overview of XSL
The basic element of a XSL document is a construction rule, which contains a pattern and an action. The pattern describes an element in the XML file and the action describes what should happen to the output file when this pattern is found.
contains three types of XSL rules each with their patterns and actions.
<xsl>
<rule>
<root/>
<HTML>
<BODY>
<children/>
</BODY>
</HTML>
</rule>
<rule>
<target-element type="orders"/>
<DIV font-size="14pt" font-family="serif">
<children/>
</DIV>
</rule>
<style-rule>
<target-element type="customer"/>
<apply fornt-weight="bold"/>
</style-rule>
</xsl>
Figure Example of XSL
The second rule in the example above indicates that whenever the XSL-processor finds an <orders> element its contents should be given the font serif 14pt. The resulting output file will contain the following row:
<DIV font-size="14pt" font-family="serif"> ... </DIV>.
<!-- pattern matches immediate children to <TABLE
border="0"> elements -->
<element type="TABLE">
<attribute name="border" value="0"/>
<target-element/>
</element>
Figure Specifying attribute values
The second way to use attributes in the pattern is to make the rule fire based on the presence of the attribute value <attribute name="A" has-value="yes">.
You can also use the value of the attribute in the action part of the rule as shown in .
<album width="300">
<photograph image-url="barbie.gif"/>
</album>
<rule>
<target-element type="photograph"/>
<IMG SRC='=getAttribute("image-url")'
width='=parent.getAttribute("width")'/>
</rule>
Figure Retreiving attributes
In the example above the resulting line in the output document will be <IMG SRC="barbie.gif" width="300"/>.
|
Figure QML Structure
KEYWORD
An optional number of keywords can be provided for a question to enable instructors to find questions that relate to a specific subject.
Atts: None
SubElements: None
STEM
The stem of the question is the actual question text.
Atts: None
SubElements: None
ALT
An alternative can be either a correct answer or an incorrect answer.
Atts: The possible values of the CORRECT (Req.) attribute are yes and no, where yes means that this is the correct alternative. There can be one or more correct alternatives and one or more incorrect alternatives but the user is only able to choose one alternative when answering the question.
SubElements: The alternative is composed by an answer element containing the answer text and an optional ELEMENTS feedback element giving specific feedback to the user if this alternative is chosen.
ANSWER
The answer element contains answer text for one of the alternatives
Atts: None
SubElements: None
FEEDBACK
Feedback is an optional text that should be displayed to the user when a specific answer is chosen or when the question is answered.
Atts: None
SubElements: None
Figure QML Structure
The structure for the Quiz Markup Language is based on information found on the web site.
FEEDBACKCORRECT
Feedbackcorrect gives feedback if the student answers a question correctly. This element can reside inside the QUIZ element to give a global feedback on correct answers or inside a QUESTION tag to give feedback if the specific question is answered correctly.
Atts: None
SubElements: None
FEEDBACKINCORRECT
Feedback incorrect gives feedback if the student answers a question incorrectly. This element can reside inside the QUIZ element to give a global feedback on incorrect answers or inside a QUESTION tag to give feedback if the specific question is answered incorrectly.
Atts: None
SubElements: None
FEEDBACKPARTCORRECT
Feedbackpartcorrect gives feedback if the student answers a question partly correctly. This element can reside inside the QUIZ element to give a global feedback on partly correct answers or inside a QUESTION tag to give feedback if the specific question is answered partly correctly.
Atts: None
SubElements: None
PAGE
The page element defines what type of page to use and it allows for customization of individual pages.
Atts: STYLE (opt.) defines what type of page to use. The possible values are INTRO (introduction page with title, subtitle and intro textfield), MENU (menu page), SUM (summary page) and QUEST (question pages).
The attributes SCOREBUTTON (opt.), SCOREFIELD (opt.), FEEDBACKFIELD (opt.) and NAVBUTTONS (opt.) define whether the corresponding objects should be defined for the questions on this page.
NAME (req.) is the name of the question.
The attributes TEXTFIELD and INTROTEXTFIELD define whether the corresponding objects should be included on the page.
SubElements: A page can contain one or more QUESTIONs.
TITLE
The title element gives a global name for all the questions in the quiz. If the value of this element contains #N#, for example Question #N#, the #N# will be replaced by numbers running from 1 to n where n is the number of questions in the quiz.
Atts: None
SubElements: None
SUBTITLE
The subtitle element gives a global subtitle for all the question pages in the quiz. If the value of this element contains #N#, for example Section #N#, the #N# will be replaced by numbers running from 1 to n where n is the number of question pages in the quiz.
Atts: None
SubElements: None
RANDOM
Random globally defines whether the answers to the questions should be randomized or not. This element can be overridden by a questions random attribute.
Atts: None
SubElements: None
TRIES
The TRIES element globally sets the number of times the student can change his answer while on that page. This value will be reset once the student leaves the page.
This element can be overridden by the question tries attribute.
Atts: None
SubElements: None
MULTICORRECT
The MULTICORRECT element globally defines whether the multiple-choice questions in the quiz can have more than one correct answer.
This element can be overridden by the question multicorrect attribute.
Atts: None
SubElements: None
MAXSCORE
The MAXSCORE element globally defines the maximum score for the questions in the quiz. This element can be overridden by the question maxscore attribute.
Atts: None
SubElements: None
AUTORESET
The AUTORESET element globally defines whether the question widget on a page should be automatically reset. The possible values for this element is; True (the question will be reset both on the entry and exit of the page), False (the question will never be reset), enterPage (the question will be reset on the entry of the page), leavePage (the question will be reset when the page is left), ONCE (the question will be reset once). This element can be overridden by the question autoreset attribute.
Atts: None
SubElements: None
AUTOLOCKANSWERS
If set to true, autolockanswers globally set number of tries on the questions to 1. This element overrides the tries element, and it can be overridden by the question autolockanswers attribute.
Atts: None
SubElements: None
DELAYEDFEEDBACK
The subtitle element gives a global subtitle for all the question pages in the quiz. If the value of this element contains #N#, for example Section #N#, the #N# will be replaced by numbers running from 1 to n where n is the number of question pages in the quiz.
Atts: None
SubElements: None
SCORED
The scored element globally sets whether the questions in the quiz should be scored or not. This element can be overridden by the question scored attribute.
Atts: None
SubElements: None
QUESTION
The question element defines a question with a question text and a few answers.
Atts: TYPE (opt.) defines the type of the question. The possible values are NONE (plain question), FIB (fill in the blank field), TFB (True/False button), TFC (True/False check boxes), MCB (Multiple choice buttons), MCF (Multiple choice fields), MCR (Multiple choice radio buttons), MCC (Multiple choice check boxes), and RMC (Rate by multiple choice).
Questions also have the following attributes explained in further detail above, TITLE, SUBTITLE, MULTICORRECT, DELAYFEEDBACK, CHANGEANSWER
ANSWER
The answer element contains the answer text for a question.
Atts: CORRECT (opt.) defines whether the answer is correct or not. The question can also have a WEIGHT (opt.) defining how correct or incorrect the answer is.
SubElements: None
Figure Quizzit structure
TITLE
The TITLE element defines the title of the quiz.
Atts: None
SubElements: None
INSTRUCTION
INSTRUCTIONs to the student about how the test will be conducted can be entered in the INSTRUCTION tag.
Atts: None
SubElements: Zero or more paragraphs (P)
QUESTION-GROUP
A QUESTION-GROUP is a group of questions meant to be taken together. Reply actions can be specified for question groups.
Atts: ID (Opt.) allows the author to set a unique identifier for the QUESTION-GROUP.
NEXT (Opt.) defines which QUESTION-GROUP has to be taken after this one.
SubElements: Zero or more questions (MCHOICE, MATCHING, TRUEFALSE, FILLIN) along with a REPLY action.
QUESTION
The QUESTION element is not an actual element, it should be replaced by MCHOICE, MATCHING, TRUEFALSE or FILLIN depending on the question you want to create.
Atts: ID (Req.) is the unique identifier for each question
SubElements: A question contains a DESCRIPTION, one or more ANSWERs and zero or more HINTs.
REPLY
The REPLY element defines the action to be taken when the questions have been answered incorrectly.
Atts: QUIZID (Opt.) is a pointer to the quiz the student has to take if the CUTOFF point is not reached.
CUTOFF (Opt.) is the number of point the student has to receive on this QUESTION-GROUP to pass it.
SubElements: A REPLY can contain one of the following sub elements: MAIL, COMMENT or QUIZ.
MAIL
This element defines a MAIL that will be sent to the student when all the QUESTIONs in the QUESTION-GROUP are answered and the CUTOFF point is reached.
Atts: CC (Opt.) is a mail address to which copies of the mail should be sent.
SUBJECT (Req.) states the subject of the email.
SubElements: The MAIL element can contain zero or more paragraphs (P)
COMMENT
This element defines a COMMENT that will be shown to the student when all the QUESTIONs in the QUESTION-GROUP are answered and the CUTOFF point is reached.
Atts: None
SubElements: The COMMENT element can contain zero or more paragraphs (P)
Figure TML structure
TUTORIAL
TUTORIAL is the element that defines every tutorial.
Atts: ACTION (Opt.) defining any action to be taken at the beginning of the tutorial.
SubElements: One or more QUESTIONs
QUESTION
The QUESTION element defines a question.
Atts: TYPE (Req.) can be Multiple-choice, Poly-choice, Word-Match or Hot-image.
ATTEMPTS (Opt.) is the number of attempts allowed answering this question. The default number is 3.
NAME (Opt.) provides a textual name for this question.
SubElements: Every QUESTION must contain one and only one of the following elements: CHOICES, HINTS, RESPONSES and SCORE.
CHOICES
The CHOICES element is the base element for the different answer choices of the QUESTION it belongs to.
Atts: CONTINUE (Opt.) instructs the viewer to continue numbering choices from the previous number rather than restarting at number 1.
SEQNUM (Opt.) instructs the viewer to start numbering the choices with the number n.
WRAP (Opt.) is a hint to the viewer requesting multi-column display of choice lists. It must equal 'vert', 'horiz' or 'none'.
RANDOMISE (Opt.) if set the order of the choice tags of the question is randomized.
SubElements: Every CHOICES element contains one or more CHOICE elements.
CHOICE
The CHOICE element represents one of the possible choices for the wrapping QUESTION.
Atts: SKIP (Opt.) instructs the viewer to skip n values in the numbering of the choices.
OPTION (Opt.) gives this choice a textual name such as a. instead of a number.
MATCH (Opt.) defines how close the match has to be between the user input and the actual answer. (exact is case insensitive but every character has to match, fuzzy means that the word can be misspelled by one character and regexp allows you to use wildcards.
ISCORRECT (correct, incorrect or close) (Opt.) defines how accurate this answer is.
The default value is incorrect.
HINTS
The HINTS element is a wrapper for the hints to one particular question.
Atts: None
SubElements: A HINTS element can contain one or more HINTs.
HINT
A HINT will be shown every time the user requests one, using the LOSE element the tutorial developer can set how many points will be deducted for using a HINT.
Atts: None
SubElements: None.
RESPONSES
RESPONSES are used to give the student feedback on its responses.
Atts: None
SubElements: One or more WHEN elements must be present inside the RESPONSES element.
WHEN
The WHEN element instructs the viewer about when to give feedback and what feedback to give.
Atts: CONDITION (Opt.) (correct, incorrect, close or complete) defines when to give feedback. Complete means that the student has exhausted the number of attempts allowed or that the student has answered the question correctly. The default value is Incorrect.
OPTION (Opt.) also defines when to give feedback. Feedback is given if the user has answered with option = o
ATTEMPT (Opt.) defines that feedback should be given when the user makes an attempt at this question for the nth time.
SubElements: None.
SCORE
SCORE instructs the viewer about how many points to add for a correct answer or how many points to deduct for a hint etc.
Atts: None
SubElements: One or more of either the GAIN or the LOSE element.
GAIN
The GAIN element instructs the viewer to add points to the total score.
Atts: CONDITION (Opt.) can be correct or close. Default is correct.
VALUE (Opt.) defines how many points to add to the total score. Default is 1.
ATTEMPT (Opt.) defines for which attempt this score gain is valid.
OPTION (Opt.) defines for which option this score gain is valid.
SubElements: None
LOSE
The LOSE element instructs the viewer to deduct points from the total score.
Atts: CONDITION (Opt.) can be hint, incorrect or close. Default is incorrect.
VALUE (Opt.) defines how many points to deduct from the total score. Default is 1.
ATTEMPT (Opt.) defines for which attempt this score loss is valid.
OPTION (Opt.) defines for which option this score loss is valid.
SubElements: None
4.1.4.4 Examples
Figure IMS MC-Test Structure
MC-TEST
The MC-TEST element is the outermost element of the test.
SubElements: It can contain a TITLE and one or more ITEMs.
TITLE
The TITLE element gives the test a name.
SubElements: None
ITEM
An ITEM is defined as one Multiple-Choice question.
SubElements: An ITEM has a NUMBER a statement (STEM), a CORRECT answer and one or more wrong answers (DISTRACTORs).
NUMBER
The NUMBER defines the number of the question
SubElements: None
STEM
The statement of the question is written in the STEM element.
SubElements: None
DISTRACTOR
A DISTRACTOR is an answer that is incorrect.
SubElements: None
CORRECT
The correct answer to the question is given in the CORRECT element.
SubElements: None
Figure IMS MC-Test Answers structure
MC-TEST
The MC-TEST element is the outermost element of the test.
SubElements: It can contain a TITLE, the creation DATE and the name of the GIVER but it must also contain the name of the TAKE and one or more ITEMs.
TITLE
The TITLE element gives the test a name.
SubElements: None
TAKER
The TAKER identifies the student taking the test
SubElements: None
GIVER
The GIVER identifies the instructor giving the test
SubElements: None
ITEM
An ITEM is defined as one Multiple-Choice question.
SubElements: An ITEM has a NUMBER, a TENDERED answer (the answer the student gave) and a CORRECT answer.
NUMBER
The NUMBER defines the number of the question
SubElements: None
TENDERED
The TENDERED answer is the answer the student given by the.
SubElements: None
CORRECT
The correct answer to the question is given in the CORRECT element.
SubElements: None
Figure IMS Performance-Data structure
ITEM
The ITEM element is the outermost element in a performance file
SubElements: A ITEM element contains one each of the following: CONTENT-IDENTIFIER, PERFORMANCE-CODING, PERFORMANCE and an ISSUED-BY element. It may or may not include the following: BEGIN-DATE-TIME, END-DATE-TIME, RECEIVED-BY and a CERTIFICATE-IDENTIFIER.
CONTENT-IDENTIFIER
The CONTENT-IDENTIFIER is a code for the assignment, class etc to which this performance pertains.
SubElements: None
PERFORMANCE-CODING
The PERFORMANCE-CODING identifies the scale to be used. An example of a scale is "US-NYS-LETTER-GRADE" which means that the student are graded with grades from A-F where A is the best grade.
SubElements: None
PERFORMANCE
The PERFORMANCE element shows the actual grade or performance given to the student.
SubElements: None
ISSUED-BY
ISSUED-BY is the person or institution that has issued the performance.
SubElements: None
BEGIN-DATE-TIME
BEGIN-DATE-TIME indicates from which date and time this performance is valid.
SubElements: None
END-DATE-TIME
END-DATE-TIME indicates the expiration date of this performance if the performance is only valid for a limited time like the GRE score.
SubElements: None
RECEIVED-BY
The RECEIVED-BY element holds the name of the student for which the performance is issued.
SubElements: None
CERTIFICATE-IDENTIFIER
The CERTIFICATE-IDENTIFIER allows the performance creator to give the certificate a unique identifier.
SubElements: None
4.1.5.3.4 Notification and Navigation
Figure IMS Notification Structure
The structure of the IMS navigation markup language is shown in .
Figure IMS Navigation Structure
DOMAIN-TYPE
The DOMAIN-TYPE specifies the area that the notification or navigation is about.
SubElements: None
EVENT-TYPE
The EVENT-TYPE is usually NOTIFICATION.
SubElements: None
EVENT-NAME
The EVENT-NAME defines the name of the event. This can be assessment, navigation etc.
SubElements: None
HEADER
The HEADER specifies where to send the notification and what the subject of the notification should be.
SubElements: The HEADER element contains one of each of the following elements: TO, FROM and RE (Subject).
FILTERABLE-DATA
There is no information about the FILTERABLE-DATA in the documentation of IMS.
SubElements: The FILTERABLE-DATA contains a DATE element.
BODY
The BODY of the notification or navigation contains the actual information about the event.
SubElements: In the case of a NAVIGATION the BODY has two sub elements: SIGNPOST and STARTTIME.
In the case of a NOTIFICATION the BODY has three sub elements: NUMQUEST, NUMCORRECT and PCT-SCORE.
TO
TO specifies who should get the notification.
SubElements: None
FROM
FROM specifies who the notification is from.
SubElements: None
RE
RE specifies a subject for the notification
SubElements: None
DATE
The DATE element gives information about when the notification was created.
SubElements: None
NUMQUEST
NUMQUEST defines the number of questions that were in the assessment.
SubElements: None
NUMCORRECT
The NUMCORRECT element defines the number of the questions in the assessment that the student answered correct.
SubElements: None
PCT-SCORE
PCT-SCORE specifies how many percent of the questions in the assessment were answered right.
SubElements: None
SIGNPOST
A SIGNPOST is a action point specified by the instructor. This can be the start of the test, when a certain question is answered etc.
SubElements: None
STARTTIME
STARTTIME defines when the SIGNPOST was reached.
SubElements: None
<?xml:namespace name="http://www.ims.org/schemas/notifications/" as="notif"/>
<notif:testscore>
<domain-type>EDUCATION</domain-type>
<event-type>NOTIFICATION</domain-type>
<event-name>ASSESSMENT</event-name>
<header>
<to>DR-SCHWELLER</to>
<from>MW-GEO-TEST </from>
<re>BOB-ALCORN</re>
</header>
<filterable-data>
<date>19980528</date>
</filterable-data>
<body>
<numquest>2</numquest>
<numcorrect>1</numcorrect>
<pct-score>50</pct-score>
</body>
<notif:testscore>
Figure IMS Notification example
NAVIGATION
<?xml:namespace name="http://www.ims.org/schemas/navigation/" as="nav"/>
<nav:testscore>
<domain-type>EDUCATION</domain-type>
<event-type>NOTIFICATION</event-type>
<event-name>NAVIGATION</event-name>
<header>
<to>DR-SCHWELLER</to>
<from>MW-GEO-TEST</from>
<re>BOB-ALCORN</re>
</header>
<filterable-data>
<date>19980528</date>
</filterable-data>
<body>
<signpost>START-TEST</signpost>
<starttime>19981105T08:15:5</starttime>
</body>
<nav:testscore>
Figure IMS Navigation example
Figure The structure of a general course
The basic elements and their connections are shown in .
Most of the initiatives reviewed in section model only one of these basic parts, the assignment part. There are two reasons why they have chosen to model only the assignment part, a) assignments and questions are reusable in the sense that many different courses can use the same questions while course information and schedules are course specific and b) the initiatives reviewed in section should be used only as a complement to other course material, for creating assignments.
SATML expands the use of XML for distance learning by not only modeling the assignments but also course information, student assessments, and schedules.
The reason for doing this is that this information already exists in course development tools such as WebCT and CyberProf, and by modeling this information in XML, instructors can custom build course web sites for their students to improve the students learning experience by using simple XSL files.
There is also a second reason for modeling course information. The IMS search engines enables students all over the world to find courses saved in SATML, using the information stored in the meta data tags.
Note that all the files are optional and to use the SATML file format, tools only need to save the files that are necessary for that particular tool.
Element | Example | Description |
Title | Internet Development | A short description of the course |
Subject | Software Engineering | Topic of the course |
Learning Level |
Age=0-99 0 => N/A Skill = 0-5 0 => N/A |
The minimum age and skill of the student |
Description | This course will provide the student with an introduction to XML, HTML and Java | A more lengthy description of the course |
Keywords | XML, Internet, Java, HTML | Keywords used when the student wants to search for a course |
Language |
en-US (US English) |
The language in which most of the material for the course is written |
Identifier (Course Code) |
EEL5937 | The course identifier |
Publisher (Institution) |
Computer Engineering | The entity responsible for delivering the course materials |
Agent (Contact) |
Ron Eaglin | The entity responsible for determining the rights of the learning material |
Location (URL) |
http://engr.ucf.edu/eel5937.html | The location where you can find the course homepage |
Presentation | Text, video, projects | The format in which most of the material is presented |
Format | HTML, Word, PowerPoint, PDF, GIF, AVI etc. | The format of the documents presented in this course. This field is used to determine what software is needed to show the material. |
Element | Example | Description |
Container Type | IMS Base, Item, Module, Tool | The structure of the course |
Publication Date | 08/02/98 | The date the resource was first published |
Platform | Windows-based or Mac computer and a 14.4 or faster modem. You also need a SLIP/PPP account with an Internet service provider | The software and/or hardware required to be able to follow the course |
User Support | Yes/No | Tells if the user can get support or not |
Version | 0.00 - 1000.00 | The version number of the course as a floating point number |
Interactivity Level | High/medium/low | The level of interactivity between the user and the container |
Last Modified Date | 08/02/98 | Date when the course was last modified |
Role | University - Graduate | The role of the course |
Objectives | The objectives of the course | |
Creator* |
Fname Ron Minitial F Lname Eaglin Email reaglin... Phone 823-5248 Hours W 10-11 Hours F 1-3 |
Information about the creator(s) of the course |
Contributor* | Dr Linux E Unix | Names of other people that have helped with the development of the course |
Source | Source of documents or literature that the material for this course was taken from | |
Use Rights | Allowed/Not Allowed | User rights to this container |
Element | Example | Description |
Expiration Date | 08/07/98 | Date when this resource is outdated |
Dates | Link to schedule | Important dates for this course and a description for each date |
Grade-Limit* |
Percentage=90 Grade=A |
Percentage needed to get a specific grade |
Element | Example | Description |
Type | Homework, quiz, project, exam | Type of assignment |
Time |
Percentage=20 Interval=1 IntervalUnit=day |
The amount of points that will be deducted for late answers |
Time Limit |
Value=2 Unit=day |
Time the assignment will be available from the time it is opened |
Author |
Fname Teresa Lname Ferrandez |
The author of the assignment |
Element | Example | Description |
Constraints | Open Book | Constraints on what aids are permitted to solve the task |
Attempts | 3 | Number of attempts allowed |
Attempt Deduction |
10% | Percent deduction for each attempt |
Scoring | Avg/min/max | How the score is to be calculated based on the scores on the different attempts |
TASK | ||
Percentage | 10% | This tasks importance in the assignment. The total of all the tasks in the assignment should add up to 100% |
Content | Can be text or a link to a question | |
Grading | Automatic/manual | How the assignment will be graded |
Hint |
Text Deduction=2% |
A hint to help the student solve the task and the deduction the student gets for using the hint |
Element | Example | Description |
MULTIPLE-CHOICE | ||
Title | Question 1 | The title of the question |
Pdate | 08/02/98 | The date the question was first pulbished |
Category | Internet | The category this question belongs to. This is to make it easier to find the right questions for your quizzes |
Level? |
Age=15 Skill=2 |
The average age and skill needed to be able to answer the question |
Statement | How many headings are there in HTML code? | The question text |
MCAnswer+ | 6 | Possible answer for the question. You should have at least 2 answers to a muliple choice question |
SHORT-ANSWER | ||
Title | Question 2 | The title of the question |
Pdate | 08/02/98 | The date the question was first pulbished |
Category | Internet | The category this question belongs to. This is to make it easier to find the right questions for your quizzes |
Level? |
Age=15 Skill=2 |
The average age and skill needed to be able to answer the question |
Statement | How many headings are there in HTML code? | The question text |
SAAnswer* | Six | Possible answer to the short answer question |
Element | Example | Description |
CALCULATED | ||
Title | Question 3 | The title of the question |
Pdate | 08/02/98 | The date the question was first published |
Category | Physics | The category this question belongs to. |
Level? |
Age=15 Skill=1 |
The average age and skill needed to be able to answer the question. |
Statement | If a car goes {x} miles in {y} hours, how many miles per hour does the car go? | The question text. The variables {x} and {y} will be replaced by actual numbers when the question is displayed |
Formula | {x}/{y} | The formula used to calculate the right answer |
Variable+ |
X Y |
The variables used for this question |
Canswer | --- | Data about the answer of the question |
Unit | Miles/hour | The unit of the answer |
MATCHQUESTION | ||
Title | Question 4 | The title of the question |
Pdate | 08/02/98 | The date the question was first published |
Category | Comics | The category this question belongs to. |
Level? |
Age=5 Skill=2 |
The average age and skill needed to be able to answer the question |
Statement | Match the following Disney characters with their last names | The question text |
MatchElement+ |
Donald - Duck Minnie - Mouse Mortimer - Goose Mickey - Mouse |
The statement and the match that corresponds to that statement. |
Element | Example | Description |
METADATA | ||
Fname | Teresa | The name of the student to which this assessment applies. |
Minitial? | E | The middle initial of the student. |
Lname | Ferrandez | The last name of the student. |
SSN? | 123-45-6789 | The student id number given to the student (or other identification) |
Course | EEL5937 | Course identifier to which this assessment pertains |
ASSIGNMENT* | ||
Task | Link to assignment | |
Performance | 100 | Percentage of the possible score on this assignment |
Element | Example | Description |
TOTAL-GRADE | ||
Performance-coding | A-F | A code telling which grades can be given |
Performance | A | The actual grade that was given to the student |
Publication-date | 08/02/98 | The date this grade was published |
Expiration-date? | 08/02/00 | The date this grade expires |
Element | Example | Description |
Course | EEL5937 | Course identifier to which this assessment pertains |
ASSIGNMENT* | ||
Title | HTML - Assignment1 | Title or brief description of the assignment. |
Content | Assignment1.sml | A reference to a file containing the assignment. |
Given-Date | 12 May, 1998 | The date the assignment was given. |
Due-Date | 19 May, 1998 | The date the assignment is due. |
Weight | 1 | The number of percent of the total grade that this assignment is worth. |
|
||
Element | Example | Description |
MATERIAL* | A reference to material (books, articles, web sites) used in this course. | |
Title | Core Java 1.1 - Fundamentals | The title of the material. |
Content | ISBN="0-13-766965-8" | ISBN or reference to the material. |
Author+ | Cay S. Hortsmann | The author of the material. |
LECTURE* | Information about the course lectures. | |
Title | Introduction to the Internet | A short description of the lecture |
Location | ENGR124 | Room or URL where the lecture will be held |
Date | 12 May, 1998 | The date the lecture will be held |
Time | 10.00 am | The time the lecture will be held |
Duration | 120 | The duration of the lecture in minutes. |
DEADLINE* | ||
Title | Initial Project Concepts due | A short description of the deadline |
Date | 4 Jun, 1998 | The date of the deadline. |
Questions filename database [category]
Filename is the path of the file to which the questions in the database should be saved. If the path does not exist, an error message is generated.
Database refers to the name of a JDBC:ODBC connection for the database where the questions that the user wants to restore are saved. The application will generate an error message if the database connection does not exist or if the database is not of the correct format.
Category is an optional parameter, limiting the number of questions to be retrieved. If a category is provided, the application only retrieves questions of this particular category.
If any of the parameters filename or database are not given, the application will display application help.
Test case number: 2
Description: Create a SATML question file. File 1 shall contain one question of each type with the category set to HTML. File 2 shall contain six questions (two mc, two match, one c and one sa) of different categories.
Test reason: To verify that SATML can store multiple-choice, mathing, short answer and calculated questions as specified.
Predicted results: SATML can model all of the above question types.
Test case number: 3
Description: Save the question files created in test case 2 into a SATML database using SaveQuestions.
Test reason: To verify that SaveQuestions can save the question types that can be modeled by the SATML language.
Predicted results: The questions will be saved in the question table of the SATML database.
Test case number: 4
Description: Restore all the questions saved in test case 3 from the database using Questions with no category information.
Test reason: To verify that the Questions application can retrieve question information from a SATML database and that all the questions stored in the database will be retrieved if no category information is provided.
Predicted results: All the questions stored in the database will be retrieved and written to the SATML file provided by the user.
Test case number: 5
Description: Restore all the questions saved in test 3 with the category HTML.
Test reason: To verify that the Questions application restores only the question with the category set to HTML.
Predicted results: The Questions application restores the questions from the HTML category.
Test case number: 6
Description: Call the application SaveQuestions with only one parameter.
Test reason: To verify that SaveQuestions doesn't generate errors, when to few parameters are given.
Predicted results: Help for the SaveQuestions application should be shown.
Test case number: 7
Description: Call the application Questions with only one parameter.
Test reason: To verify that Questions doesn't generate errors, when to few parameters are given.
Predicted results: Help for the Questions application should be shown.
Test case number: 8
Description: Call SaveQuestions with an erroneous question file.
Test reason: To verify that SaveQuestions can handle erroneous input.
Predicted results: A message will appear stating why the file is erroneous.
Test case number: 9
Description: Call SaveQuestions with the path to a question file that doesn't exist.
Test reason: To verify that SaveQuestions can handle erroneous input.
Predicted results: A message will appear stating that the file does not exist.
Test case number: 10
Description: Call SaveQuestions with an erroneous database.
Test reason: To verify that SaveQuestions can handle erroneous input.
Predicted results: A message will appear stating that the database is erroneous.
Test case number: 11
Description: Call SaveQuestions with a database that does not exist.
Test reason: To verify that SaveQuestions can handle erroneous input.
Predicted results: A message will appear stating that the database does not exist.
Test case number: 12
Description: Call Questions with an erroneous file path.
Test reason: To verify that Questions can handle erroneous input.
Predicted results: A message will appear stating that the file path is not valid.
Test case number: 13
Description: Call Questions with an erroneous database.
Test reason: To verify that Questions can handle erroneous input.
Predicted results: A message will appear stating that the database is erroneous.
Test case number: 14
Description: Call Questions with a database that does not exist.
Test reason: To verify that Questions can handle erroneous input.
Predicted results: A message will appear stating that the database does not exist.
Test case number: 15
Description: Call Questions with a category that is not in the database.
Test reason: To verify that this scenario does not generate an error.
Predicted results: The Questions application shall generate a question file without questions.
Test case number: 2
Obtained results: The files were successfully created and all the specified question types could be modeled.
Test case number: 3
Obtained results: All the questions were successfully saved in the SATML database.
Test case number: 4
Obtained results: All the questions stored in the database were successfully retrieved and written to the specified file.
Test case number: 5
Obtained results: Only the questions from the HTML category were retrieved.
Test case number: 6
Obtained results: The help for the SaveQuestions application was shown.
Test case number: 7
Obtained results: The help for the Questions application was shown.
Test case number: 8
Obtained results: An HTML file was sent to the application instead of a question file and the application returned an error message stating that this was not a question file.
Test case number: 9
Obtained results: The application returned an error message stating that the file did not exist.
Test case number: 10
Obtained results: The application returned an error message stating that the database was of the wrong format.
Test case number: 11
Obtained results: The application returned an error message stating that the database did not exist.
Test case number: 12
Obtained results: The application returned an error message stating that the file path was wrong.
Test case number: 13
Obtained results: The application returned an error message stating that the database was of the wrong format.
Test case number: 14
Obtained results: The application returned an error message stating that the database did not exist.
Test case number: 14
Obtained results: The application generated a file without questions.
<?xml encoding="US-ASCII"?>
<!ELEMENT COURSEMETADATA (TITLE, SUBJECT, LEVEL, DESCRIPTION, KEYWORD*,
LANGUAGE, IDENTIFIER, PUBLISHER, AGENT, LOCATION, PRESENTATION?,
FORMAT?, CONTAINERTYPE?, PUBLICATIONDATE,
PLATFORM?, USERSUPPORT?, USETIME?, VERSION, INTERACTIVITYLEVEL,
LASTMODIFIEDDATE, ROLE, OBJECTIVITIES, CREATOR*, CONTRIBUTOR?,
SOURCE, USERIGHTS, EXPIRATIONDATE, DATES, GRADELIMIT*)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT SUBJECT (#PCDATA)>
<!ELEMENT LEVEL EMPTY>
<!ATTLIST LEVEL
AGE CDATA #IMPLIED
SKILL CDATA #IMPLIED>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ELEMENT KEYWORD (#PCDATA)>
<!ELEMENT LANGUAGE (#PCDATA)>
<!ELEMENT IDENTIFIER (#PCDATA)>
<!ELEMENT PUBLISHER (#PCDATA)>
<!ELEMENT AGENT (#PCDATA)>
<!ELEMENT LOCATION EMPTY>
<!ATTLIST LOCATION
REF CDATA #REQUIRED>
<!ELEMENT PRESENTATION (#PCDATA)>
<!ELEMENT FORMAT (#PCDATA)>
<!ELEMENT RESOURCETYPE (#PCDATA)>
<!ELEMENT CONTAINERTYPE (#PCDATA)>
<!ELEMENT PUBLICATIONDATE EMPTY>
<!ATTLIST PUBLICATIONDATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
<!ELEMENT PLATFORM (#PCDATA)>
<!ELEMENT USERSUPPORT (#PCDATA)>
<!ELEMENT VERSION (#PCDATA)>
<!ELEMENT INTERACTIVITYLEVEL (#PCDATA)>
<!ELEMENT LASTMODIFIEDDATE EMPTY>
<!ATTLIST LASTMODIFIEDDATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
<!ELEMENT ROLE (#PCDATA)>
<!ELEMENT OBJECTIVES (#PCDATA)>
<!ELEMENT CREATOR (FNAME, MINITIAL?, LNAME, EMAIL?, PHONE? HOURS*)>
<!ELEMENT FNAME (#PCDATA)>
<!ELEMENT MINITIAL (#PCDATA)>
<!ELEMENT LNAME (#PCDATA)>
<!ELEMENT EMAIL (#PCDATA)>
<!ELEMENT PHONE EMPTY>
<!ATTLIST PHONE
AREACODE CDATA #REQUIRED
PHONENUMBER CDATA #REQUIRED>
<!ELEMENT HOURS EMPTY>
<!ATTLIST HOURS
DAY CDATA #REQUIRED
FROM CDATA #REQUIRED
TO CDATA #REQUIRED>
<!ELEMENT CONTRIBUTOR (#PCDATA)>
<!ELEMENT SOURCE (#PCDATA)>
<!ELEMENT USERIGHTS EMPTY>
<!ATTLIST USERIGHTS
PERMISSION (restricted|use|aggregatable|disaggregatable|distributable|editable)
"restricted">
<!ELEMENT EXPIRATIONDATE EMPTY>
<!ATTLIST EXPIRATIONDATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
<!ELEMENT DATES EMPTY>
<!ATTLIST DATES
REF CDATA #REQUIRED>
<!ELEMENT GRADELIMIT EMPTY>
<!ATTLIST GRADELIMIT
PERCENTAGE CDATA #REQUIRED
GRADE CDATA #REQUIRED>
<?xml encoding="US-ASCII"?>
<!ELEMENT SCHEDULE (COURSE, ASSIGNMENT*, MATERIAL*, LECTURE*, DEADLINE*)>
<!ELEMENT COURSE (#PCDATA)>
<!ELEMENT ASSIGNMENT (TITLE, CONTENT, GIVEN-DATE, DUE-DATE, WEIGHT)>
<!ELEMENT MATERIAL (TITLE, CONTENT, AUTHOR+)>
<!ELEMENT LECTURE (TITLE, LOCATION, DATE, TIME, DURATION, GUEST-LECTURER?)>
<!ELEMENT DEADLINE (TITLE, DATE)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT CONTENT EMPTY>
<!ELEMENT GIVEN-DATE EMPTY>
<!ELEMENT DUE-DATE EMPTY>
<!ELEMENT WEIGHT (#PCDATA)>
<!ELEMENT AUTHOR (#PCDATA)>
<!ELEMENT LOCATION (#PCDATA)>
<!ELEMENT DATE EMPTY>
<!ELEMENT TIME EMPTY>
<!ELEMENT DURATION EMPTY>
<!ELEMENT GUEST-LECTURER (#PCDATA)>
<!ATTLIST COURSE
REF CDATA #REQUIRED>
<!ATTLIST CONTENT
REF CDATA #IMPLIED
ISBN CDATA #IMPLIED>
<!ATTLIST GIVEN-DATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
<!ATTLIST DUE-DATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
<!ATTLIST DATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
<!ATTLIST TIME
HOUR CDATA #REQUIRED
MIN CDATA #REQUIRED
AM-PM (AM|PM) "AM">
33
ASSIGNMENT DTD
<?xml encoding="US-ASCII"?>
<!ELEMENT ASSIGNMENT (TYPE, TIME-DEDUCTION, TIME-LIMIT, AUTHOR, CONSTRAINTS,
ATTEMPTS, ATTEMPT-DEDUCTION, SCORING, TASK+)>
<!ELEMENT TYPE (#PCDATA)>
<!ELEMENT TIME-DEDUCTION EMPTY>
<!ELEMENT TIME-LIMIT EMPTY>
<!ELEMENT AUTHOR (FNAME, MINITIAL, LNAME)>
<!ELEMENT FNAME (#PCDATA)>
<!ELEMENT MINITIAL (#PCDATA)>
<!ELEMENT LNAME (#PCDATA)>
<!ELEMENT CONSTRAINTS (#PCDATA)>
<!ELEMENT ATTEMPTS (#PCDATA)>
<!ELEMENT ATTEMPT-DEDUCTION (#PCDATA)>
<!ELEMENT SCORING (#PCDATA)>
<!ELEMENT TASK (PERCENTAGE, CONTENT, GRADING, HINT*, ACTION*)>
<!ELEMENT PERCENTAGE (#PCDATA)>
<!ELEMENT CONTENT (#PCDATA)>
<!ELEMENT GRADING (#PCDATA)>
<!ELEMENT HINT (#PCDATA)>
<!ELEMENT ACTION EMPTY>
<!ATTLIST TIME-DEDUCTION
PERIOD CDATA #IMPLIED
UNIT (min|hour|day|week|late) "late"
PERCENT CDATA #IMPLIED>
<!ATTLIST TIME-LIMIT
VALUE CDATA #IMPLIED
UNIT (min|hour|day|week) "day">
<!ATTLIST CONTENT
REF CDATA #IMPLIED>
<!ATTLIST HINT
DEDUCTION CDATA #IMPLIED>
<!ACTION
WHEN (correct|incorrect) "correct"
TYPE (task|comment) "task"
CONTENT CDATA #REQUIRED>
34
QUESTION DTD
<?xml encoding="US-ASCII"?>
<!ELEMENT QUESTIONS (MCQUESTION*, SAQUESTION*, CQUESTION*, MATCHQUESTION*)*>
<!-- Multiple choice question -->
<!ELEMENT MCQUESTION (ID, TITLE, PDATE, CATEGORY, LEVEL?,
STATEMENT, MCANSWER+)>
<!-- Short Answer question -->
<!ELEMENT SAQUESTION (ID, TITLE, PDATE, CATEGORY, LEVEL?,
STATEMENT, SAANSWER+)>
<!-- Calculated question -->
<!ELEMENT CQUESTION (ID, TITLE, PDATE, CATEGORY, LEVEL?,
STATEMENT, FORMULA, VARIABLE+,
CANSWER, UNIT?)>
<!-- Match question -->
<!ELEMENT MATCHQUESTION (ID, TITLE, PDATE, CATEGORY, LEVEL?,
STATEMENT, MATCHELEMENT+)>
<!-- Common parts -->
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT PDATE EMPTY>
<!ELEMENT CATEGORY (#PCDATA)>
<!ELEMENT LEVEL EMPTY>
<!ELEMENT STATEMENT (#PCDATA)>
<!ELEMENT VERSION (#PCDATA)>
<!ELEMENT ID (#PCDATA)>
<!-- Specific parts -->
<!ELEMENT MCANSWER (ANSWERTEXT, FEEDBACK?)>
<!ELEMENT SAANSWER (ANSWERTEXT, FEEDBACK?)>
<!ELEMENT FORMULA (#PCDATA)>
<!ELEMENT VARIABLE EMPTY>
<!ELEMENT CANSWER EMPTY>
<!ELEMENT UNIT EMPTY>
<!ELEMENT MATCHELEMENT (LEFTCOLUMNMATCH, RIGHTCOLUMNMATCH)>
<!ELEMENT LEFTCOLUMNMATCH (#PCDATA)>
<!ELEMENT RIGHTCOLUMNMATCH (#PCDATA)>
<!-- Attributes -->
<!ATTLIST MCQUESTION
MULTIPLE_SELECTION (yes | no) "no"
ANSWER_LAYOUT (horizontal | vertical) "vertical">
<!ATTLIST SAQUESTION
NUMBER_OF_ANSWER_BOXES CDATA #IMPLIED>
<!ATTLIST MATCHQUESTION
LEFT_COLUMN_TYPE (short | long) "long"
RIGHT_COLUMN_TYPE (short | long) "long"
MARKING_SCHEME (eq_weighted | all_nothing | right_less_wrong) "eq_weighted"
COLUMN_PREVIEW (yes | no) "yes">
<!ATTLIST PDATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
<!ATTLIST LEVEL
AGE CDATA #REQUIRED
SKILL CDATA #REQUIRED>
<!ATTLIST MCANSWER
CORRECTNESS CDATA #IMPLIED>
<!ATTLIST SAANSWER
CORRECTNESS CDATA #IMPLIED
ALLOW_TO_ANSWER_IN_BOX CDATA #REQUIRED>
<!ATTLIST VARIABLE
NAME CDATA #REQUIRED
MIN CDATA #REQUIRED
MAX CDATA #REQUIRED
DEC CDATA #REQUIRED>
<!ATTLIST CANSWER
ANSWER-FORMAT (decimals|significant-figures) "decimals"
ANSWER-FORMAT-VALUE CDATA #IMPLIED
TOLERANCE CDATA #IMPLIED
TOLERANCE_TYPE (percent | units) "percent">
<!ATTLIST UNIT
IMPORTANCE CDATA #REQUIRED
NAME CDATA #REQUIRED
REQ (yes | no) "no"
UNIT_SPACE (yes | no) "no"
UNIT_CASE (yes | no) "no">
35
ASSESSMENT DTD
<?xml encoding="US-ASCII"?>
<!ELEMENT ASSESSMENT (FNAME, MINITIAL?, LNAME, SSN?, COURSE,
ASSIGNMENT*)>
<!ELEMENT ASSIGNMENT (TASK, PERFORMANCE)>
<!ELEMENT TASK (#PCDATA)>
<!ATTLIST TASK
REF CDATA #IMPLIED>
<!ELEMENT PERFORMANCE (#PCDATA)>
<!ELEMENT TOTALGRADE (PERFORMANCECODING, GRADE, PUBLICATIONDATE,
EXPIRATIONDATE?)>
<!ELEMENT PERFORMANCECODING (#PCDATA)>
<!ELEMENT GRADE (#PCDATA)>
<!ELEMENT PUBLICATIONDATE EMPTY>
<!ATTLIST PUBLICATIONDATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
<!ELEMENT EXPIRATIONDATE EMPTY>
<!ATTLIST EXPIRATIONDATE
DAY CDATA #REQUIRED
MONTH CDATA #REQUIRED
YEAR CDATA #REQUIRED>
public class SaveQuestions{
static final String parserClass = "com.microstar.xml.SAXDriver";
public static void main(String args[]){
//variables
Vector questionVector, statementVector, tempVector;
QuestionStatement q = new QuestionStatement(0);
Connection con = null;
Element tempElement, questionElement;
int i;
boolean b;
String name;
//check arguments
if (args.length < 2)
System.out.println("Syntax: SaveQuestions fileURL DBAlias");
//parse xml file
try{
Parser parser = ParserFactory.makeParser(parserClass);
MyHandler handler = new MyHandler();
parser.setDocumentHandler(handler);
parser.parse(args[0]);
//get the root vector and traverse it's children to get a vector with questions
tempElement = handler.getRoot();
//get it's children to se if it is a QUESTION file
tempVector = tempElement.getChildren();
tempElement = (Element)tempVector.elementAt(0);
name = tempElement.getName();
if (name.compareTo("QUESTIONS") != 0){
System.out.println("Error: " + args[0] + " is not a question file");
System.out.println("the root element is " + name);
return;
}
//walk through the tree and get information
questionVector = tempElement.getChildren();
//set up the database
try{
//set up the driver and the database to use
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String url = "jdbc:odbc:" + args[1];
con = DriverManager.getConnection(url, "", "");
//Get the next available Question ID
Statement select = con.createStatement();
ResultSet result = select.executeQuery("SELECT max(Question_ID) FROM Questions AS max_id");
int id = 0;
while(result.next())
id = result.getInt(1);
//close this statement
select.close();
//Get the next available Answer ID
Statement ansIDSelect = con.createStatement();
ResultSet ansIDResult = ansIDSelect.executeQuery("SELECT max(Answer_ID) FROM Answers AS max_id");
ReturnInt answer_id = new ReturnInt(0);
while(ansIDResult.next())
answer_id.setVal(ansIDResult.getInt(1));
//close this statement
ansIDSelect.close();
statementVector = new Vector();
//get the statements to insert in the database
for(i = 0; i < questionVector.size(); i++){
questionElement = (Element)questionVector.elementAt(i);
q = new QuestionStatement(1);
b = q.createStatements(questionElement, con, ++id, answer_id);
if (b)
statementVector.addElement(q);
}
//insert the statements into the database
b = dbInsert(statementVector, con);
}
catch(Exception e){
if(con != null){
try{ con.rollback();}
catch(SQLException sexc){}
}
e.printStackTrace();
}
finally{
try{
//close the database
con.close();
}
catch(SQLException e){
e.printStackTrace();
}
}
}
catch(SAXParseException e){
System.out.println("Error occured on line " + e.getLineNumber() + " of file " + args[0]);
System.out.println(e.getMessage());
}
catch(Exception e){
System.out.println("Error: unable to read or parse " + args[0]);
}
}
static boolean dbInsert(Vector statements, Connection con){
QuestionStatement q;
Vector v = new Vector();
int i, j, insertCount, answerCount;
for(i = 0; i < statements.size(); i++){
try{
Statement qInsert = con.createStatement();
q = (QuestionStatement)statements.elementAt(i);
insertCount = qInsert.executeUpdate(q.getQuestion());
qInsert.close();
}
catch(Exception e){
e.printStackTrace();
return false;
}
v = q.getAnswerStatements();
for (j = 0; j < v.size(); j++){
try{
Statement aInsert = con.createStatement();
answerCount = aInsert.executeUpdate((String)v.elementAt(j));
aInsert.close();
}
catch(Exception e){
e.printStackTrace();
return false;
}
}
//cquestion
if (q.getType() == 3){
try{
Statement fInsert = con.createStatement();
answerCount = fInsert.executeUpdate(q.getFormula());
fInsert.close();
}
catch(Exception e){
e.printStackTrace();
return false;
}
}
}
return true;
}
}
38
MYHANDLER.JAVA
import org.xml.sax.HandlerBase;
import org.xml.sax.AttributeList;
public class MyHandler extends HandlerBase {
public Element root;
Element currentElement;
public void startDocument(){
currentElement = new Element("root", " ", null, null);
root = currentElement;
}
public Element getRoot(){
return root;
}
public void startElement (String name, AttributeList atts)
{
Element e = new Element(name, "", atts);
currentElement.addChild(e);
currentElement = e;
}
public void endElement (String name)
{
currentElement = currentElement.getParent();
}
public void characters (char ch[], int start, int length){
String val = new String(ch, start, length);
currentElement.setValue(val);
}
public void endDocument(){
// root.print(0);
}
}
39
ELEMENT.JAVA
import java.util.*;
import org.xml.sax.*;
import org.xml.sax.helpers.*;
class Element extends java.lang.Object{
private Element parent;
private Vector subElements;
String name;
String value;
AttributeList atts;
public Element(String n, String v, AttributeList a, Element p){
name = n;
value = v;
if(a != null)
atts = new AttributeListImpl(a);
else
atts = new AttributeListImpl();
parent = p;
subElements = new Vector();
}
public Element(String n, String v, AttributeList a){
name = n;
value = v;
if(a != null)
atts = new AttributeListImpl(a);
else
atts = new AttributeListImpl();
parent = null;
subElements = new Vector();
}
public boolean hasChildren(){
if(subElements.size() != 0)
return true;
else
return false;
}
public void setParent(Element p){
parent = p;
}
public Element getParent(){
return parent;
}
public void addChild(Element e){
e.setParent(this);
subElements.addElement(e);
}
public Vector getChildren(){
return subElements;
}
public void setName(String n){
name = n;
}
public String getName(){
return name;
}
public void setValue(String v){
value = v;
}
public String getValue(){
return value;
}
public void setAttributes(AttributeList a) {
atts = a;
}
public AttributeList getAttributes() {
return atts;
}
public void printAtts(int n){
int i, j;
if(atts != null){
for(j = 0; j < atts.getLength(); j++){
for(i = 0; i < n; i++)
System.out.print(" ");
System.out.println("--- Attribute ----------");
for(i = 0; i < n; i++)
System.out.print(" ");
System.out.println("Name = " + atts.getName(j));
for(i = 0; i < n; i++)
System.out.print(" ");
System.out.println("Value = " + atts.getValue(j));
for(i = 0; i < n; i++)
System.out.print(" ");
System.out.println("Type = " + atts.getType(j));
for(i = 0; i < n; i++)
System.out.print(" ");
System.out.println("------------------------");
}
}
}
public void print(int n){
int i, j;
for(i = 0; i < n; i++)
System.out.print(" ");
System.out.println("Name = " + name);
for(i = 0; i < n; i++)
System.out.print(" ");
System.out.println("Value = " + value);
if(atts != null){
if(atts.getLength() == 0){
for(i = 0; i < n; i++)
System.out.print(" ");
System.out.println("No attributes");
}
else
printAtts(n);
}
for(j = 0; j < subElements.size(); j++){
Element e = (Element)subElements.elementAt(j);
e.print(n+2);
}
}
}
40
QUESTIONS.JAVA
import java.net.*;
import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
public class Questions{
public static void main(String args[]){
String fileName;
String dbURL;
int j;
char c;
//get the command line parameters
//no args, print help
if (args.length <= 1){
help();
return;
}
else{
fileName = args[0];
dbURL = "jdbc:odbc:" + args[1];
if (args.length == 2)
System.out.println("Trying to retreive all questions");
if (args.length >= 3)
System.out.println("Trying to retreive all questions from the category: " + args[2]);
String months[] = {"jan", "feb", "mar", "apr",
"may", "jun", "jul", "aug",
"sep", "oct", "nov", "dec"};
FileWriter fw;
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(Exception e){
System.out.println("Failed to load mSQL driver");
return;
}
try{
fw = new FileWriter(fileName);
Connection con = DriverManager.getConnection(dbURL, "", "");
Statement select = con.createStatement();
//if the user chose to provide a category, select only the questions from that category
ResultSet result;
if (args.length == 3)
result = select.executeQuery("SELECT * FROM Questions WHERE category='" + args[2] + "'");
else
result = select.executeQuery("SELECT * FROM Questions");
System.out.println("Getting results");
fw.write("<QUESTIONS>", 0, 11);
fw.write("\n");
while(result.next()){
String id = result.getString("Question_ID");
//get the question type
String type = result.getString("Type");
String question = type.concat("QUESTION");
fw.write(" <", 0, 2);
//Get the questiontypes and it's corresponding question attributes
//MCQUESTION
if (type.compareTo("MC") == 0){
boolean boolAtt = result.getBoolean("Multiple_Selection");
if (boolAtt)
question = question + " MULTIPLE_SELECTION=\"yes\"";
else
question = question + " MULTIPLE_SELECTION=\"no\"";
String att = result.getString("Answer_layout");
if (att != null)
question = question + " ANSWER_LAYOUT=\"" + att + "\"";
}
//SAQUESTION
if (type.compareTo("SA") == 0){
int att = result.getInt("Number_of_answer_boxes");
question = question + " NUMBER_OF_ANSWER_BOXES=\"" + att + "\"";
}
//MATCHQUESTION
if (type.compareTo("MATCH") == 0){
String att = result.getString("Left_column_type");
if (att != null)
question = question + " LEFT_COLUMN_TYPE=\"" + att + "\"";
att = result.getString("Right_column_type");
if (att != null)
question = question + " RIGHT_COLUMN_TYPE=\"" + att + "\"";
att = result.getString("Marking_scheme");
if (att != null)
question = question + " MARKING_SCHEME=\"" + att + "\"";
boolean boolAtt = result.getBoolean("Column_preview");
if (boolAtt)
question = question + " COLUMN_PREVIEW=\"yes\"";
else
question = question + " COLUMN_PREVIEW=\"no\"";
}
fw.write(question, 0, question.length());
fw.write(">");
fw.write("\n");
//get the title
String s = result.getString("Title");
fw.write(" <TITLE>", 0, 9);
fw.write(s, 0, s.length());
fw.write("</TITLE>", 0, 8);
fw.write("\n");
//get the date
java.sql.Date d = result.getDate("Pdate");
int day = d.getDay()+1;
String month = months[d.getMonth()];
int year = d.getYear();
s = " <PUBLICATION_DATE DAY=\"" + day + "\" MONTH=\"" + month + "\" YEAR=\"" + year + "\" />";
fw.write(s, 0, s.length());
fw.write("\n");
//get the category
s = result.getString("Category");
fw.write(" <CATEGORY>", 0, 12);
fw.write(s, 0, s.length());
fw.write("</CATEGORY>", 0, 11);
fw.write("\n");
//get learning age and learning level
int age = result.getInt("Age");
int level = result.getInt("Level");
s = " <LEVEL AGE=\"" + age + "\" SKILL=\"" + level + "\" />";
fw.write(s, 0, s.length());
fw.write("\n");
//get the question statement
s = result.getString("Statement");
fw.write(" <STATEMENT>", 0, 13);
fw.write("\n");
s = " " + s;
fw.write(s, 0, s.length());
fw.write("\n");
fw.write(" </STATEMENT>", 0, 14);
fw.write("\n");
Connection conAnswers = DriverManager.getConnection(dbURL, "", "");
Statement selectAnswers = conAnswers.createStatement();
ResultSet resultAnswers = selectAnswers.executeQuery("SELECT * from Answers where Question_ID=" + id);
//get the answer depending on the question type
//MCQUESTION
while(resultAnswers.next()){
if (type.compareTo("MC") == 0){
fw.write(" <MCANSWER", 0, 11);
int correct = resultAnswers.getInt("Correctness");
s = " CORRECTNESS=\"" + correct + "\">";
fw.write(s, 0, s.length());
fw.write("\n");
fw.write(" <ANSWERTEXT>", 0, 15);
fw.write("\n");
s = resultAnswers.getString("Answer_text");
fw.write(" " + s, 0, s.length() + 4);
fw.write("\n");
fw.write(" </ANSWERTEXT>", 0, 16);
s = resultAnswers.getString("Feedback");
if (s != null){
fw.write("\n");
fw.write(" <FEEDBACK>", 0, 13);
fw.write("\n");
fw.write(" " + s, 0, s.length() + 4);
fw.write("\n");
fw.write(" </FEEDBACK>", 0, 14);
}
fw.write("\n");
fw.write(" </MCANSWER>", 0, 13);
fw.write("\n");
}
//SAQUESTION
if (type.compareTo("SA") == 0){
fw.write(" <SAANSWER", 0, 11);
int correct = resultAnswers.getInt("Correctness");
s = " CORRECTNESS=\"" + correct + "\"";
fw.write(s, 0, s.length());
s = resultAnswers.getString("Allow_to_answer_in_box");
if (s != null)
s = " ALLOW_TO_ANSWER_IN_BOX=\"" + s + "\">";
else
s = ">";
fw.write(s, 0, s.length());
fw.write("\n");
fw.write(" <ANSWERTEXT>", 0, 15);
fw.write("\n");
s = resultAnswers.getString("Answer_text");
fw.write(" " + s, 0, s.length() + 4);
fw.write("\n");
fw.write(" </ANSWERTEXT>", 0, 16);
s = resultAnswers.getString("Feedback");
if (s != null){
fw.write("\n");
fw.write(" <FEEDBACK>", 0, 13);
fw.write("\n");
fw.write(" " + s, 0, s.length() + 4);
fw.write("\n");
fw.write(" </FEEDBACK>", 0, 14);
}
fw.write("\n");
fw.write(" </SAANSWER>", 0, 13);
fw.write("\n");
}
//MATCHQUESTION
if (type.compareTo("MATCH") == 0){
fw.write(" <MATCHELEMENT>", 0, 16);
fw.write("\n");
fw.write(" <LEFTCOLUMNMATCH>", 0, 20);
fw.write("\n");
s = resultAnswers.getString("Left_column_content");
s = " " + s;
fw.write(s, 0, s.length());
fw.write("\n");
fw.write(" </LEFTCOLUMNMATCH>", 0, 21);
fw.write("\n");
fw.write(" <RIGHTCOLUMNMATCH>", 0, 21);
fw.write("\n");
s = resultAnswers.getString("Right_column_content");
s = " " + s;
fw.write(s, 0, s.length());
fw.write("\n");
fw.write(" </RIGHTCOLUMNMATCH>", 0, 22);
fw.write("\n");
fw.write(" </MATCHELEMENT>", 0, 17);
fw.write("\n");
}
//CQUESTION
if (type.compareTo("C") == 0){
s = result.getString("Formula");
if (s != null){
fw.write(" <FORMULA>", 0, 11);
fw.write("\n");
s = " " + s;
fw.write(s, 0, s.length());
fw.write("\n");
fw.write(" </FORMULA>", 0, 12);
fw.write("\n");
}
Connection conVars = DriverManager.getConnection(dbURL, "", "");
Statement selectVars = conVars.createStatement();
ResultSet resultVars = selectVars.executeQuery("SELECT * from Formula_info where Question_ID=" + id);
while (resultVars.next()){
String varString = "<VARIABLE ";
s = resultVars.getString("Var_name");
if (s != null)
varString = "NAME=\"" + s + "\"";
int i = resultVars.getInt("Max_var_value");
varString = "MAX=\"" + i + "\"";
i = resultVars.getInt("Min_var_value");
varString = "MIN=\"" + i + "\"";
s = resultVars.getString("Var_dec");
if (s != null)
varString = "DEC=\"" + s + "\" />\n";
fw.write(s, 0, s.length());
}
fw.write(" <CANSWER", 0, 10);
s = resultAnswers.getString("Answer_format");
s = " ANSWER_FORMAT=\"" + s + "\"";
fw.write(s, 0, s.length());
int i = resultAnswers.getInt("Answer_format_value");
s = " ANSWER_FORMAT_VALUE=\"" + i + "\"";
fw.write(s, 0, s.length());
i = resultAnswers.getInt("Tolerance");
s = " TOLERANCE=\"" + i + "\"";
fw.write(s, 0, s.length());
s = resultAnswers.getString("Tolerance_type");
s = " TOLERANCE_TYPE=\"" + s + "\"/>";
fw.write(s, 0, s.length());
fw.write("\n");
fw.write(" <UNIT", 0, 7);
i = result.getInt("Unit_importance");
s = " IMPORTANCE=\"" + i + "\"";
fw.write(s, 0, s.length());
s = resultAnswers.getString("Unit_name");
s = " NAME=\"" + s + "\"";
fw.write(s, 0, s.length());
boolean boolAtt = result.getBoolean("Unit_req");
if (boolAtt)
s = " REQ=\"yes\"";
else
s = " REQ=\"no\"";
boolAtt = result.getBoolean("Unit_space");
if (boolAtt)
s = s + " UNIT_SPACE=\"yes\"";
else
s = s + " UNIT_SPACE=\"no\"";
boolAtt = result.getBoolean("Unit_case");
if (boolAtt)
s = s + " UNIT_CASE=\"yes\"";
else
s = s + " UNIT_CASE=\"no\"";
s = s + "/>";
fw.write(s, 0, s.length());
fw.write("\n");
}
}
//closing statement for the type
fw.write(" </", 0, 3);
fw.write(type + "QUESTION", 0, type.length() + 8);
fw.write(">");
fw.write("\n");
}
fw.write("</QUESTIONS>", 0, 12);
fw.write("\n");
fw.close();
select.close();
con.close();
}
catch(SQLException e1){
System.out.println("Unable to retreive data");
System.out.println("The database you provided does not exist or is of the wrong format");
}
catch(IOException e2){
System.out.println("Unable to write to the file");
System.out.println("The filepath you provided does not exist");
}
catch(Exception e3){
System.out.println("Unable to retreive data");
System.out.println("Unknown error");
}
}
}
static void help(){
System.out.println();
System.out.println("Questions Converts the questions in the db to XML");
System.out.println("--------------------------------------------");
System.out.println("Syntax: Questions filepath dbpath [category]");
System.out.println("--------------------------------------------");
}
}
<?XML VERSION="1.0"?>
<!DOCTYPE NAME "QUESTIONS" URL "schedule.dtd">
<SCHEDULE>
<COURSE REF="http://hagar.engr.ucf.edu/eel5937.rdf">EEL5937</COURSE>
<ASSIGNMENT>
<TITLE>HTML - Assignment 1</TITLE>
<CONTENT REF="Assignment1.asg"/>
<GIVEN-DATE DAY="12" MONTH="may" YEAR="1998"/>
<DUE-DATE DAY="19" MONTH="may" YEAR="1998"/>
<WEIGHT>1</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Java - Assignment 2</TITLE>
<CONTENT REF="Assignment2.asg"/>
<GIVEN-DATE DAY="19" MONTH="may" YEAR="1998"/>
<DUE-DATE DAY="26" MONTH="may" YEAR="1998"/>
<WEIGHT>1</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>XML - Assignment 3</TITLE>
<CONTENT REF="Assignment3.asg"/>
<GIVEN-DATE DAY="26" MONTH="may" YEAR="1998"/>
<DUE-DATE DAY="2" MONTH="jun" YEAR="1998"/>
<WEIGHT>1</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Databases - Assignment 4</TITLE>
<CONTENT REF="Assignment4.asg"/>
<GIVEN-DATE DAY="2" MONTH="jun" YEAR="1998"/>
<DUE-DATE DAY="9" MONTH="jun" YEAR="1998"/>
<WEIGHT>1</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>HTML - Quiz 1</TITLE>
<CONTENT REF="Quiz1.sml"/>
<GIVEN-DATE DAY="12" MONTH="may" YEAR="1998"/>
<DUE-DATE DAY="19" MONTH="may" YEAR="1998"/>
<WEIGHT>1</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Java - Quiz 2</TITLE>
<CONTENT REF="Quiz2.sml"/>
<GIVEN-DATE DAY="19" MONTH="may" YEAR="1998"/>
<DUE-DATE DAY="26" MONTH="may" YEAR="1998"/>
<WEIGHT>1</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>XML - Quiz 3</TITLE>
<CONTENT REF="Quiz3.sml"/>
<GIVEN-DATE DAY="26" MONTH="may" YEAR="1998"/>
<DUE-DATE DAY="2" MONTH="jun" YEAR="1998"/>
<WEIGHT>1</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Databases - Quiz 4</TITLE>
<CONTENT REF="Quiz4.sml"/>
<GIVEN-DATE DAY="2" MONTH="jun" YEAR="1998"/>
<DUE-DATE DAY="9" MONTH="jun" YEAR="1998"/>
<WEIGHT>1</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Participation</TITLE>
<CONTENT REF="Participation.sml"/>
<GIVEN-DATE DAY="12" MONTH="may" YEAR="1998"/>
<DUE-DATE DAY="30" MONTH="jul" YEAR="1998"/>
<WEIGHT>20</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Project</TITLE>
<CONTENT REF="Project.sml"/>
<GIVEN-DATE DAY="12" MONTH="may" YEAR="1998"/>
<DUE-DATE DAY="30" MONTH="jul" YEAR="1998"/>
<WEIGHT>20</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Exam I - Part I</TITLE>
<CONTENT REF="Ex1Part1.sml"/>
<GIVEN-DATE DAY="16" MONTH="jun" YEAR="1998"/>
<DUE-DATE DAY="16" MONTH="jun" YEAR="1998"/>
<WEIGHT>5</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Exam I - Part II</TITLE>
<CONTENT REF="Ex1Part2.sml"/>
<GIVEN-DATE DAY="16" MONTH="jun" YEAR="1998"/>
<DUE-DATE DAY="16" MONTH="jun" YEAR="1998"/>
<WEIGHT>5</WEIGHT>
</ASSIGNMENT>
<ASSIGNMENT>
<TITLE>Exam II</TITLE>
<CONTENT REF="Ex2.sml"/>
<GIVEN-DATE DAY="16" MONTH="jul" YEAR="1998"/>
<DUE-DATE DAY="23" MONTH="jul" YEAR="1998"/>
<WEIGHT>10</WEIGHT>
</ASSIGNMENT>
<MATERIAL>
<TITLE>References page</TITLE>
<CONTENT
REF="http://www.engr.ucf.edu/classes/eel5937/resources/index.htm"/>
<AUTHOR>Ron Eaglin</AUTHOR>
</MATERIAL>
<MATERIAL>
<TITLE>Core Java 1.1 - Fundamentals</TITLE>
<CONTENT ISBN="0-13-766965-8"/>
<AUTHOR>Cay S. Hortsmann</AUTHOR>
<AUTHOR>Gary Cornell</AUTHOR>
</MATERIAL>
<LECTURE>
<TITLE>Introduction to the Internet, HTML, Basic Internet
Concepts</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="12" MONTH="may" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Introduction to Java and JavaScript Programming</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="19" MONTH="may" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Introduction to XML, HTML Review</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="26" MONTH="may" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Internet Client Server Database Concepts</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="2" MONTH="jun" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Return to XML - Advanced XML Topice, Perl, CGI (Other
technologies)</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="9" MONTH="jun" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Creating XML Clients / XML parsing / OO Principle in
XML</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="23" MONTH="jun" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Overview of COM (Component Object Model)</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="29" MONTH="jun" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Overview of CORBA (Common Object Request Broker Agent)</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="7" MONTH="jul" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Overview of technologies / reveiw of design principles</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="14" MONTH="jul" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Project presentations</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="21" MONTH="jul" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<LECTURE>
<TITLE>Project presentations</TITLE>
<LOCATION>ENGR124</LOCATION>
<DATE DAY="30" MONTH="jul" YEAR="1998"/>
<TIME HOUR="10" MIN="00" AM-PM="am"/>
<DURATION>120</DURATION>
</LECTURE>
<DEADLINE>
<TITLE>Initial Project Concepts due</TITLE>
<DATE DAY="4" MONTH="jun" YEAR="1998"/>
</DEADLINE>
<DEADLINE>
<TITLE>Project Status Report 1 Due</TITLE>
<DATE DAY="25" MONTH="jun" YEAR="1998"/>
</DEADLINE>
<DEADLINE>
<TITLE>Project Implementation Plan / Overview Due</TITLE>
<DATE DAY="9" MONTH="jul" YEAR="1998"/>
</DEADLINE>
<DEADLINE>
<TITLE>Final project papers due</TITLE>
<DATE DAY="30" MONTH="jul" YEAR="1998"/>
</DEADLINE>
</SCHEDULE>
44
SAMPLE ASSIGNMENT FILE
<?xml version="1.0"?>
<!DOCTYPE QUESTIONS SYSTEM "assignment.dtd">
<ASSIGNMENT>
<TYPE>Quiz</TYPE>
<TIME-DEDUCTION PERIOD="10" UNIT="min" PERCENT="10" />
<AUTHOR>
<FNAME>Ron</FNAME>
<LNAME>Eaglin</LNAME>
</AUTHOR>
<CONSTRAINTS>Open Book, Open Notes</CONSTRAINTS>
<ATTEMPTS>3</ATTEMPTS>
<ATTEMPT-DEDUCTION>0</ATTEMPT-DEDUCTION>
<SCORING>Avg</SCORING>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question1">
Frames
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question2">
Tables
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question3">
HTML Components
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question4">
Formatted text
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question5">
Anchor argument
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question6">
Frames
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question7">
Common tags
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question8">
Images
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question9">
First tag
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
<TASK>
<PERCENTAGE>10</PERCENTAGE>
<CONTENT REF="HTMLQuestions.qst#question10">
Headers
</CONTENT>
<GRADING>Automatic</GRADING>
</TASK>
</ASSIGNMENT>
50
45
SAMPLE QUESTION FILE
<?XML VERSION="1.0"?>
<!DOCTYPE NAME "QUESTIONS" URL "SATML.dtd">
<QUESTIONS>
<MCQUESTION>
<ID>Question1</ID>
<TITLE>Question 1</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>What is the tag noframes used for:</STATEMENT>
<MCANSWER>
<ANSWERTEXT>Remove borders from frame</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>Return number of frames used on the page</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>Remove frames from the page</ANSWERTEXT>
</MCANSWER>
<MCANSWER CORRECTNESS="100">
<ANSWERTEXT>Alternative html for browsers that does not support
frames</ANSWERTEXT>
<FEEDBACK>Correct</FEEDBACK>
</MCANSWER>
</MCQUESTION>
<MCQUESTION>
<ID>Question2</ID>
<TITLE>Question 2</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>What tag is not used for tables:</STATEMENT>
<MCANSWER>
<ANSWERTEXT>tr</ANSWERTEXT>
</MCANSWER>
<MCANSWER CORRECTNESS="100">
<ANSWERTEXT>table</ANSWERTEXT>
<FEEDBACK>Correct!</FEEDBACK>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>tb</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>td</ANSWERTEXT>
</MCANSWER>
</MCQUESTION>
<MCQUESTION>
<ID>Question3</ID>
<TITLE>Question 3</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>The two components of a HTML document are?</STATEMENT>
<MCANSWER>
<ANSWERTEXT>Title and Text</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>Body and Header</ANSWERTEXT>
<FEEDBACK>Correct!</FEEDBACK>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>Meta and Paragraph</ANSWERTEXT>
</MCANSWER>
<MCANSWER CORRECTNESS="100">
<ANSWERTEXT>Title and Body</ANSWERTEXT>
</MCANSWER>
</MCQUESTION>
<MCQUESTION>
<ID>Question4</ID>
<TITLE>Question 4</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>What tag is used for formatted text:</STATEMENT>
<MCANSWER>
<ANSWERTEXT>p</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>fr</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>hr</ANSWERTEXT>
</MCANSWER>
<MCANSWER CORRECTNESS="100">
<ANSWERTEXT>pre</ANSWERTEXT>
<FEEDBACK>Correct!</FEEDBACK>
</MCANSWER>
</MCQUESTION>
<SAQUESTION NUMBER-OF-ANSWER-BOXES="1">
<ID>Question5</ID>
<TITLE>Question 5</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>The Required argument of the anchor tag which specifies
the URL to be connected to is:</STATEMENT>
<SAANSWER CORRECTNESS="100" ALLOW-TO-ANSWER-IN-
BOX="all">href</SAANSWER>
</SAQUESTION>
<MCQUESTION>
<ID>Question6</ID>
<TITLE>Question 6</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>What tag is used to define what frame will be used to open
new documents:</STATEMENT>
<MCANSWER CORRECTNESS="100">
<ANSWERTEXT>target</ANSWERTEXT>
<FEEDBACK>Correct</FEEDBACK>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>frame</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>frameset</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>link</ANSWERTEXT>
</MCANSWER>
</MCQUESTION>
<MATCHQUESTION>
<ID>Question7</ID>
<TITLE>Question 7</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>Match the tag with it's function:</STATEMENT>
<MATCHELEMENT>
<LEFTCOLUMNMATCH>Bold</LEFTCOLUMNMATCH>
<RIGHTCOLUMNMATCH>B</RIGHTCOLUMNMATCH>
</MATCHELEMENT>
<MATCHELEMENT>
<LEFTCOLUMNMATCH>Separator</LEFTCOLUMNMATCH>
<RIGHTCOLUMNMATCH>HR</RIGHTCOLUMNMATCH>
</MATCHELEMENT>
<MATCHELEMENT>
<LEFTCOLUMNMATCH>Numbered list</LEFTCOLUMNMATCH>
<RIGHTCOLUMNMATCH>OL</RIGHTCOLUMNMATCH>
</MATCHELEMENT>
<MATCHELEMENT>
<LEFTCOLUMNMATCH>Image</LEFTCOLUMNMATCH>
<RIGHTCOLUMNMATCH>IMG</RIGHTCOLUMNMATCH>
</MATCHELEMENT>
<MATCHELEMENT>
<LEFTCOLUMNMATCH>Table Cell</LEFTCOLUMNMATCH>
<RIGHTCOLUMNMATCH>TD</RIGHTCOLUMNMATCH>
</MATCHELEMENT>
</MATCHQUESTION>
<MCQUESTION>
<ID>Question8</ID>
<TITLE>Question 8</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>The required element of the IMG tag is:</STATEMENT>
<MCANSWER CORRECTNESS="100">
<ANSWERTEXT>SRC</ANSWERTEXT>
<FEEDBACK>Correct</FEEDBACK>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>WIDTH</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>HEIGHT</ANSWERTEXT>
</MCANSWER>
<MCANSWER>
<ANSWERTEXT>HREF</ANSWERTEXT>
</MCANSWER>
</MCQUESTION>
<SAQUESTION NUMBER-OF-ANSWER-BOXES="1">
<ID>Question9</ID>
<TITLE>Question 9</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>What is the first tag in a HTML document:</STATEMENT>
<SAANSWER CORRECTNESS="100" ALLOW-TO-ANSWER-IN-
BOX="all">html</SAANSWER>
<SAANSWER CORRECTNESS="100" ALLOW-TO-ANSWER-IN-
BOX="all"><html></SAANSWER>
</SAQUESTION>
<SAQUESTION NUMBER-OF-ANSWER-BOXES="1">
<ID>Question10</ID>
<TITLE>Question 10</TITLE>
<PDATE DAY="9" MONTH="may" YEAR="1998"/>
<CATEGORY>HTML</CATEGORY>
<STATEMENT>How many different headers are there in HTML:</STATEMENT>
<SAANSWER CORRECTNESS="100" ALLOW-TO-ANSWER-IN-BOX="all">6</SAANSWER>
<SAANSWER CORRECTNESS="100" ALLOW-TO-ANSWER-IN-
BOX="all">six</SAANSWER>
</SAQUESTION>
</QUESTIONS>
46
APPENDIXD DATABASE DIAGRAM
47
48
LIST OF REFERENCES
[] WebCT Web Site
Information on WebCT, Sienca Teng, Oct 28, 1996
http://www.webct.com/webct/
[] Making CyberProf-formatted questions
Aug 12, 1997
http://www.etb.uiuc.edu/cyberprof/test/demo/Manuals/
Startup/Make_questions.html
[] IMS Project Group Home Page
IMS Project Group
http://www.imsproject.org/background.html
[] Using IMS Meta Data
Specification of IMS meta-data fields used for learning modules
http://www.imsproject.org/metadata/MDusing.html
[] Educom: a retrospective
Educom Review, volume 33, Number 5, 1998, p42-47
also published on the Internet
http://www.educause.edu/pub/ehistory/ehistory.html
Robert C, Herrick Jr
49
[] XML by Example: Building E-Commerce applications
1998, Sean McGrath, Prentice Hall, ISBN 0-13-960162-7
[] Designing XML Internet applications
1998, Michael Leventahl, David Lewis, Matthew Fucs, Prentice Hall, ISBN 0-13-616822-1
[] Extensible Markup Language
W3C Working Draft, Nov 14, 1996, Tim Bray (Textuality), C.M. Sperberg-McQueen (University of Illinois), http://www.w3.org/TR/WD-xml-961114.html
[] Microsoft XML Notepad
Download site and information, July 22, 1998, Microsoft Corporation
http://www.microsoft.com/xml/notepad/intro.asp
[] W3C's Math Homepage
Oct 10, 1998, Angel Diaz, Patrick Icon
http://www.w3.org/Math/
[] MusicML - An XML experience
Jeroen van Rotterdam
http://195.108.47.160/index.html
[] "The XML Scoop on Office 9"
July 05, 1998, Mark Walter and Liora Alschuler
http://www.xml.com/xml/pub/SeyboldReport/ipx980603.html
[] SGML/XML Using elements and attributes
Aug 25, 1998, Robin Cover
http://www.oasis-open.org/cover/elementsAndAttrs.html
[] SGML/XML Using elements and attributes
Collection of news articles from comp.text.xml
Sept 10, 1998, Robin Cover
http://www.oasis-open.org/cover/elementAttr9804.html
[] Elements vs. Attributes
News article in comp.text.sgml, Apr 28, 1992, C. M. Sperberg-McQueen
http://www.oasis-open.org/cover/attrSperberg92.html
[] Elements or Attributes
News article in comp.text.sgml, Nov 18, 1997, W. Eliot Kimber
http://www.oasis-open.org/cover/attrKimber9711.html
[] XML-Data
W3C note, Jan 5, 1998, Andrew Layman (Microsoft Corporation), Edward Jung (Microsoft Corporation), Eve Maler (ArborText), Henry S. Thompson (University of Edinburgh), Jean Paoli (Microsoft Corporation), John Tigue (DataChannel), Norbert H. Mikula (DataChannel), Steve De Rose (Inso Corporation)
http://www.w3.org/TR/1998/NOTE-XML-data-0105/
[] About the World Wide Web Consortium
Feb 5, 1998, Tim Bernes-Lee
http://www.w3.org/Consortium/
[] Extensible Stylesheet Language
Jan 7, 1998, Microsoft Corporation
http://www.microsoft.com/xml/xsl/default.asp
[] QML - Question Markup Language
May 4, 1998, Tekamah Corporation
http://tekamah.com/aravis/qml.html
[] Tekamah Corporation
Tekamah Corporation
1401 Rockville Pike, Suite 645
Rockville, Maryland 20852-1428
(301) 738-8737 (voice)
(301) 738-8738 (facsimile)
info@tekamah.com
[] QML - Quiz Markup Language
1997
Washington State University
http://ems.cea.wsu.edu/qml/
[] Dr. Robert Bamberger
bamberg@eecs.wsu.edu
[] Christopher Shorey
cshorey@wsu.edu
[] Richard Simpkinsson
rsimpkin@gocongs.wsu.edu
[] Authoring interactive questions using the QuizzIT system
May 16, 1996, Lucio Cunha Tinoco (Viriginia Tech)
http://pixel.cs.vt.edu/~ltinoco/quizitdocs/index.html
[] Lucio Cunha Tinoco
tinoco@vt.edu
[] TML
Tutorial Markup Language, Dan Brickley (University of Bristol)
http://www.ilrt.bris.ac.uk/netquest/about/lang/
[] Dan Brickley
NETQUEST Profile/ Desire/ RDF
Institute for Learning and Research Technology
University of Bristol
8 Woodland Road
Bristol, UK
http://www.ilrt.bris.ac.uk/netquest/
http://www.desire.org/
daniel.brickley@bristol.ac.uk
[] EDUCOM/NLII Instructional Management Systems Specifications Document - Version 0.5
Apr 29, 1998, IMS Project group
Document converted from word 8 by
MSWordView (mswordview 0.4.4)
MSWordView written by Caolan McNamara