Existing Technologies

From Educational Exercises and Activities Community Group

Question and Test Interoperability (QTI)

The initial version of Question and Test Interoperability (QTI), released in May of 2000, was materially based on QuestionMark’s Questions Markup Language [1].

QTI offers a number of interaction types in the categories of simple interactions, text-based interactions, graphical interactions, and miscellaneous interactions [2]. Simple interactions include: multiple choice, ordering, associating, matching, and gap matching interactions [2]. Text-based interactions include: inline choice, text entry, extended text interaction, and hot text interactions [2]. Graphical interactions include: hotspot, graphic ordering, graphic associating, graphic gap matching, graphic select point, and graphic position object interactions. Miscellaneous interactions include: slider, media, drawing, uploading, and custom interactions [2].

QTI describes both simple and composite items, simple items having one point of interaction (e.g. a multiple-choice question) and composite items having more than one point of interaction [3].

Here is an example of a simple QTI item with a choice interaction:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Thie example adapted from the PET Handbook, copyright University of Cambridge ESOL Examinations -->
<assessmentItem xmlns="http://www.imsglobal.org/xsd/imsqti_v2p2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p2 http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2p2.xsd"
  xmlns:m="http://www.w3.org/2010/Math/MathML" identifier="math" title="Relativity"
  adaptive="false" timeDependent="false">
  <responseDeclaration identifier="RESPONSE" cardinality="single" baseType="identifier">
    <correctResponse>
      <value>E</value>
    </correctResponse>
  </responseDeclaration>
  <outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"/>
  <itemBody>
    <choiceInteraction responseIdentifier="RESPONSE" shuffle="true" maxChoices="1">
      <prompt>Which famous scientist is popularly associated with the equation <m:math>
          <m:mrow>
            <m:mi>E</m:mi>
            <m:mo>=</m:mo>
            <m:mi>m</m:mi>
            <m:msup>
              <m:mi>c</m:mi>
              <m:mn>2</m:mn>
            </m:msup>
          </m:mrow>
        </m:math> ?</prompt>
      <simpleChoice identifier="E">Einstein</simpleChoice>
      <simpleChoice identifier="G">Gallileo</simpleChoice>
      <simpleChoice identifier="H">Hawking</simpleChoice>
      <simpleChoice identifier="N">Newton</simpleChoice>
    </choiceInteraction>
  </itemBody>
  <responseProcessing
    template="http://www.imsglobal.org/question/qti_v2p2/rptemplates/match_correct"/>
</assessmentItem>

Here is an example of a composite QTI item:

<?xml version="1.0" encoding="UTF-8"?>
<assessmentItem xmlns="http://www.imsglobal.org/xsd/imsqti_v2p2"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p2 http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2p2.xsd"
  xmlns:xi="http://www.w3.org/2001/XInclude"  
  xmlns:m="http://www.w3.org/1998/Math/MathML" toolName="Mathqurate" toolVersion="1.0" xml:lang="en" 
  identifier="multi-input" title="Legend" adaptive="false" timeDependent="false">
  <responseDeclaration identifier="RESPONSE1" cardinality="single" baseType="identifier">
    <correctResponse>
      <value>ChoiceA</value>
    </correctResponse>
  </responseDeclaration>
  <responseDeclaration identifier="RESPONSE2" cardinality="single" baseType="identifier">
    <correctResponse>
      <value>A2</value>
    </correctResponse>
  </responseDeclaration>
  <responseDeclaration identifier="RESPONSE3" cardinality="single" baseType="string">
    <correctResponse>
      <value>wicked king</value>
    </correctResponse>
  </responseDeclaration>
  <responseDeclaration identifier="RESPONSE4" cardinality="multiple" baseType="directedPair">
    <correctResponse>
      <value>F G1</value>
      <value>C G2</value>
      <value>H G3</value>
    </correctResponse>
  </responseDeclaration>
  <outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float">
    <defaultValue>
      <value>0.0</value>
    </defaultValue>
  </outcomeDeclaration>
  <outcomeDeclaration identifier="SCORE1" cardinality="single" baseType="float">
    <defaultValue>
      <value>0.0</value>
    </defaultValue>
  </outcomeDeclaration>
  <outcomeDeclaration identifier="SCORE2" cardinality="single" baseType="float">
    <defaultValue>
      <value>0.0</value>
    </defaultValue>
  </outcomeDeclaration>
  <outcomeDeclaration identifier="SCORE3" cardinality="single" baseType="float">
    <defaultValue>
      <value>0.0</value>
    </defaultValue>
  </outcomeDeclaration>
  <outcomeDeclaration identifier="SCORE4" cardinality="single" baseType="float">
    <defaultValue>
      <value>0.0</value>
    </defaultValue>
  </outcomeDeclaration>
  <outcomeDeclaration identifier="FEEDBACK" cardinality="multiple" baseType="identifier"/>
  
  <itemBody>
    <blockquote>
      <p>Many people who live near the Theme Park are afraid to go into the Forest area. There is
      a legend, that a woman named Marion, who once lived in the forest as an outlaw hundreds and hundreds
      of years ago, still walks there as a ghost at night. The legend says, she was a great
      warrior from a rich family, but the wicked king, who ruled the country, killed her
      family, burned her castle and rode away on her horse. The castle is quite close to the Theme Park.</p>
    </blockquote>
    <choiceInteraction responseIdentifier="RESPONSE1" shuffle="true" maxChoices="1">
      <prompt>Why are some people afraid of the Forest Area in the Theme Park?</prompt>
      <simpleChoice identifier="ChoiceA">Some people are afraid of a woman who walks around at
        night as a ghost.</simpleChoice>
      <simpleChoice identifier="ChoiceB">Some people are afraid of the dark.</simpleChoice>
      <simpleChoice identifier="ChoiceC">Some people are afraid of a man who walks around at
        night as a ghost.</simpleChoice>
    </choiceInteraction>
    <p>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="ReasonOK">Yes,
        that's the right reason.</feedbackInline>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show"
        identifier="ReasonIncorrect">No, that's not the right reason.</feedbackInline>
    </p>
    <div>The woman, whose name was <inlineChoiceInteraction responseIdentifier="RESPONSE2"
        shuffle="true">
      <inlineChoice identifier="P2" fixed="true">Please choose...</inlineChoice>
      <inlineChoice identifier="C2">Marine</inlineChoice>
      <inlineChoice identifier="B2">Maureen</inlineChoice>
        <inlineChoice identifier="A2">Marion</inlineChoice>
    </inlineChoiceInteraction>, became angry with the <textEntryInteraction
        responseIdentifier="RESPONSE3"/>.</div>
    <gapMatchInteraction responseIdentifier="RESPONSE4" shuffle="true">
      <gapText identifier="F" matchMax="1">family</gapText>
      <gapText identifier="C" matchMax="1">castle</gapText>
      <gapText identifier="S" matchMax="1">sword</gapText>
      <gapText identifier="H" matchMax="1">horse</gapText>
      <blockquote>
        <p>He killed her <gap identifier="G1"/> and burned her <gap identifier="G2"/>, then jumped on her <gap identifier="G3"/> and rode away.</p>
      </blockquote>
    </gapMatchInteraction>
    <p>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="NameOK"> You've
        got the right name for our heroine.</feedbackInline>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="WrongName"> You've
        got the wrong name for our heroine.</feedbackInline>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="BaddyOK">
        Right, he was a wicked king!</feedbackInline>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="BaddyAlmost">
        Not quite, he was a wicked king!</feedbackInline>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="BaddyNo">
        No, he was a wicked king!</feedbackInline>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="BaddyBad">
        No, it was the wicked king!</feedbackInline>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="GapsOK">
        Yes, that's what he did.</feedbackInline>
      <feedbackInline outcomeIdentifier="FEEDBACK" showHide="show" identifier="GapsNo">
        No, that's not what he did.</feedbackInline>
    </p>
  </itemBody>
  <responseProcessing>
    <responseCondition>
      <responseIf>
        <match>
          <variable identifier="RESPONSE1"/>
          <correct identifier="RESPONSE1"/>
        </match>
        <setOutcomeValue identifier="SCORE1">
          <baseValue baseType="float">1.0</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <baseValue baseType="identifier">ReasonOK</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseIf>
      <responseElse>
        <setOutcomeValue identifier="SCORE1">
          <baseValue baseType="float">0.0</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <baseValue baseType="identifier">ReasonIncorrect</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseElse>
    </responseCondition>
    <responseCondition>
      <responseIf>
        <match>
          <variable identifier="RESPONSE2"/>
          <correct identifier="RESPONSE2"/>
        </match>
        <setOutcomeValue identifier="SCORE2">
          <baseValue baseType="float">1.0</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <variable identifier="FEEDBACK"/>
            <baseValue baseType="identifier">NameOK</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseIf>
      <responseElse>
        <setOutcomeValue identifier="SCORE2">
          <baseValue baseType="float">0.0</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <variable identifier="FEEDBACK"/>
            <baseValue baseType="identifier">WrongName</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseElse>
    </responseCondition>
    <responseCondition>
      <responseIf>
        <match>
          <variable identifier="RESPONSE3"/>
          <correct identifier="RESPONSE3"/>
        </match>
        <setOutcomeValue identifier="SCORE3">
          <baseValue baseType="float">1.0</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <variable identifier="FEEDBACK"/>
            <baseValue baseType="identifier">BaddyOK</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseIf>
      <responseElseIf>
        <or>
          <match>
            <variable identifier="RESPONSE3"/>
            <baseValue baseType="string">bad king</baseValue>
          </match>
          <match>
            <variable identifier="RESPONSE3"/>
            <baseValue baseType="string">evil king</baseValue>
          </match>
        </or>
        <setOutcomeValue identifier="SCORE3">
          <baseValue baseType="float">0.5</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <variable identifier="FEEDBACK"/>
            <baseValue baseType="identifier">BaddyAlmost</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseElseIf>
      <responseElseIf>
        <substring caseSensitive="false">
           <baseValue baseType="string">king</baseValue>
           <variable identifier="RESPONSE3"/>
        </substring>
        <setOutcomeValue identifier="SCORE3">
          <baseValue baseType="float">0.2</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <variable identifier="FEEDBACK"/>
            <baseValue baseType="identifier">BaddyNo</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseElseIf>
      <responseElse>
        <setOutcomeValue identifier="SCORE3">
          <baseValue baseType="float">0.0</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <variable identifier="FEEDBACK"/>
            <baseValue baseType="identifier">BaddyBad</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseElse>
    </responseCondition>
    <responseCondition>
      <responseIf>
        <match>
          <variable identifier="RESPONSE4"/>
          <correct identifier="RESPONSE4"/>
        </match>
        <setOutcomeValue identifier="SCORE4">
          <baseValue baseType="float">1.0</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <variable identifier="FEEDBACK"/>
            <baseValue baseType="identifier">GapsOK</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseIf>
      <responseElse>
        <setOutcomeValue identifier="SCORE4">
          <baseValue baseType="float">0.0</baseValue>
        </setOutcomeValue>
        <setOutcomeValue identifier="FEEDBACK">
          <multiple>
            <variable identifier="FEEDBACK"/>
            <baseValue baseType="identifier">GapsNo</baseValue>
          </multiple>
        </setOutcomeValue>
      </responseElse>
    </responseCondition>
    <setOutcomeValue identifier="SCORE">
      <sum>
        <variable identifier="SCORE1"/>
        <variable identifier="SCORE2"/>
        <variable identifier="SCORE3"/>
        <variable identifier="SCORE4"/>
      </sum>
    </setOutcomeValue>
  </responseProcessing>
</assessmentItem>

QTI and Web Components

QTI Versions 2.2 and 3.0

K-12 Open Content Exchange (K-12 OCX)

Learning Tools Interoperability (LTI)

SCORM and Experience API (xAPI)

IMS Common Cartridge (CC)

IMS Content Packaging and EPUB Open Container Format (OCF)

EPUB for Education (EDUPUB)

Semantic Exercise Interchange Format (SERIF)

De Meester, Ben, Hajar Ghaem Sigarchian, Tom De Nies, Ruben Verborgh, Frank Salliau, Erik Mannens and Rik Van de Walle. “SERIF: A Semantic ExeRcise Interchange Format.” (2015). PDF

References

  1. https://en.wikipedia.org/wiki/QTI
  2. http://www.imsglobal.org/question/qtiv2p2p2/QTIv2p2p2-ASI-InformationModelv1p0/imsqtiv2p2p2_asi_v1p0_InfoModelv1p0.html#Interactions
  3. http://www.imsglobal.org/question/qtiv2p2/imsqti_v2p2_impl.html