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.
- checksums.yaml +7 -0
- data/README.md +28 -0
- data/Rakefile +1 -0
- data/lib/qti.rb +62 -0
- data/lib/qti/models/base.rb +80 -0
- data/lib/qti/models/manifest.rb +20 -0
- data/lib/qti/v1/models/assessment.rb +17 -0
- data/lib/qti/v1/models/assessment_item.rb +59 -0
- data/lib/qti/v1/models/base.rb +13 -0
- data/lib/qti/v1/models/choices/logical_identifier_choice.rb +26 -0
- data/lib/qti/v1/models/interactions/logical_identifier_interaction.rb +32 -0
- data/lib/qti/v2/models/assessment_item.rb +62 -0
- data/lib/qti/v2/models/assessment_test.rb +32 -0
- data/lib/qti/v2/models/base.rb +70 -0
- data/lib/qti/v2/models/choices/simple_choice.rb +28 -0
- data/lib/qti/v2/models/interactions.rb +25 -0
- data/lib/qti/v2/models/interactions/choice_interaction.rb +50 -0
- data/spec/fixtures/items_1.2/multiple_answer.xml +105 -0
- data/spec/fixtures/items_1.2/multiple_choice.xml +83 -0
- data/spec/fixtures/items_1.2/true_false.xml +50 -0
- data/spec/fixtures/items_2.1/Example01-modalFeedback.xml +79 -0
- data/spec/fixtures/items_2.1/Example02-feedbackInline.xml +67 -0
- data/spec/fixtures/items_2.1/Example03-feedbackBlock-solution-random.xml +223 -0
- data/spec/fixtures/items_2.1/Example03-feedbackBlock-solution.xml +238 -0
- data/spec/fixtures/items_2.1/Example04-feedbackBlock-templateBlock.xml +582 -0
- data/spec/fixtures/items_2.1/Example05-feedbackBlock-adaptive.xml +397 -0
- data/spec/fixtures/items_2.1/adaptive.xml +286 -0
- data/spec/fixtures/items_2.1/adaptive_template.xml +350 -0
- data/spec/fixtures/items_2.1/associate.xml +33 -0
- data/spec/fixtures/items_2.1/audio-video.xml +46 -0
- data/spec/fixtures/items_2.1/choice.xml +31 -0
- data/spec/fixtures/items_2.1/choice_aria.xml +42 -0
- data/spec/fixtures/items_2.1/choice_fixed.xml +33 -0
- data/spec/fixtures/items_2.1/choice_multiple.xml +31 -0
- data/spec/fixtures/items_2.1/choice_multiple_chocolade.xml +74 -0
- data/spec/fixtures/items_2.1/choice_multiple_rtl.xml +33 -0
- data/spec/fixtures/items_2.1/choice_ruby.xml +39 -0
- data/spec/fixtures/items_2.1/choice_t_f.xml +30 -0
- data/spec/fixtures/items_2.1/choice_true_false.xml +30 -0
- data/spec/fixtures/items_2.1/data-attributes.xml +61 -0
- data/spec/fixtures/items_2.1/drawing.xml +16 -0
- data/spec/fixtures/items_2.1/essay.xml +14 -0
- data/spec/fixtures/items_2.1/extended_text.xml +24 -0
- data/spec/fixtures/items_2.1/extended_text_rubric.xml +36 -0
- data/spec/fixtures/items_2.1/feedback_adaptive.xml +142 -0
- data/spec/fixtures/items_2.1/figures.xml +32 -0
- data/spec/fixtures/items_2.1/gap_match.xml +33 -0
- data/spec/fixtures/items_2.1/graphic_associate.xml +36 -0
- data/spec/fixtures/items_2.1/graphic_gap_match.xml +54 -0
- data/spec/fixtures/items_2.1/graphic_gap_match_text.xml +50 -0
- data/spec/fixtures/items_2.1/graphic_order.xml +32 -0
- data/spec/fixtures/items_2.1/hint.xml +85 -0
- data/spec/fixtures/items_2.1/hotspot.xml +26 -0
- data/spec/fixtures/items_2.1/hottext.xml +33 -0
- data/spec/fixtures/items_2.1/images/CBG.png +0 -0
- data/spec/fixtures/items_2.1/images/EBG.png +0 -0
- data/spec/fixtures/items_2.1/images/EDI.png +0 -0
- data/spec/fixtures/items_2.1/images/GLA.png +0 -0
- data/spec/fixtures/items_2.1/images/MAN.png +0 -0
- data/spec/fixtures/items_2.1/images/MCH.png +0 -0
- data/spec/fixtures/items_2.1/images/airport.png +0 -0
- data/spec/fixtures/items_2.1/images/blueStar.png +0 -0
- data/spec/fixtures/items_2.1/images/blue_door.png +0 -0
- data/spec/fixtures/items_2.1/images/bus.png +0 -0
- data/spec/fixtures/items_2.1/images/castle.png +0 -0
- data/spec/fixtures/items_2.1/images/greenTriangle.png +0 -0
- data/spec/fixtures/items_2.1/images/green_door.png +0 -0
- data/spec/fixtures/items_2.1/images/house.png +0 -0
- data/spec/fixtures/items_2.1/images/open_car.png +0 -0
- data/spec/fixtures/items_2.1/images/open_goat.png +0 -0
- data/spec/fixtures/items_2.1/images/plane.png +0 -0
- data/spec/fixtures/items_2.1/images/postcard.eps +3581 -0
- data/spec/fixtures/items_2.1/images/postcard.png +0 -0
- data/spec/fixtures/items_2.1/images/rectangle.svg +1 -0
- data/spec/fixtures/items_2.1/images/redCircle.png +0 -0
- data/spec/fixtures/items_2.1/images/red_door.png +0 -0
- data/spec/fixtures/items_2.1/images/sign.png +0 -0
- data/spec/fixtures/items_2.1/images/survey.jpg +0 -0
- data/spec/fixtures/items_2.1/images/train.png +0 -0
- data/spec/fixtures/items_2.1/images/uk.png +0 -0
- data/spec/fixtures/items_2.1/images/ukair.png +0 -0
- data/spec/fixtures/items_2.1/images/ukairtags.png +0 -0
- data/spec/fixtures/items_2.1/imsmanifest.xml +227 -0
- data/spec/fixtures/items_2.1/inline_choice.xml +26 -0
- data/spec/fixtures/items_2.1/inline_choice_math.xml +68 -0
- data/spec/fixtures/items_2.1/likert.xml +21 -0
- data/spec/fixtures/items_2.1/match.xml +41 -0
- data/spec/fixtures/items_2.1/math.xml +35 -0
- data/spec/fixtures/items_2.1/mc_calc3.xml +164 -0
- data/spec/fixtures/items_2.1/mc_calc5.xml +211 -0
- data/spec/fixtures/items_2.1/mc_stat2.xml +219 -0
- data/spec/fixtures/items_2.1/media_coords.xml +33 -0
- data/spec/fixtures/items_2.1/multi-input.xml +271 -0
- data/spec/fixtures/items_2.1/nested_object.xml +26 -0
- data/spec/fixtures/items_2.1/order.xml +25 -0
- data/spec/fixtures/items_2.1/order_partial_scoring.xml +55 -0
- data/spec/fixtures/items_2.1/order_rtl.xml +27 -0
- data/spec/fixtures/items_2.1/orkney1.xml +34 -0
- data/spec/fixtures/items_2.1/orkney2.xml +34 -0
- data/spec/fixtures/items_2.1/position_object.xml +34 -0
- data/spec/fixtures/items_2.1/select_point.xml +23 -0
- data/spec/fixtures/items_2.1/shared/orkney.css +1 -0
- data/spec/fixtures/items_2.1/shared/orkney.html +20 -0
- data/spec/fixtures/items_2.1/slider.xml +35 -0
- data/spec/fixtures/items_2.1/svg.xml +28 -0
- data/spec/fixtures/items_2.1/template.xml +88 -0
- data/spec/fixtures/items_2.1/template_image.xml +74 -0
- data/spec/fixtures/items_2.1/text_entry.xml +27 -0
- data/spec/fixtures/items_2.1/upload.xml +18 -0
- data/spec/fixtures/items_2.1/upload_composite.xml +24 -0
- data/spec/fixtures/test_qti_1.2.zip +0 -0
- data/spec/fixtures/test_qti_1.2/contact info.png +0 -0
- data/spec/fixtures/test_qti_1.2/exam1/my_files/org0/images/image.png +0 -0
- data/spec/fixtures/test_qti_1.2/exam1/my_files/org1/images/image.png +0 -0
- data/spec/fixtures/test_qti_1.2/image.png +0 -0
- data/spec/fixtures/test_qti_1.2/imsmanifest.xml +37 -0
- data/spec/fixtures/test_qti_1.2/quiz.xml +216 -0
- data/spec/fixtures/test_qti_2.1.zip +0 -0
- data/spec/fixtures/test_qti_2.1/assessment.xml +77 -0
- data/spec/fixtures/test_qti_2.1/imsmanifest.xml +211 -0
- data/spec/fixtures/test_qti_2.1/mathassess.xsd +54 -0
- data/spec/fixtures/test_qti_2.1/multiple-answer/multiple-answer.xml +31 -0
- data/spec/fixtures/test_qti_2.1/multiple-choice/multiple-choice.xml +31 -0
- data/spec/fixtures/test_qti_2.1/text-entry/text-entry.xml +330 -0
- data/spec/fixtures/test_qti_2.1/true-false/true-false.xml +55 -0
- data/spec/fixtures/tests/feedbackTest/assessment.xml +252 -0
- data/spec/fixtures/tests/feedbackTest/id-38d47747fb30/Example02-feedbackInline.xml +51 -0
- data/spec/fixtures/tests/feedbackTest/id-5e216df10030/Example03-feedbackBlock-solution.xml +199 -0
- data/spec/fixtures/tests/feedbackTest/id-9c33d141576e/Example05-feedbackBlock-adaptive.xml +330 -0
- data/spec/fixtures/tests/feedbackTest/id-aaa0bbf5da1d/Example03-feedbackBlock-solution-random.xml +223 -0
- data/spec/fixtures/tests/feedbackTest/id-d599169403d2/Example04-feedbackBlock-templateBlock.xml +534 -0
- data/spec/fixtures/tests/feedbackTest/id-fa3ee5852723/Example01-modalFeedback.xml +55 -0
- data/spec/fixtures/tests/feedbackTest/imsmanifest.xml +239 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Choicemultiple_2014410822.xml +110 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Choicemultiple_871212949.xml +208 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Choicesingle_853928446.xml +159 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Choicetruefalse_176040516.xml +98 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Hotspot_278940407.xml +109 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Hottext_801974120.xml +106 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/InteractionMixSachsen_1901710679.xml +54 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Matchmultiple_1038910213.xml +139 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Matchsingle_143114773.xml +133 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/Order_913967682.xml +117 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/TextEntry_883368511.xml +114 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/TextEntrynumeric_2040297025.xml +154 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/TextEntrynumeric_770468849.xml +124 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/TextEntrysubset_806481421.xml +227 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/imsmanifest.xml +278 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/03c5e2f774db49598deb3ac7d05b53f9.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/0563e67fb1bb48ad882e0a5abf2a2686.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/2f44366716474a5d8e2a2e32346cbc05.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/71a299b50b5e4b1492f8ee51ce25be7d.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/a439b702d5034ca38f6df26a12835db3.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/b660fc9f268c4ef688d8606116c70160.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/c2f541343b9b4bfdba9fc90c7a18403e.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/e18b5a2eb8104d0994a182ee0176a05c.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/f88c5aa2c6724a388fdbadc7133eb757.jpg +0 -0
- data/spec/fixtures/tests/interactionmix_saxony_v3/media/ffe337505ef74334a0cecb33310f99c1.jpg +0 -0
- data/spec/fixtures/tests/tests/complete.xml +33 -0
- data/spec/fixtures/tests/tests/report.xml +70 -0
- data/spec/fixtures/tests/tests/rtest01-fragment.xml +12 -0
- data/spec/fixtures/tests/tests/rtest01-set01.xml +17 -0
- data/spec/fixtures/tests/tests/rtest01-set02.xml +17 -0
- data/spec/fixtures/tests/tests/rtest01-set03.xml +17 -0
- data/spec/fixtures/tests/tests/rtest01.xml +16 -0
- data/spec/fixtures/tests/tests/rtest02.xml +48 -0
- data/spec/fixtures/tests/tests/rtest03.xml +38 -0
- data/spec/fixtures/tests/tests/rtest04.xml +50 -0
- data/spec/fixtures/tests/tests/rtest06.xml +34 -0
- data/spec/fixtures/tests/tests/rtest08.xml +38 -0
- data/spec/fixtures/tests/tests/rtest09.xml +33 -0
- data/spec/fixtures/tests/tests/rtest10.xml +48 -0
- data/spec/fixtures/tests/tests/rtest12.xml +38 -0
- data/spec/fixtures/tests/tests/rtest13.xml +62 -0
- data/spec/fixtures/tests/tests/rtest22.xml +41 -0
- data/spec/fixtures/tests/tests/rtest24.xml +37 -0
- data/spec/fixtures/tests/tests/rtest25.xml +62 -0
- data/spec/fixtures/tests/tests/rtest26.xml +38 -0
- data/spec/fixtures/tests/tests/rtest27.xml +46 -0
- data/spec/qti/models/base_spec.rb +71 -0
- data/spec/qti/models/manifest_spec.rb +19 -0
- data/spec/qti/v1/models/assessment_item_spec.rb +49 -0
- data/spec/qti/v1/models/assessment_spec.rb +18 -0
- data/spec/qti/v1/models/choices/logical_identifier_choice_spec.rb +23 -0
- data/spec/qti/v1/models/interactions/logical_identifier_interaction_spec.rb +20 -0
- data/spec/qti/v2/models/assessment_item_spec.rb +67 -0
- data/spec/qti/v2/models/assessment_test_spec.rb +60 -0
- data/spec/qti/v2/models/choices/simple_choice_spec.rb +22 -0
- data/spec/qti/v2/models/interactions/choice_interaction_spec.rb +27 -0
- data/spec/qti_spec.rb +38 -0
- data/spec/spec_helper.rb +10 -0
- 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>
|