qti 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +28 -0
  3. data/Rakefile +1 -0
  4. data/lib/qti.rb +62 -0
  5. data/lib/qti/models/base.rb +80 -0
  6. data/lib/qti/models/manifest.rb +20 -0
  7. data/lib/qti/v1/models/assessment.rb +17 -0
  8. data/lib/qti/v1/models/assessment_item.rb +59 -0
  9. data/lib/qti/v1/models/base.rb +13 -0
  10. data/lib/qti/v1/models/choices/logical_identifier_choice.rb +26 -0
  11. data/lib/qti/v1/models/interactions/logical_identifier_interaction.rb +32 -0
  12. data/lib/qti/v2/models/assessment_item.rb +62 -0
  13. data/lib/qti/v2/models/assessment_test.rb +32 -0
  14. data/lib/qti/v2/models/base.rb +70 -0
  15. data/lib/qti/v2/models/choices/simple_choice.rb +28 -0
  16. data/lib/qti/v2/models/interactions.rb +25 -0
  17. data/lib/qti/v2/models/interactions/choice_interaction.rb +50 -0
  18. data/spec/fixtures/items_1.2/multiple_answer.xml +105 -0
  19. data/spec/fixtures/items_1.2/multiple_choice.xml +83 -0
  20. data/spec/fixtures/items_1.2/true_false.xml +50 -0
  21. data/spec/fixtures/items_2.1/Example01-modalFeedback.xml +79 -0
  22. data/spec/fixtures/items_2.1/Example02-feedbackInline.xml +67 -0
  23. data/spec/fixtures/items_2.1/Example03-feedbackBlock-solution-random.xml +223 -0
  24. data/spec/fixtures/items_2.1/Example03-feedbackBlock-solution.xml +238 -0
  25. data/spec/fixtures/items_2.1/Example04-feedbackBlock-templateBlock.xml +582 -0
  26. data/spec/fixtures/items_2.1/Example05-feedbackBlock-adaptive.xml +397 -0
  27. data/spec/fixtures/items_2.1/adaptive.xml +286 -0
  28. data/spec/fixtures/items_2.1/adaptive_template.xml +350 -0
  29. data/spec/fixtures/items_2.1/associate.xml +33 -0
  30. data/spec/fixtures/items_2.1/audio-video.xml +46 -0
  31. data/spec/fixtures/items_2.1/choice.xml +31 -0
  32. data/spec/fixtures/items_2.1/choice_aria.xml +42 -0
  33. data/spec/fixtures/items_2.1/choice_fixed.xml +33 -0
  34. data/spec/fixtures/items_2.1/choice_multiple.xml +31 -0
  35. data/spec/fixtures/items_2.1/choice_multiple_chocolade.xml +74 -0
  36. data/spec/fixtures/items_2.1/choice_multiple_rtl.xml +33 -0
  37. data/spec/fixtures/items_2.1/choice_ruby.xml +39 -0
  38. data/spec/fixtures/items_2.1/choice_t_f.xml +30 -0
  39. data/spec/fixtures/items_2.1/choice_true_false.xml +30 -0
  40. data/spec/fixtures/items_2.1/data-attributes.xml +61 -0
  41. data/spec/fixtures/items_2.1/drawing.xml +16 -0
  42. data/spec/fixtures/items_2.1/essay.xml +14 -0
  43. data/spec/fixtures/items_2.1/extended_text.xml +24 -0
  44. data/spec/fixtures/items_2.1/extended_text_rubric.xml +36 -0
  45. data/spec/fixtures/items_2.1/feedback_adaptive.xml +142 -0
  46. data/spec/fixtures/items_2.1/figures.xml +32 -0
  47. data/spec/fixtures/items_2.1/gap_match.xml +33 -0
  48. data/spec/fixtures/items_2.1/graphic_associate.xml +36 -0
  49. data/spec/fixtures/items_2.1/graphic_gap_match.xml +54 -0
  50. data/spec/fixtures/items_2.1/graphic_gap_match_text.xml +50 -0
  51. data/spec/fixtures/items_2.1/graphic_order.xml +32 -0
  52. data/spec/fixtures/items_2.1/hint.xml +85 -0
  53. data/spec/fixtures/items_2.1/hotspot.xml +26 -0
  54. data/spec/fixtures/items_2.1/hottext.xml +33 -0
  55. data/spec/fixtures/items_2.1/images/CBG.png +0 -0
  56. data/spec/fixtures/items_2.1/images/EBG.png +0 -0
  57. data/spec/fixtures/items_2.1/images/EDI.png +0 -0
  58. data/spec/fixtures/items_2.1/images/GLA.png +0 -0
  59. data/spec/fixtures/items_2.1/images/MAN.png +0 -0
  60. data/spec/fixtures/items_2.1/images/MCH.png +0 -0
  61. data/spec/fixtures/items_2.1/images/airport.png +0 -0
  62. data/spec/fixtures/items_2.1/images/blueStar.png +0 -0
  63. data/spec/fixtures/items_2.1/images/blue_door.png +0 -0
  64. data/spec/fixtures/items_2.1/images/bus.png +0 -0
  65. data/spec/fixtures/items_2.1/images/castle.png +0 -0
  66. data/spec/fixtures/items_2.1/images/greenTriangle.png +0 -0
  67. data/spec/fixtures/items_2.1/images/green_door.png +0 -0
  68. data/spec/fixtures/items_2.1/images/house.png +0 -0
  69. data/spec/fixtures/items_2.1/images/open_car.png +0 -0
  70. data/spec/fixtures/items_2.1/images/open_goat.png +0 -0
  71. data/spec/fixtures/items_2.1/images/plane.png +0 -0
  72. data/spec/fixtures/items_2.1/images/postcard.eps +3581 -0
  73. data/spec/fixtures/items_2.1/images/postcard.png +0 -0
  74. data/spec/fixtures/items_2.1/images/rectangle.svg +1 -0
  75. data/spec/fixtures/items_2.1/images/redCircle.png +0 -0
  76. data/spec/fixtures/items_2.1/images/red_door.png +0 -0
  77. data/spec/fixtures/items_2.1/images/sign.png +0 -0
  78. data/spec/fixtures/items_2.1/images/survey.jpg +0 -0
  79. data/spec/fixtures/items_2.1/images/train.png +0 -0
  80. data/spec/fixtures/items_2.1/images/uk.png +0 -0
  81. data/spec/fixtures/items_2.1/images/ukair.png +0 -0
  82. data/spec/fixtures/items_2.1/images/ukairtags.png +0 -0
  83. data/spec/fixtures/items_2.1/imsmanifest.xml +227 -0
  84. data/spec/fixtures/items_2.1/inline_choice.xml +26 -0
  85. data/spec/fixtures/items_2.1/inline_choice_math.xml +68 -0
  86. data/spec/fixtures/items_2.1/likert.xml +21 -0
  87. data/spec/fixtures/items_2.1/match.xml +41 -0
  88. data/spec/fixtures/items_2.1/math.xml +35 -0
  89. data/spec/fixtures/items_2.1/mc_calc3.xml +164 -0
  90. data/spec/fixtures/items_2.1/mc_calc5.xml +211 -0
  91. data/spec/fixtures/items_2.1/mc_stat2.xml +219 -0
  92. data/spec/fixtures/items_2.1/media_coords.xml +33 -0
  93. data/spec/fixtures/items_2.1/multi-input.xml +271 -0
  94. data/spec/fixtures/items_2.1/nested_object.xml +26 -0
  95. data/spec/fixtures/items_2.1/order.xml +25 -0
  96. data/spec/fixtures/items_2.1/order_partial_scoring.xml +55 -0
  97. data/spec/fixtures/items_2.1/order_rtl.xml +27 -0
  98. data/spec/fixtures/items_2.1/orkney1.xml +34 -0
  99. data/spec/fixtures/items_2.1/orkney2.xml +34 -0
  100. data/spec/fixtures/items_2.1/position_object.xml +34 -0
  101. data/spec/fixtures/items_2.1/select_point.xml +23 -0
  102. data/spec/fixtures/items_2.1/shared/orkney.css +1 -0
  103. data/spec/fixtures/items_2.1/shared/orkney.html +20 -0
  104. data/spec/fixtures/items_2.1/slider.xml +35 -0
  105. data/spec/fixtures/items_2.1/svg.xml +28 -0
  106. data/spec/fixtures/items_2.1/template.xml +88 -0
  107. data/spec/fixtures/items_2.1/template_image.xml +74 -0
  108. data/spec/fixtures/items_2.1/text_entry.xml +27 -0
  109. data/spec/fixtures/items_2.1/upload.xml +18 -0
  110. data/spec/fixtures/items_2.1/upload_composite.xml +24 -0
  111. data/spec/fixtures/test_qti_1.2.zip +0 -0
  112. data/spec/fixtures/test_qti_1.2/contact info.png +0 -0
  113. data/spec/fixtures/test_qti_1.2/exam1/my_files/org0/images/image.png +0 -0
  114. data/spec/fixtures/test_qti_1.2/exam1/my_files/org1/images/image.png +0 -0
  115. data/spec/fixtures/test_qti_1.2/image.png +0 -0
  116. data/spec/fixtures/test_qti_1.2/imsmanifest.xml +37 -0
  117. data/spec/fixtures/test_qti_1.2/quiz.xml +216 -0
  118. data/spec/fixtures/test_qti_2.1.zip +0 -0
  119. data/spec/fixtures/test_qti_2.1/assessment.xml +77 -0
  120. data/spec/fixtures/test_qti_2.1/imsmanifest.xml +211 -0
  121. data/spec/fixtures/test_qti_2.1/mathassess.xsd +54 -0
  122. data/spec/fixtures/test_qti_2.1/multiple-answer/multiple-answer.xml +31 -0
  123. data/spec/fixtures/test_qti_2.1/multiple-choice/multiple-choice.xml +31 -0
  124. data/spec/fixtures/test_qti_2.1/text-entry/text-entry.xml +330 -0
  125. data/spec/fixtures/test_qti_2.1/true-false/true-false.xml +55 -0
  126. data/spec/fixtures/tests/feedbackTest/assessment.xml +252 -0
  127. data/spec/fixtures/tests/feedbackTest/id-38d47747fb30/Example02-feedbackInline.xml +51 -0
  128. data/spec/fixtures/tests/feedbackTest/id-5e216df10030/Example03-feedbackBlock-solution.xml +199 -0
  129. data/spec/fixtures/tests/feedbackTest/id-9c33d141576e/Example05-feedbackBlock-adaptive.xml +330 -0
  130. data/spec/fixtures/tests/feedbackTest/id-aaa0bbf5da1d/Example03-feedbackBlock-solution-random.xml +223 -0
  131. data/spec/fixtures/tests/feedbackTest/id-d599169403d2/Example04-feedbackBlock-templateBlock.xml +534 -0
  132. data/spec/fixtures/tests/feedbackTest/id-fa3ee5852723/Example01-modalFeedback.xml +55 -0
  133. data/spec/fixtures/tests/feedbackTest/imsmanifest.xml +239 -0
  134. data/spec/fixtures/tests/interactionmix_saxony_v3/Choicemultiple_2014410822.xml +110 -0
  135. data/spec/fixtures/tests/interactionmix_saxony_v3/Choicemultiple_871212949.xml +208 -0
  136. data/spec/fixtures/tests/interactionmix_saxony_v3/Choicesingle_853928446.xml +159 -0
  137. data/spec/fixtures/tests/interactionmix_saxony_v3/Choicetruefalse_176040516.xml +98 -0
  138. data/spec/fixtures/tests/interactionmix_saxony_v3/Hotspot_278940407.xml +109 -0
  139. data/spec/fixtures/tests/interactionmix_saxony_v3/Hottext_801974120.xml +106 -0
  140. data/spec/fixtures/tests/interactionmix_saxony_v3/InteractionMixSachsen_1901710679.xml +54 -0
  141. data/spec/fixtures/tests/interactionmix_saxony_v3/Matchmultiple_1038910213.xml +139 -0
  142. data/spec/fixtures/tests/interactionmix_saxony_v3/Matchsingle_143114773.xml +133 -0
  143. data/spec/fixtures/tests/interactionmix_saxony_v3/Order_913967682.xml +117 -0
  144. data/spec/fixtures/tests/interactionmix_saxony_v3/TextEntry_883368511.xml +114 -0
  145. data/spec/fixtures/tests/interactionmix_saxony_v3/TextEntrynumeric_2040297025.xml +154 -0
  146. data/spec/fixtures/tests/interactionmix_saxony_v3/TextEntrynumeric_770468849.xml +124 -0
  147. data/spec/fixtures/tests/interactionmix_saxony_v3/TextEntrysubset_806481421.xml +227 -0
  148. data/spec/fixtures/tests/interactionmix_saxony_v3/imsmanifest.xml +278 -0
  149. data/spec/fixtures/tests/interactionmix_saxony_v3/media/03c5e2f774db49598deb3ac7d05b53f9.jpg +0 -0
  150. data/spec/fixtures/tests/interactionmix_saxony_v3/media/0563e67fb1bb48ad882e0a5abf2a2686.jpg +0 -0
  151. data/spec/fixtures/tests/interactionmix_saxony_v3/media/2f44366716474a5d8e2a2e32346cbc05.jpg +0 -0
  152. data/spec/fixtures/tests/interactionmix_saxony_v3/media/71a299b50b5e4b1492f8ee51ce25be7d.jpg +0 -0
  153. data/spec/fixtures/tests/interactionmix_saxony_v3/media/a439b702d5034ca38f6df26a12835db3.jpg +0 -0
  154. data/spec/fixtures/tests/interactionmix_saxony_v3/media/b660fc9f268c4ef688d8606116c70160.jpg +0 -0
  155. data/spec/fixtures/tests/interactionmix_saxony_v3/media/c2f541343b9b4bfdba9fc90c7a18403e.jpg +0 -0
  156. data/spec/fixtures/tests/interactionmix_saxony_v3/media/e18b5a2eb8104d0994a182ee0176a05c.jpg +0 -0
  157. data/spec/fixtures/tests/interactionmix_saxony_v3/media/f88c5aa2c6724a388fdbadc7133eb757.jpg +0 -0
  158. data/spec/fixtures/tests/interactionmix_saxony_v3/media/ffe337505ef74334a0cecb33310f99c1.jpg +0 -0
  159. data/spec/fixtures/tests/tests/complete.xml +33 -0
  160. data/spec/fixtures/tests/tests/report.xml +70 -0
  161. data/spec/fixtures/tests/tests/rtest01-fragment.xml +12 -0
  162. data/spec/fixtures/tests/tests/rtest01-set01.xml +17 -0
  163. data/spec/fixtures/tests/tests/rtest01-set02.xml +17 -0
  164. data/spec/fixtures/tests/tests/rtest01-set03.xml +17 -0
  165. data/spec/fixtures/tests/tests/rtest01.xml +16 -0
  166. data/spec/fixtures/tests/tests/rtest02.xml +48 -0
  167. data/spec/fixtures/tests/tests/rtest03.xml +38 -0
  168. data/spec/fixtures/tests/tests/rtest04.xml +50 -0
  169. data/spec/fixtures/tests/tests/rtest06.xml +34 -0
  170. data/spec/fixtures/tests/tests/rtest08.xml +38 -0
  171. data/spec/fixtures/tests/tests/rtest09.xml +33 -0
  172. data/spec/fixtures/tests/tests/rtest10.xml +48 -0
  173. data/spec/fixtures/tests/tests/rtest12.xml +38 -0
  174. data/spec/fixtures/tests/tests/rtest13.xml +62 -0
  175. data/spec/fixtures/tests/tests/rtest22.xml +41 -0
  176. data/spec/fixtures/tests/tests/rtest24.xml +37 -0
  177. data/spec/fixtures/tests/tests/rtest25.xml +62 -0
  178. data/spec/fixtures/tests/tests/rtest26.xml +38 -0
  179. data/spec/fixtures/tests/tests/rtest27.xml +46 -0
  180. data/spec/qti/models/base_spec.rb +71 -0
  181. data/spec/qti/models/manifest_spec.rb +19 -0
  182. data/spec/qti/v1/models/assessment_item_spec.rb +49 -0
  183. data/spec/qti/v1/models/assessment_spec.rb +18 -0
  184. data/spec/qti/v1/models/choices/logical_identifier_choice_spec.rb +23 -0
  185. data/spec/qti/v1/models/interactions/logical_identifier_interaction_spec.rb +20 -0
  186. data/spec/qti/v2/models/assessment_item_spec.rb +67 -0
  187. data/spec/qti/v2/models/assessment_test_spec.rb +60 -0
  188. data/spec/qti/v2/models/choices/simple_choice_spec.rb +22 -0
  189. data/spec/qti/v2/models/interactions/choice_interaction_spec.rb +27 -0
  190. data/spec/qti_spec.rb +38 -0
  191. data/spec/spec_helper.rb +10 -0
  192. metadata +506 -0
@@ -0,0 +1,70 @@
1
+ require 'qti/models/base'
2
+
3
+ module Qti
4
+ module V2
5
+ module Models
6
+ class Base < Qti::Models::Base
7
+ BODY_ELEMENTS_CSS = %w(
8
+ atomicBlock
9
+ atomicInline
10
+ caption
11
+ choice
12
+ col
13
+ colgroup
14
+ div
15
+ dl
16
+ dlElement
17
+ hr
18
+ img
19
+ li
20
+ object
21
+ ol
22
+ p
23
+ printedVariable
24
+ prompt
25
+ simpleBlock
26
+ simpleInline
27
+ table
28
+ tableCell
29
+ tbody
30
+ templateElement
31
+ tfoot
32
+ thead
33
+ tr
34
+ ul
35
+ infoControl
36
+ ).join(',').freeze
37
+
38
+ INTERACTION_ELEMENTS_CSS = %w(
39
+ blockInteraction
40
+ customInteraction
41
+ inlineInteraction
42
+ positionObjectInteraction
43
+ endAttemptInteraction
44
+ inlineChoiceInteraction
45
+ textEntryInteraction
46
+ associateInteraction
47
+ choiceInteraction
48
+ drawingInteraction
49
+ extendedTextInteraction
50
+ gapMatchInteraction
51
+ graphicInteraction
52
+ hottextInteraction
53
+ matchInteraction
54
+ mediaInteraction
55
+ orderInteraction
56
+ sliderInteraction
57
+ uploadInteraction
58
+ ).join(',').freeze
59
+
60
+ CHOICE_ELEMENTS_CSS = %w(
61
+ simpleChoice
62
+ ).join(',').freeze
63
+
64
+ def qti_version
65
+ 2
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,28 @@
1
+ require 'qti/v2/models/base'
2
+
3
+ module Qti
4
+ module V2
5
+ module Models
6
+ module Choices
7
+ class SimpleChoice < Qti::V2::Models::Base
8
+ PROHIBITED_NODE_NAMES = %w(feedbackInline).join(',').freeze
9
+ def initialize(node)
10
+ @node = node
11
+ end
12
+
13
+ def identifier
14
+ @identifier ||= @node.attributes['identifier'].value
15
+ end
16
+
17
+ def item_body
18
+ @item_body ||= begin
19
+ node = @node.dup
20
+ node.children.filter(PROHIBITED_NODE_NAMES).map(&:unlink)
21
+ node.content.strip.gsub(/\s+/, ' ')
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ # Populate the subclasses
2
+ Dir["#{__dir__}/interactions/*.rb"].each { |f| load f }
3
+
4
+ module Qti
5
+ module V2
6
+ module Models
7
+ module Interactions
8
+ # This one finds the correct parsing model based on the provided xml node
9
+ def self.interaction_model(node)
10
+ subclasses = constants.map { |c| const_get(c) }
11
+
12
+ # Check for matches
13
+ matches = subclasses.each_with_object([]) do |interaction_class, result|
14
+ match = interaction_class.matches(node)
15
+ result << match if match
16
+ end
17
+
18
+ raise V2::UnsupportedSchema if matches.size > 1
19
+
20
+ matches.first
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,50 @@
1
+ require 'qti/v2/models/base'
2
+ require 'qti/v2/models/choices/simple_choice'
3
+
4
+ module Qti
5
+ module V2
6
+ module Models
7
+ module Interactions
8
+ class ChoiceInteraction < Qti::V2::Models::Base
9
+ NODE_NAME = 'choiceInteraction'.freeze
10
+ # This will know if a class matches
11
+ def self.matches(node)
12
+ matches = node.children.filter(INTERACTION_ELEMENTS_CSS).select { |n| n.name == NODE_NAME }
13
+ return false if matches.empty?
14
+
15
+ raise Qti::UnsupportedSchema if matches.size > 1
16
+ new(matches.first)
17
+ end
18
+
19
+ def initialize(node)
20
+ @node = node
21
+ end
22
+
23
+ def shuffled?
24
+ @node.attributes['shuffle'].value == 'true'
25
+ end
26
+
27
+ def answers
28
+ @answers ||= answer_nodes.map do |node|
29
+ V2::Models::Choices::SimpleChoice.new(node)
30
+ end
31
+ end
32
+
33
+ def max_choices_count
34
+ @node.attributes['maxChoices']&.value&.to_i
35
+ end
36
+
37
+ def min_choices_count
38
+ @node.attributes['minChoices']&.value&.to_i
39
+ end
40
+
41
+ private
42
+
43
+ def answer_nodes
44
+ @node.children.filter('simpleChoice')
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,105 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+
3
+ <questestinterop>
4
+
5
+ <assessment title="Quiz" ident="A1001">
6
+ <section title="Main" ident="S1002">
7
+
8
+ <item title="Discussion - content." ident="QUE_1022">
9
+ <presentation>
10
+ <material>
11
+ <mattext texttype="text/html"><![CDATA[A good discussion posting includes which of the following (select all that apply):]]></mattext>
12
+ </material>
13
+ <response_lid ident="QUE_1023_RL" rcardinality="Multiple" rtiming="No">
14
+ <render_choice>
15
+ <response_label ident="QUE_1024_A1">
16
+ <material>
17
+ <mattext texttype="text/html"><![CDATA[Poses a question or invites additional comment from others]]></mattext>
18
+ </material>
19
+ </response_label>
20
+ <response_label ident="QUE_1025_A2">
21
+ <material>
22
+ <mattext texttype="text/html"><![CDATA[Attacks another's post to generate controversy]]></mattext>
23
+ </material>
24
+ </response_label>
25
+ <response_label ident="QUE_1026_A3">
26
+ <material>
27
+ <mattext texttype="text/html"><![CDATA[Expresses an opinion which may be controversial so that others can agree or disagree]]></mattext>
28
+ </material>
29
+ </response_label>
30
+ <response_label ident="QUE_1027_A4">
31
+ <material>
32
+ <mattext texttype="text/html"><![CDATA[Adds information, ideas or suggestions that expand everyone's thinking about the topic]]></mattext>
33
+ </material>
34
+ </response_label>
35
+ <response_label ident="QUE_1028_A5">
36
+ <material>
37
+ <mattext texttype="text/html"><![CDATA[Reiterates the consensus or restates the ideas of others without adding independent thought]]></mattext>
38
+ </material>
39
+ </response_label>
40
+ <response_label ident="QUE_1029_A6">
41
+ <material>
42
+ <mattext texttype="text/html"><![CDATA[Provides non-specific praise for fellow learners like "good job" or "I loved your idea"]]></mattext>
43
+ </material>
44
+ </response_label>
45
+ <response_label ident="QUE_1030_A7">
46
+ <material>
47
+ <mattext texttype="text/html"><![CDATA[Responds positively to a person's comment and includes their name or quote from the original posting that supports your expanded idea]]></mattext>
48
+ </material>
49
+ </response_label>
50
+ </render_choice>
51
+ </response_lid>
52
+ </presentation>
53
+ <resprocessing>
54
+ <outcomes>
55
+ <decvar vartype="Decimal" defaultval="0" varname="que_score" maxvalue="10.00" minvalue="0"/>
56
+ </outcomes>
57
+ <respcondition>
58
+ <conditionvar>
59
+ <varequal respident="QUE_1023_RL">QUE_1024_A1</varequal>
60
+ </conditionvar>
61
+ <setvar varname="que_score" action="Add">25.00</setvar>
62
+ </respcondition>
63
+ <respcondition>
64
+ <conditionvar>
65
+ <varequal respident="QUE_1023_RL">QUE_1025_A2</varequal>
66
+ </conditionvar>
67
+ <setvar varname="que_score" action="Add">-10.00</setvar>
68
+ </respcondition>
69
+ <respcondition>
70
+ <conditionvar>
71
+ <varequal respident="QUE_1023_RL">QUE_1026_A3</varequal>
72
+ </conditionvar>
73
+ <setvar varname="que_score" action="Add">25.00</setvar>
74
+ </respcondition>
75
+ <respcondition>
76
+ <conditionvar>
77
+ <varequal respident="QUE_1023_RL">QUE_1027_A4</varequal>
78
+ </conditionvar>
79
+ <setvar varname="que_score" action="Add">25.00</setvar>
80
+ </respcondition>
81
+ <respcondition>
82
+ <conditionvar>
83
+ <varequal respident="QUE_1023_RL">QUE_1028_A5</varequal>
84
+ </conditionvar>
85
+ <setvar varname="que_score" action="Add">-10.00</setvar>
86
+ </respcondition>
87
+ <respcondition>
88
+ <conditionvar>
89
+ <varequal respident="QUE_1023_RL">QUE_1029_A6</varequal>
90
+ </conditionvar>
91
+ <setvar varname="que_score" action="Add">-10.00</setvar>
92
+ </respcondition>
93
+ <respcondition>
94
+ <conditionvar>
95
+ <varequal respident="QUE_1023_RL">QUE_1030_A7</varequal>
96
+ </conditionvar>
97
+ <setvar varname="que_score" action="Add">25.00</setvar>
98
+ </respcondition>
99
+ </resprocessing>
100
+ </item>
101
+
102
+ </section>
103
+ </assessment>
104
+
105
+ </questestinterop>
@@ -0,0 +1,83 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+
3
+ <questestinterop>
4
+
5
+ <assessment title="1.2 Import Quiz" ident="A1001">
6
+ <section title="Main" ident="S1002">
7
+
8
+ <item title="How much time each week?" ident="QUE_1007">
9
+ <presentation>
10
+ <material>
11
+ <mattext texttype="text/html"><![CDATA[How much time should you spend working on your online course each week in order to earn credit? <img align="bottom" alt="image.png" src="$IMS_CC_FILE_BASE$org1/images/image.png" border="0"/>]]></mattext>
12
+ </material>
13
+ <response_lid ident="QUE_1008_RL" rcardinality="Single" rtiming="No">
14
+ <render_choice>
15
+ <response_label ident="QUE_1009_A1">
16
+ <material>
17
+ <mattext texttype="text/html"><![CDATA[However long it takes]]></mattext>
18
+ </material>
19
+ </response_label>
20
+ <response_label ident="QUE_1010_A2">
21
+ <material>
22
+ <mattext texttype="text/html"><![CDATA[30 - 90 minutes]]></mattext>
23
+ </material>
24
+ </response_label>
25
+ <response_label ident="QUE_1011_A3">
26
+ <material>
27
+ <mattext texttype="text/html"><![CDATA[1 - 2 hours]]></mattext>
28
+ </material>
29
+ </response_label>
30
+ <response_label ident="QUE_1012_A4">
31
+ <material>
32
+ <mattext texttype="text/html"><![CDATA[At least 3 hours]]></mattext>
33
+ </material>
34
+ </response_label>
35
+ <response_label ident="QUE_1013_A5">
36
+ <material>
37
+ <mattext texttype="text/html"><![CDATA[6 or more hours]]></mattext>
38
+ </material>
39
+ </response_label>
40
+ </render_choice>
41
+ </response_lid>
42
+ </presentation>
43
+ <resprocessing>
44
+ <outcomes>
45
+ <decvar vartype="Decimal" defaultval="0" varname="que_score"/>
46
+ </outcomes>
47
+ <respcondition>
48
+ <conditionvar>
49
+ <varequal respident="QUE_1008_RL">QUE_1009_A1</varequal>
50
+ </conditionvar>
51
+ <setvar varname="que_score" action="Add">0</setvar>
52
+ </respcondition>
53
+ <respcondition>
54
+ <conditionvar>
55
+ <varequal respident="QUE_1008_RL">QUE_1010_A2</varequal>
56
+ </conditionvar>
57
+ <setvar varname="que_score" action="Add">0</setvar>
58
+ </respcondition>
59
+ <respcondition>
60
+ <conditionvar>
61
+ <varequal respident="QUE_1008_RL">QUE_1011_A3</varequal>
62
+ </conditionvar>
63
+ <setvar varname="que_score" action="Add">0</setvar>
64
+ </respcondition>
65
+ <respcondition>
66
+ <conditionvar>
67
+ <varequal respident="QUE_1008_RL">QUE_1012_A4</varequal>
68
+ </conditionvar>
69
+ <setvar varname="que_score" action="Set">10.00</setvar>
70
+ </respcondition>
71
+ <respcondition>
72
+ <conditionvar>
73
+ <varequal respident="QUE_1008_RL">QUE_1013_A5</varequal>
74
+ </conditionvar>
75
+ <setvar varname="que_score" action="Add">0</setvar>
76
+ </respcondition>
77
+ </resprocessing>
78
+ </item>
79
+
80
+ </section>
81
+ </assessment>
82
+
83
+ </questestinterop>
@@ -0,0 +1,50 @@
1
+ <?xml version="1.0" encoding="ISO-8859-1"?>
2
+
3
+ <questestinterop>
4
+
5
+ <assessment title="1.2 Import Quiz" ident="A1001">
6
+ <section title="Main" ident="S1002">
7
+
8
+ <item title="Grading - specific - 3 pt score" ident="QUE_1003">
9
+ <presentation>
10
+ <material>
11
+ <mattext texttype="text/html"><![CDATA[If I get a 3, I must have done something wrong. <img align="bottom" alt="image.png" src="org0/images/image.png" border="0"/>]]></mattext>
12
+ </material>
13
+ <response_lid ident="QUE_1004_RL" rcardinality="Single" rtiming="No">
14
+ <render_choice shuffle= "Yes">
15
+ <response_label ident="QUE_1005_A1">
16
+ <material>
17
+ <mattext texttype="text/html"><![CDATA[True]]></mattext>
18
+ </material>
19
+ </response_label>
20
+ <response_label ident="QUE_1006_A2">
21
+ <material>
22
+ <mattext texttype="text/html"><![CDATA[False]]></mattext>
23
+ </material>
24
+ </response_label>
25
+ </render_choice>
26
+ </response_lid>
27
+ </presentation>
28
+ <resprocessing>
29
+ <outcomes>
30
+ <decvar vartype="Decimal" defaultval="0" varname="que_score"/>
31
+ </outcomes>
32
+ <respcondition>
33
+ <conditionvar>
34
+ <varequal respident="QUE_1004_RL">QUE_1005_A1</varequal>
35
+ </conditionvar>
36
+ <setvar varname="que_score" action="Add">0</setvar>
37
+ </respcondition>
38
+ <respcondition>
39
+ <conditionvar>
40
+ <varequal respident="QUE_1004_RL">QUE_1006_A2</varequal>
41
+ </conditionvar>
42
+ <setvar varname="que_score" action="Set">10.00</setvar>
43
+ </respcondition>
44
+ </resprocessing>
45
+ </item>
46
+
47
+ </section>
48
+ </assessment>
49
+
50
+ </questestinterop>
@@ -0,0 +1,79 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!-- This item is a true/false question with modal feedback, adapted from the CC question QUE_102010.xml -->
3
+ <assessmentItem xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+ xsi:schemaLocation="http://www.imsglobal.org/xsd/imsqti_v2p2 http://www.imsglobal.org/xsd/qti/qtiv2p2/imsqti_v2p2.xsd"
5
+ xmlns="http://www.imsglobal.org/xsd/imsqti_v2p2" identifier="Example01-modalFeedback"
6
+ title="Example 1 - modal feedback" adaptive="false" timeDependent="false">
7
+ <responseDeclaration identifier="RESPONSE" cardinality="single" baseType="identifier">
8
+
9
+ <!--The response variable RESPONSE will hold the candidate's input-->
10
+
11
+ <correctResponse>
12
+
13
+ <!--The value of the right answer is declared-->
14
+
15
+ <value>true</value>
16
+ </correctResponse>
17
+ </responseDeclaration>
18
+
19
+ <!--Define a feedback variable; its baseType is "identifier" so that it can contain
20
+ the identifier of the feedback message-->
21
+
22
+ <outcomeDeclaration identifier="FEEDBACK" cardinality="single" baseType="identifier"/>
23
+ <outcomeDeclaration identifier="SCORE" cardinality="single" baseType="float"
24
+ normalMaximum="10.0">
25
+ <defaultValue>
26
+ <value>0</value>
27
+ </defaultValue>
28
+ </outcomeDeclaration>
29
+ <outcomeDeclaration identifier="MAXSCORE" cardinality="single" baseType="float">
30
+ <defaultValue>
31
+ <value>10.0</value>
32
+ </defaultValue>
33
+ </outcomeDeclaration>
34
+ <itemBody>
35
+ <choiceInteraction responseIdentifier="RESPONSE" shuffle="false" maxChoices="1">
36
+ <prompt>Sigmund Freud and Carl Jung both belong to the psychoanalytic school of
37
+ psychology.</prompt>
38
+ <simpleChoice identifier="true" fixed="true">True </simpleChoice>
39
+ <simpleChoice identifier="false" fixed="true">False </simpleChoice>
40
+ </choiceInteraction>
41
+ </itemBody>
42
+ <responseProcessing>
43
+ <responseCondition>
44
+ <responseIf>
45
+ <match>
46
+
47
+ <!--The value of RESPONSE is compared with the correct value identified
48
+ in the RESPONSE declaration-->
49
+
50
+ <variable identifier="RESPONSE"/>
51
+ <correct identifier="RESPONSE"/>
52
+ </match>
53
+ <setOutcomeValue identifier="SCORE">
54
+ <variable identifier="MAXSCORE"/>
55
+ </setOutcomeValue>
56
+ <setOutcomeValue identifier="FEEDBACK">
57
+ <baseValue baseType="identifier">correct</baseValue>
58
+ </setOutcomeValue>
59
+ </responseIf>
60
+ <responseElse>
61
+
62
+ <!--Depending on whether the input matches the correct answer or not, FEEDBACK
63
+ is given the value of the identifier of the appropriate feedback message-->
64
+
65
+ <setOutcomeValue identifier="FEEDBACK">
66
+ <baseValue baseType="identifier">incorrect</baseValue>
67
+ </setOutcomeValue>
68
+ </responseElse>
69
+ </responseCondition>
70
+ </responseProcessing>
71
+
72
+ <!-- Note how the identifiers in the following modalFeedback elements match those of the
73
+ setOutcomeValue elements above -->
74
+
75
+ <modalFeedback outcomeIdentifier="FEEDBACK" showHide="show" identifier="correct"
76
+ >correct</modalFeedback>
77
+ <modalFeedback outcomeIdentifier="FEEDBACK" showHide="show" identifier="incorrect"
78
+ >incorrect</modalFeedback>
79
+ </assessmentItem>