qti 2.0.0 → 2.4.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/qti.rb +1 -0
- data/lib/qti/models/assessment_meta.rb +78 -3
- data/lib/qti/models/resource.rb +26 -2
- data/lib/qti/v1/models/interactions/base_fill_blank_interaction.rb +33 -1
- data/lib/qti/v1/models/interactions/canvas_multiple_dropdown.rb +2 -29
- data/lib/qti/v1/models/object_bank.rb +14 -0
- data/lib/qti/version.rb +1 -1
- data/spec/fixtures/items_1.2/canvas_multiple_fib_extra_brackets.xml +244 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_1/gba044ae1fc7cfd3dc413e0df695e0068/assessment_meta.xml +76 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_1/gba044ae1fc7cfd3dc413e0df695e0068/gba044ae1fc7cfd3dc413e0df695e0068.xml +17 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_1/imsmanifest.xml +39 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_2/gba044ae1fc7cfd3dc413e0df695e0068/assessment_meta.xml +76 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_2/gba044ae1fc7cfd3dc413e0df695e0068/gba044ae1fc7cfd3dc413e0df695e0068.xml +17 -0
- data/spec/fixtures/test_qti_1.2_canvas_extended_2/imsmanifest.xml +39 -0
- data/spec/fixtures/with_banks/g9a20cf3af178b54e4792cbe992f65790/assessment_meta.xml +69 -0
- data/spec/fixtures/with_banks/g9a20cf3af178b54e4792cbe992f65790/assessment_qti.xml +99 -0
- data/spec/fixtures/with_banks/imsmanifest.xml +54 -0
- data/spec/fixtures/with_banks/non_cc_assessments/g195e078fb6e3c4054e38e5c9226287ba.xml.qti +85 -0
- data/spec/fixtures/with_banks/non_cc_assessments/g9a20cf3af178b54e4792cbe992f65790.xml.qti +107 -0
- data/spec/fixtures/with_banks/non_cc_assessments/gab22de457404cb5cf022078f1e4da75e.xml.qti +59 -0
- data/spec/fixtures/with_banks/non_cc_assessments/gf3edf8167be16b3a65a00ca923132b07.xml.qti +145 -0
- data/spec/lib/qti/models/assessment_meta_spec.rb +104 -2
- data/spec/lib/qti/models/resource_spec.rb +14 -0
- data/spec/lib/qti/v1/models/interactions/base_fill_blank_interaction_spec.rb +146 -0
- data/spec/lib/qti/v1/models/interactions/canvas_multiple_dropdown_spec.rb +0 -27
- data/spec/lib/qti/v1/models/object_bank_spec.rb +39 -0
- metadata +38 -12
- data/spec/gemfiles/nokogiri-1.6.gemfile.lock +0 -149
- data/spec/gemfiles/nokogiri-1.8.gemfile.lock +0 -149
- data/spec/gemfiles/rails-5.2.gemfile.lock +0 -222
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e2bee92dd9195efe9dc1090f31feddbdd5855bcc568d12fa96295ed76170a35b
|
4
|
+
data.tar.gz: c8425f330cd1064c9f6bed05b0d8b9b320c0459ed500effbbe68401763a8700b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2f27410ea9b343e14556b8974acd7d5b6ab6221f1648bb83d5f59f1dd8959f7113f2c8994f1238b705e4031dafd1b985d0e665587f1606339c492d0f458fea4
|
7
|
+
data.tar.gz: c21efb6d52ff0d4651ba245f95d5c993cc500e9c9ff147fd866d811b0e2e6ba712fbc41dd0337b7dfc347da409985d13a05f68c81357c76f9c0ffde0b9f972e3
|
data/lib/qti.rb
CHANGED
@@ -103,6 +103,7 @@ require 'qti/models/manifest'
|
|
103
103
|
require 'qti/v1/models/assessment_item'
|
104
104
|
require 'qti/v1/models/choices/logical_identifier_choice'
|
105
105
|
require 'qti/v1/models/choices/fill_blank_choice'
|
106
|
+
require 'qti/v1/models/object_bank'
|
106
107
|
require 'qti/v1/models/scoring_data'
|
107
108
|
require 'qti/v1/models/stimulus_item'
|
108
109
|
require 'qti/v1/models/question_group'
|
@@ -125,14 +125,84 @@ module Qti
|
|
125
125
|
@doc.xpath('//xmlns:quiz/xmlns:assignment/xmlns:quiz_identifierref')&.first&.content
|
126
126
|
end
|
127
127
|
|
128
|
+
def lock_at
|
129
|
+
tag_under_quiz('lock_at')
|
130
|
+
end
|
131
|
+
|
132
|
+
def unlock_at
|
133
|
+
tag_under_quiz('unlock_at')
|
134
|
+
end
|
135
|
+
|
136
|
+
def due_at
|
137
|
+
tag_under_quiz('due_at')
|
138
|
+
end
|
139
|
+
|
140
|
+
def access_code
|
141
|
+
code = sanitize_content!(tag_under_quiz('access_code'))
|
142
|
+
return nil if code.to_s.empty?
|
143
|
+
code
|
144
|
+
end
|
145
|
+
|
146
|
+
def ip_filter
|
147
|
+
tag_under_quiz('ip_filter')
|
148
|
+
end
|
149
|
+
|
150
|
+
def time_limit_raw
|
151
|
+
tag_under_quiz('time_limit')
|
152
|
+
end
|
153
|
+
|
154
|
+
def time_limit
|
155
|
+
return nil if time_limit_raw.nil?
|
156
|
+
time_limit_raw.to_i
|
157
|
+
end
|
158
|
+
|
159
|
+
def show_correct_answers_at
|
160
|
+
tag_under_quiz('show_correct_answers_at')
|
161
|
+
end
|
162
|
+
|
163
|
+
def hide_correct_answers_at
|
164
|
+
tag_under_quiz('hide_correct_answers_at')
|
165
|
+
end
|
166
|
+
|
167
|
+
def require_lockdown_browser
|
168
|
+
tag_under_quiz('require_lockdown_browser')
|
169
|
+
end
|
170
|
+
|
171
|
+
def require_lockdown_browser?
|
172
|
+
string_true?(require_lockdown_browser)
|
173
|
+
end
|
174
|
+
|
175
|
+
def require_lockdown_browser_for_results
|
176
|
+
tag_under_quiz('require_lockdown_browser_for_results')
|
177
|
+
end
|
178
|
+
|
179
|
+
def require_lockdown_browser_for_results?
|
180
|
+
string_true?(require_lockdown_browser_for_results)
|
181
|
+
end
|
182
|
+
|
183
|
+
def require_lockdown_browser_monitor
|
184
|
+
tag_under_quiz('require_lockdown_browser_monitor')
|
185
|
+
end
|
186
|
+
|
187
|
+
def require_lockdown_browser_monitor?
|
188
|
+
string_true?(require_lockdown_browser_monitor)
|
189
|
+
end
|
190
|
+
|
191
|
+
def lockdown_browser_monitor_data
|
192
|
+
tag_under_quiz('lockdown_browser_monitor_data')
|
193
|
+
end
|
194
|
+
|
128
195
|
private
|
129
196
|
|
130
197
|
def tag_under_quiz(tag)
|
131
|
-
@doc.xpath("//xmlns:quiz/xmlns:#{tag}")&.first&.content
|
198
|
+
value = @doc.xpath("//xmlns:quiz/xmlns:#{tag}")&.first&.content
|
199
|
+
# If the tag is present but has no content, return nil
|
200
|
+
return nil if value.to_s.empty?
|
201
|
+
value
|
132
202
|
end
|
133
203
|
|
134
204
|
def string_true?(value)
|
135
|
-
value&.casecmp('true')&.zero?
|
205
|
+
value&.casecmp('true')&.zero? || false
|
136
206
|
end
|
137
207
|
end
|
138
208
|
|
@@ -143,7 +213,12 @@ module Qti
|
|
143
213
|
:could_be_locked?, :allowed_attempts, :one_question_at_a_time?,
|
144
214
|
:cant_go_back?, :available?, :one_time_results?,
|
145
215
|
:show_correct_answers_attempt?, :only_visible_to_overrides?,
|
146
|
-
:module_locked?,
|
216
|
+
:module_locked?, :access_code, :ip_filter, :time_limit,
|
217
|
+
:show_correct_answers_at, :hide_correct_answers_at,
|
218
|
+
:lock_at, :unlock_at, :due_at, :require_lockdown_browser?,
|
219
|
+
:require_lockdown_browser_for_results?,
|
220
|
+
:require_lockdown_browser_monitor?,
|
221
|
+
:lockdown_browser_monitor_data,
|
147
222
|
to: :@canvas_meta_data, prefix: :canvas, allow_nil: true
|
148
223
|
|
149
224
|
alias canvas_instructions canvas_description
|
data/lib/qti/models/resource.rb
CHANGED
@@ -73,6 +73,12 @@ module Qti
|
|
73
73
|
rsc.href
|
74
74
|
end
|
75
75
|
|
76
|
+
def load_asset_resource(rsc_path)
|
77
|
+
doc = Nokogiri.XML(File.read(rsc_path), rsc_path.to_s, &:noblanks)
|
78
|
+
raise ArgumentError unless doc
|
79
|
+
doc
|
80
|
+
end
|
81
|
+
|
76
82
|
def identifier_list(rsc_type)
|
77
83
|
RESOURCE_QTI_TYPES.map do |v|
|
78
84
|
xmlns_resource_list("[#{rtype_predicate(v, rsc_type)}]").map { |r| r[:identifier] }
|
@@ -91,8 +97,26 @@ module Qti
|
|
91
97
|
id_list
|
92
98
|
end
|
93
99
|
|
94
|
-
def
|
95
|
-
|
100
|
+
def associated_content_list
|
101
|
+
predicate = rtype_predicate('associatedcontent', 'learning-application-resource')
|
102
|
+
xmlns_resource_list("[#{predicate}]").map { |r| r[:identifier] }
|
103
|
+
end
|
104
|
+
|
105
|
+
def load_associated_content
|
106
|
+
@_load_associated_content ||= associated_content_list.map do |ident|
|
107
|
+
rsc = resource_for(ident)
|
108
|
+
rsc_path = remap_href_path(asset_resource_for(rsc))
|
109
|
+
doc = load_asset_resource(rsc_path)
|
110
|
+
|
111
|
+
# There are other types, but all we support right now are object banks...
|
112
|
+
Qti::V1::Models::ObjectBank.from_path!(rsc_path, @package_root, rsc) unless doc.search('objectbank').empty?
|
113
|
+
end.reject(&:nil?)
|
114
|
+
end
|
115
|
+
|
116
|
+
def objectbanks
|
117
|
+
load_associated_content.select do |c|
|
118
|
+
c.class == Qti::V1::Models::ObjectBank
|
119
|
+
end
|
96
120
|
end
|
97
121
|
|
98
122
|
def item_resources_v2
|
@@ -7,7 +7,7 @@ module Qti
|
|
7
7
|
|
8
8
|
def canvas_stem_items(item_prompt)
|
9
9
|
item_prompt.split(CANVAS_REGEX).map.with_index do |stem_item, index|
|
10
|
-
if stem_item
|
10
|
+
if canvas_fib_response_ids.include?(stem_item)
|
11
11
|
# Strip the brackets before searching
|
12
12
|
stem_blank(index, canvas_blank_id(stem_item[1..-2]))
|
13
13
|
else
|
@@ -43,6 +43,38 @@ module Qti
|
|
43
43
|
end
|
44
44
|
blank_id
|
45
45
|
end
|
46
|
+
|
47
|
+
def canvas_fib_responses
|
48
|
+
@base_canvas_blanks ||= node.xpath('.//xmlns:response_lid').map do |resp|
|
49
|
+
index = 0
|
50
|
+
{
|
51
|
+
id: resp[:ident],
|
52
|
+
choices:
|
53
|
+
resp.xpath('.//xmlns:response_label').map do |bnode|
|
54
|
+
canvas_blank_choice(bnode, index += 1)
|
55
|
+
end
|
56
|
+
}
|
57
|
+
end
|
58
|
+
@base_canvas_blanks
|
59
|
+
end
|
60
|
+
|
61
|
+
def canvas_fib_response_ids
|
62
|
+
@canvas_fib_response_ids ||= canvas_fib_responses.map { |b| "[#{b[:id].sub(/^response_/, '')}]" }
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def canvas_blank_choice(bnode, index)
|
68
|
+
bnode_id = bnode[:ident]
|
69
|
+
choice = {
|
70
|
+
id: bnode_id,
|
71
|
+
position: index + 1,
|
72
|
+
item_body: bnode.at_xpath('.//xmlns:mattext').text
|
73
|
+
}
|
74
|
+
@blank_choices ||= {}
|
75
|
+
@blank_choices[bnode_id] = choice
|
76
|
+
choice
|
77
|
+
end
|
46
78
|
end
|
47
79
|
end
|
48
80
|
end
|
@@ -14,19 +14,6 @@ module Qti
|
|
14
14
|
canvas_stem_items(node.at_xpath('.//xmlns:presentation/xmlns:material/xmlns:mattext').text)
|
15
15
|
end
|
16
16
|
|
17
|
-
def blanks
|
18
|
-
@blanks = node.xpath('.//xmlns:response_lid').map do |resp|
|
19
|
-
index = 0
|
20
|
-
{
|
21
|
-
id: resp[:ident],
|
22
|
-
choices:
|
23
|
-
resp.xpath('.//xmlns:response_label').map do |bnode|
|
24
|
-
blank_choice(bnode, index += 1)
|
25
|
-
end
|
26
|
-
}
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
17
|
def scoring_data_structs
|
31
18
|
answers.map do |answer|
|
32
19
|
ScoringData.new(
|
@@ -42,12 +29,12 @@ module Qti
|
|
42
29
|
end
|
43
30
|
|
44
31
|
def text_for_entry(entry_id)
|
45
|
-
|
32
|
+
canvas_fib_responses
|
46
33
|
@blank_choices[entry_id][:item_body]
|
47
34
|
end
|
48
35
|
|
49
36
|
def position_for_entry(entry_id)
|
50
|
-
|
37
|
+
canvas_fib_responses
|
51
38
|
@blank_choices[entry_id][:position]
|
52
39
|
end
|
53
40
|
|
@@ -63,20 +50,6 @@ module Qti
|
|
63
50
|
}
|
64
51
|
end
|
65
52
|
end
|
66
|
-
|
67
|
-
private
|
68
|
-
|
69
|
-
def blank_choice(bnode, index)
|
70
|
-
bnode_id = bnode[:ident]
|
71
|
-
choice = {
|
72
|
-
id: bnode_id,
|
73
|
-
position: index + 1,
|
74
|
-
item_body: bnode.at_xpath('.//xmlns:mattext').text
|
75
|
-
}
|
76
|
-
@blank_choices ||= {}
|
77
|
-
@blank_choices[bnode_id] = choice
|
78
|
-
choice
|
79
|
-
end
|
80
53
|
end
|
81
54
|
end
|
82
55
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Qti
|
2
|
+
module V1
|
3
|
+
module Models
|
4
|
+
class ObjectBank < Qti::V1::Models::Assessment
|
5
|
+
# use assessment_items / create_assessment_item from Assessment for bank items
|
6
|
+
def title
|
7
|
+
@title ||= xpath_with_single_check(
|
8
|
+
'.//xmlns:qtimetadatafield/xmlns:fieldlabel[text()="bank_title"]/../xmlns:fieldentry'
|
9
|
+
)&.content || File.basename(@path, '.xml')
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/qti/version.rb
CHANGED
@@ -0,0 +1,244 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<questestinterop xmlns="http://www.imsglobal.org/xsd/ims_qtiasiv1p2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.imsglobal.org/xsd/ims_qtiasiv1p2 http://www.imsglobal.org/xsd/ims_qtiasiv1p2p1.xsd">
|
3
|
+
<item ident="gdc445634f8b3e063eb009700326194e9" title="L2Q2RUnit8q1">
|
4
|
+
<itemmetadata>
|
5
|
+
<qtimetadata>
|
6
|
+
<qtimetadatafield>
|
7
|
+
<fieldlabel>question_type</fieldlabel>
|
8
|
+
<fieldentry>multiple_dropdowns_question</fieldentry>
|
9
|
+
</qtimetadatafield>
|
10
|
+
<qtimetadatafield>
|
11
|
+
<fieldlabel>points_possible</fieldlabel>
|
12
|
+
<fieldentry>7.0</fieldentry>
|
13
|
+
</qtimetadatafield>
|
14
|
+
<qtimetadatafield>
|
15
|
+
<fieldlabel>original_answer_ids</fieldlabel>
|
16
|
+
<fieldentry>8464,265,3002,1356,5614,4002,8630,7844,3602,9525,8390,8745,3760,7542,1523,3317,6768,5823,2492,4494,6742,794,4259,4851,8574</fieldentry>
|
17
|
+
</qtimetadatafield>
|
18
|
+
<qtimetadatafield>
|
19
|
+
<fieldlabel>assessment_question_identifierref</fieldlabel>
|
20
|
+
<fieldentry>gf47b767d37e06559ff801f2d253307ba</fieldentry>
|
21
|
+
</qtimetadatafield>
|
22
|
+
</qtimetadata>
|
23
|
+
</itemmetadata>
|
24
|
+
<presentation>
|
25
|
+
<material>
|
26
|
+
<mattext texttype="text/html"><div>
|
27
|
+
<p><strong><span data-contrast="none">LOREM </span></strong></p>
|
28
|
+
<p><strong><span data-contrast="none">Lorem ipsum dolor sit amet consecteur</span></strong><strong><span data-contrast="none">to</span></strong><strong><span data-contrast="none">? Write the letter of the correct paragraph</span></strong></p>
|
29
|
+
<p> </p>
|
30
|
+
<p><span data-contrast="none"><strong>A.</strong> Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in. </span></p>
|
31
|
+
<p><span data-contrast="none"><strong>B</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in. </span></p>
|
32
|
+
<p><span data-contrast="none"><strong>C</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. </span></p>
|
33
|
+
<p><span data-contrast="none"><strong>D</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt. </span></p>
|
34
|
+
<p><span data-contrast="none"><strong>E</strong>. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in. </span></p>
|
35
|
+
<p><span data-ccp-props='{"201341983":0,"335559739":160,"335559740":240}'> </span><span data-contrast="none">1</span><span data-contrast="none">. L</span><i><span data-contrast="none">orem</span></i><i><span data-contrast="none"> impsum dolor / </span></i><i><span data-contrast="none">ppl</span></i><i><span data-contrast="none"> sit amet consectetur </span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240,"335559991":1080}'> </span></p>
|
36
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span><strong><span data-contrast="none">[1]</span></strong><strong><span data-contrast="auto"> </span></strong><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'> </span></p>
|
37
|
+
<p><span data-contrast="none">2</span><span data-contrast="none">. L</span><i><span data-contrast="none">orem</span></i><i><span data-contrast="none"> ipsum dolor sit amet / </span></i><i><span data-contrast="none">ppl</span></i><i><span data-contrast="none"> consectetur adipiscing</span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'> </span></p>
|
38
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span> <strong><span data-contrast="none">[2]</span></strong><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'> </span></p>
|
39
|
+
<p><span data-contrast="none">3</span><span data-contrast="none">. </span><i><span data-contrast="none">Lorem</span></i><i><span data-contrast="none"> ipsum dolor sit amet</span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240,"335559991":1080}'> </span></p>
|
40
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span><strong><span data-contrast="none">[3]</span></strong><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559685":1080,"335559739":160,"335559740":240}'> </span></p>
|
41
|
+
<p><span data-contrast="none">4</span><span data-contrast="none">. L</span><i><span data-contrast="none">orem</span></i><i><span data-contrast="none"> ipsum dolor sit amet consectetur</span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'> </span></p>
|
42
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span><strong><span data-contrast="none">[4]</span></strong></p>
|
43
|
+
<p><span data-contrast="none">5</span><span data-contrast="none">. L</span><i><span data-contrast="none">irst</span></i><i><span data-contrast="none"> orem ipsum dolor sit </span></i><i><span data-contrast="none">ppl</span></i><span data-contrast="auto"> </span><span data-ccp-props='{"134233117":true,"134233118":true,"201341983":0,"335559739":160,"335559740":240}'> </span></p>
|
44
|
+
<p><span data-contrast="auto"> </span><span data-contrast="none">This note refers to paragraph </span><strong><span data-contrast="none">[5]</span></strong></p>
|
45
|
+
</div></mattext>
|
46
|
+
</material>
|
47
|
+
<response_lid ident="response_1">
|
48
|
+
<material>
|
49
|
+
<mattext>1</mattext>
|
50
|
+
</material>
|
51
|
+
<render_choice>
|
52
|
+
<response_label ident="8464">
|
53
|
+
<material>
|
54
|
+
<mattext texttype="text/plain">A</mattext>
|
55
|
+
</material>
|
56
|
+
</response_label>
|
57
|
+
<response_label ident="265">
|
58
|
+
<material>
|
59
|
+
<mattext texttype="text/plain">B</mattext>
|
60
|
+
</material>
|
61
|
+
</response_label>
|
62
|
+
<response_label ident="3002">
|
63
|
+
<material>
|
64
|
+
<mattext texttype="text/plain">C</mattext>
|
65
|
+
</material>
|
66
|
+
</response_label>
|
67
|
+
<response_label ident="1356">
|
68
|
+
<material>
|
69
|
+
<mattext texttype="text/plain">D</mattext>
|
70
|
+
</material>
|
71
|
+
</response_label>
|
72
|
+
<response_label ident="5614">
|
73
|
+
<material>
|
74
|
+
<mattext texttype="text/plain">E</mattext>
|
75
|
+
</material>
|
76
|
+
</response_label>
|
77
|
+
</render_choice>
|
78
|
+
</response_lid>
|
79
|
+
<response_lid ident="response_2">
|
80
|
+
<material>
|
81
|
+
<mattext>2</mattext>
|
82
|
+
</material>
|
83
|
+
<render_choice>
|
84
|
+
<response_label ident="4002">
|
85
|
+
<material>
|
86
|
+
<mattext texttype="text/plain">A</mattext>
|
87
|
+
</material>
|
88
|
+
</response_label>
|
89
|
+
<response_label ident="8630">
|
90
|
+
<material>
|
91
|
+
<mattext texttype="text/plain">B</mattext>
|
92
|
+
</material>
|
93
|
+
</response_label>
|
94
|
+
<response_label ident="7844">
|
95
|
+
<material>
|
96
|
+
<mattext texttype="text/plain">C</mattext>
|
97
|
+
</material>
|
98
|
+
</response_label>
|
99
|
+
<response_label ident="3602">
|
100
|
+
<material>
|
101
|
+
<mattext texttype="text/plain">D</mattext>
|
102
|
+
</material>
|
103
|
+
</response_label>
|
104
|
+
<response_label ident="9525">
|
105
|
+
<material>
|
106
|
+
<mattext texttype="text/plain">E</mattext>
|
107
|
+
</material>
|
108
|
+
</response_label>
|
109
|
+
</render_choice>
|
110
|
+
</response_lid>
|
111
|
+
<response_lid ident="response_3">
|
112
|
+
<material>
|
113
|
+
<mattext>3</mattext>
|
114
|
+
</material>
|
115
|
+
<render_choice>
|
116
|
+
<response_label ident="8390">
|
117
|
+
<material>
|
118
|
+
<mattext texttype="text/plain">A</mattext>
|
119
|
+
</material>
|
120
|
+
</response_label>
|
121
|
+
<response_label ident="8745">
|
122
|
+
<material>
|
123
|
+
<mattext texttype="text/plain">B</mattext>
|
124
|
+
</material>
|
125
|
+
</response_label>
|
126
|
+
<response_label ident="3760">
|
127
|
+
<material>
|
128
|
+
<mattext texttype="text/plain">C</mattext>
|
129
|
+
</material>
|
130
|
+
</response_label>
|
131
|
+
<response_label ident="7542">
|
132
|
+
<material>
|
133
|
+
<mattext texttype="text/plain">D</mattext>
|
134
|
+
</material>
|
135
|
+
</response_label>
|
136
|
+
<response_label ident="1523">
|
137
|
+
<material>
|
138
|
+
<mattext texttype="text/plain">E</mattext>
|
139
|
+
</material>
|
140
|
+
</response_label>
|
141
|
+
</render_choice>
|
142
|
+
</response_lid>
|
143
|
+
<response_lid ident="response_4">
|
144
|
+
<material>
|
145
|
+
<mattext>4</mattext>
|
146
|
+
</material>
|
147
|
+
<render_choice>
|
148
|
+
<response_label ident="3317">
|
149
|
+
<material>
|
150
|
+
<mattext texttype="text/plain">A</mattext>
|
151
|
+
</material>
|
152
|
+
</response_label>
|
153
|
+
<response_label ident="6768">
|
154
|
+
<material>
|
155
|
+
<mattext texttype="text/plain">B</mattext>
|
156
|
+
</material>
|
157
|
+
</response_label>
|
158
|
+
<response_label ident="5823">
|
159
|
+
<material>
|
160
|
+
<mattext texttype="text/plain">C</mattext>
|
161
|
+
</material>
|
162
|
+
</response_label>
|
163
|
+
<response_label ident="2492">
|
164
|
+
<material>
|
165
|
+
<mattext texttype="text/plain">D</mattext>
|
166
|
+
</material>
|
167
|
+
</response_label>
|
168
|
+
<response_label ident="4494">
|
169
|
+
<material>
|
170
|
+
<mattext texttype="text/plain">E</mattext>
|
171
|
+
</material>
|
172
|
+
</response_label>
|
173
|
+
</render_choice>
|
174
|
+
</response_lid>
|
175
|
+
<response_lid ident="response_5">
|
176
|
+
<material>
|
177
|
+
<mattext>5</mattext>
|
178
|
+
</material>
|
179
|
+
<render_choice>
|
180
|
+
<response_label ident="6742">
|
181
|
+
<material>
|
182
|
+
<mattext texttype="text/plain">A</mattext>
|
183
|
+
</material>
|
184
|
+
</response_label>
|
185
|
+
<response_label ident="794">
|
186
|
+
<material>
|
187
|
+
<mattext texttype="text/plain">B</mattext>
|
188
|
+
</material>
|
189
|
+
</response_label>
|
190
|
+
<response_label ident="4259">
|
191
|
+
<material>
|
192
|
+
<mattext texttype="text/plain">C</mattext>
|
193
|
+
</material>
|
194
|
+
</response_label>
|
195
|
+
<response_label ident="4851">
|
196
|
+
<material>
|
197
|
+
<mattext texttype="text/plain">D</mattext>
|
198
|
+
</material>
|
199
|
+
</response_label>
|
200
|
+
<response_label ident="8574">
|
201
|
+
<material>
|
202
|
+
<mattext texttype="text/plain">E</mattext>
|
203
|
+
</material>
|
204
|
+
</response_label>
|
205
|
+
</render_choice>
|
206
|
+
</response_lid>
|
207
|
+
</presentation>
|
208
|
+
<resprocessing>
|
209
|
+
<outcomes>
|
210
|
+
<decvar maxvalue="100" minvalue="0" varname="SCORE" vartype="Decimal"/>
|
211
|
+
</outcomes>
|
212
|
+
<respcondition>
|
213
|
+
<conditionvar>
|
214
|
+
<varequal respident="response_1">1356</varequal>
|
215
|
+
</conditionvar>
|
216
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
217
|
+
</respcondition>
|
218
|
+
<respcondition>
|
219
|
+
<conditionvar>
|
220
|
+
<varequal respident="response_2">9525</varequal>
|
221
|
+
</conditionvar>
|
222
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
223
|
+
</respcondition>
|
224
|
+
<respcondition>
|
225
|
+
<conditionvar>
|
226
|
+
<varequal respident="response_3">8745</varequal>
|
227
|
+
</conditionvar>
|
228
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
229
|
+
</respcondition>
|
230
|
+
<respcondition>
|
231
|
+
<conditionvar>
|
232
|
+
<varequal respident="response_4">5823</varequal>
|
233
|
+
</conditionvar>
|
234
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
235
|
+
</respcondition>
|
236
|
+
<respcondition>
|
237
|
+
<conditionvar>
|
238
|
+
<varequal respident="response_5">6742</varequal>
|
239
|
+
</conditionvar>
|
240
|
+
<setvar varname="SCORE" action="Add">20.00</setvar>
|
241
|
+
</respcondition>
|
242
|
+
</resprocessing>
|
243
|
+
</item>
|
244
|
+
</questestinterop>
|