Composite Items (QTI)
Composite items are items that contain more than one point of interaction. Composite items may contain multiple instances of the same type of interaction or have a mixture of interaction types.
Examples
This example extends ‘The Chocolate Factory (Take 1)’ from the Upload Interaction (QTI) example with an additional text response field that can be marked objectively. As the responseDeclaration bound to the textEntryInteraction has an integer baseType, the text the candidate gives as an input is transformed as an integer by the Delivery Engine.
<assessmentItem
xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p2 http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2p2.xsd"
identifier="upload"
title="Chocolate Factory"
adaptive="false"
timeDependent="false"
>
<responseDeclaration
identifier="RESPONSE"
cardinality="single"
baseType="file"
/>
<responseDeclaration
identifier="RESPONSE_P"
cardinality="single"
baseType="integer"
/>
<outcomeDeclaration
identifier="SCORE"
cardinality="single"
baseType="float"
/>
<itemBody>
<p>
A chocolate factory produces several types of chocolate, some of
which have nut centres. The chocolates are mixed together and are
randomly packed into cartons of ten.
</p>
<uploadInteraction responseIdentifier="RESPONSE">
<prompt>
Build a spreadsheet to simulate 50 cartons of chocolates when
each carton contains 10 chocolates, and when one-seventh of the
chocolates have nut centres. Your spreadsheet should include 50
rows representing the 50 cartons, each row containing 10 columns
to represent the chocolates.
</prompt>
</uploadInteraction>
<p>
Incorporate in your spreadsheet a count of how many cartons contain
fewer than two nut centres, and hence estimate (to the nearest whole
number) the percentage of a cartons containing fewer than two nut
centres:
<textEntryInteraction
responseIdentifier="RESPONSE_P"
expectedLength="3"
/>
%
</p>
</itemBody>
<responseProcessing />
</assessmentItem>
This text comprehension example combines ‘choiceInteraction’, and ‘gapMatchInteraction’ in a single item, sharing one text. It also makes use of inline feedback.
<assessmentItem
xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p2 http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2p2.xsd"
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>