proformaxml 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1038 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:proforma:v2.0" xmlns:tns="urn:proforma:v2.0"
3
+ elementFormDefault="qualified">
4
+
5
+ <xs:element name="task" type="tns:task-type">
6
+ <xs:key name="task-fileids">
7
+ <xs:selector xpath=".//tns:file"/>
8
+ <xs:field xpath="@id"/>
9
+ </xs:key>
10
+ <xs:key name="testids">
11
+ <xs:selector xpath=".//tns:test"/>
12
+ <xs:field xpath="@id"/>
13
+ </xs:key>
14
+ <xs:key name="model-solutionids">
15
+ <xs:selector xpath=".//tns:model-solution"/>
16
+ <xs:field xpath="@id"/>
17
+ </xs:key>
18
+ <xs:key name="external-resourceids">
19
+ <xs:selector xpath=".//tns:external-resource"/>
20
+ <xs:field xpath="@id"/>
21
+ </xs:key>
22
+ <xs:keyref name="task-filerefs" refer="tns:task-fileids">
23
+ <xs:selector xpath=".//tns:fileref"/>
24
+ <xs:field xpath="@refid"/>
25
+ </xs:keyref>
26
+ <xs:keyref name="tests-extresrefs-extresref" refer="tns:external-resourceids">
27
+ <xs:selector xpath=".//tns:externalresourceref"/>
28
+ <xs:field xpath="@refid"/>
29
+ </xs:keyref>
30
+ </xs:element>
31
+
32
+ <xs:element name="submission" type="tns:submission-type">
33
+ <xs:unique name="subm-fileids">
34
+ <xs:selector xpath="./tns:files/tns:file"/>
35
+ <xs:field xpath="@id"/>
36
+ </xs:unique>
37
+ <xs:key name="submtask-fileids">
38
+ <xs:selector xpath="./tns:task/tns:files/tns:file"/>
39
+ <xs:field xpath="@id"/>
40
+ </xs:key>
41
+ <xs:key name="submtask-testids">
42
+ <xs:selector xpath=".//tns:test"/>
43
+ <xs:field xpath="@id"/>
44
+ </xs:key>
45
+ <xs:key name="submtask-model-solutionids">
46
+ <xs:selector xpath=".//tns:model-solution"/>
47
+ <xs:field xpath="@id"/>
48
+ </xs:key>
49
+ <xs:key name="submtask-external-resourceids">
50
+ <xs:selector xpath=".//tns:external-resource"/>
51
+ <xs:field xpath="@id"/>
52
+ </xs:key>
53
+ <xs:keyref name="submtask-filerefs" refer="tns:submtask-fileids">
54
+ <xs:selector xpath=".//tns:fileref"/>
55
+ <xs:field xpath="@refid"/>
56
+ </xs:keyref>
57
+ <xs:keyref name="submtask-tests-extresrefs-extresref" refer="tns:submtask-external-resourceids">
58
+ <xs:selector xpath=".//tns:externalresourceref"/>
59
+ <xs:field xpath="@refid"/>
60
+ </xs:keyref>
61
+ </xs:element>
62
+
63
+ <xs:element name="response" type="tns:response-type">
64
+ <xs:key name="resp-fileids">
65
+ <xs:selector xpath=".//tns:file"/>
66
+ <xs:field xpath="@id"/>
67
+ </xs:key>
68
+ <xs:key name="resp-testrespids">
69
+ <xs:selector xpath=".//tns:test-response"/>
70
+ <xs:field xpath="@id"/>
71
+ </xs:key>
72
+ <xs:keyref name="resp-filerefs" refer="tns:resp-fileids">
73
+ <xs:selector xpath=".//tns:fileref"/>
74
+ <xs:field xpath="@refid"/>
75
+ </xs:keyref>
76
+ </xs:element>
77
+
78
+ <xs:complexType name="embedded-txt-file-type">
79
+ <xs:simpleContent>
80
+ <xs:extension base="xs:string">
81
+ <xs:attribute name="filename" type="xs:string" use="required"/>
82
+ </xs:extension>
83
+ </xs:simpleContent>
84
+ </xs:complexType>
85
+
86
+ <xs:complexType name="embedded-bin-file-type">
87
+ <xs:simpleContent>
88
+ <xs:extension base="xs:base64Binary">
89
+ <xs:attribute name="filename" type="xs:string" use="required"/>
90
+ </xs:extension>
91
+ </xs:simpleContent>
92
+ </xs:complexType>
93
+
94
+ <xs:simpleType name="attached-bin-file-type">
95
+ <xs:restriction base="xs:string"/>
96
+ </xs:simpleType>
97
+
98
+ <xs:complexType name="attached-txt-file-type">
99
+ <xs:simpleContent>
100
+ <xs:extension base="xs:string">
101
+ <xs:attribute name="encoding" type="xs:string"/>
102
+ <xs:attribute name="natural-lang" type="xs:language"/>
103
+ </xs:extension>
104
+ </xs:simpleContent>
105
+ </xs:complexType>
106
+
107
+ <xs:group name="file-choice-group">
108
+ <xs:choice>
109
+ <xs:element name="embedded-bin-file" type="tns:embedded-bin-file-type"/>
110
+ <xs:element name="embedded-txt-file" type="tns:embedded-txt-file-type"/>
111
+ <xs:element name="attached-bin-file" type="tns:attached-bin-file-type"/>
112
+ <xs:element name="attached-txt-file" type="tns:attached-txt-file-type"/>
113
+ </xs:choice>
114
+ </xs:group>
115
+
116
+ <xs:complexType name="filerefs-type">
117
+ <xs:sequence maxOccurs="unbounded">
118
+ <xs:element name="fileref" type="tns:fileref-type"/>
119
+ </xs:sequence>
120
+ </xs:complexType>
121
+
122
+ <xs:complexType name="fileref-type">
123
+ <xs:attribute name="refid" type="xs:string" use="required"/>
124
+ </xs:complexType>
125
+
126
+ <xs:simpleType name="description-type">
127
+ <xs:restriction base="xs:string"/>
128
+ </xs:simpleType>
129
+
130
+ <xs:complexType name="grading-hints-type">
131
+ <xs:annotation>
132
+ <xs:documentation xml:lang="en">Root element type of a ProFormA grading-hints element. This includes the complete
133
+ hierarchical grading scheme with all tests references, weights, accumulating functions and nullify conditions.
134
+ Hierarchy nodes and conditions can get a title and descriptions. All information below this element except the
135
+ root node is optional. Grader-specific hints from other XML namespaces can be included in xs:any elements.
136
+ </xs:documentation>
137
+ </xs:annotation>
138
+ <xs:sequence>
139
+ <xs:element name="root" type="tns:grades-node-type">
140
+ <xs:annotation>
141
+ <xs:documentation xml:lang="en">Root node of the grading scheme hierarchy. If no children are specified, the
142
+ total grading score will be obtained by including all test results scores. The "function" attribute
143
+ specifies the accumulator function.
144
+ </xs:documentation>
145
+ </xs:annotation>
146
+ </xs:element>
147
+ <xs:element name="combine" type="tns:grades-node-type" minOccurs="0" maxOccurs="unbounded">
148
+ <xs:annotation>
149
+ <xs:documentation xml:lang="en">Inner node of the grading scheme hierarchy. This can be a child of the root
150
+ node or any descendant node. A "combine" node specifies how to condense several sub results. Sub results can
151
+ be test results or again "combined" results.
152
+ </xs:documentation>
153
+ </xs:annotation>
154
+ </xs:element>
155
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax">
156
+ <xs:annotation>
157
+ <xs:documentation xml:lang="en">Any non-standard information that can be used by a grader or humans to
158
+ calculate a total result from tests results.
159
+ </xs:documentation>
160
+ </xs:annotation>
161
+ </xs:any>
162
+ </xs:sequence>
163
+ </xs:complexType>
164
+
165
+ <xs:complexType name="grades-node-type">
166
+ <xs:annotation>
167
+ <xs:documentation xml:lang="en">Inner node of the grading scheme hierarchy. There are only two types of inner
168
+ nodes: the "root" node and "combine" nodes.
169
+ </xs:documentation>
170
+ </xs:annotation>
171
+ <xs:sequence>
172
+ <xs:element name="title" type="xs:string" minOccurs="0">
173
+ <xs:annotation>
174
+ <xs:documentation xml:lang="en">A not too long title to be shown above the grading result represented by this
175
+ node.
176
+ </xs:documentation>
177
+ </xs:annotation>
178
+ </xs:element>
179
+ <xs:element name="description" type="tns:description-type" minOccurs="0">
180
+ <xs:annotation>
181
+ <xs:documentation xml:lang="en">A more or less comprehensive description of the problem aspect represented by
182
+ this node.
183
+ </xs:documentation>
184
+ </xs:annotation>
185
+ </xs:element>
186
+ <xs:element name="internal-description" type="tns:description-type" minOccurs="0">
187
+ <xs:annotation>
188
+ <xs:documentation xml:lang="en">A more or less comprehensive internal description of the problem aspect
189
+ represented by this node. Internal descriptions are meant for teachers and maybe grading assistants.
190
+ Internal descriptions are not shown to students. The internal description could include didactic background
191
+ information and possibly technical or organizational details about this grading aspect.
192
+ </xs:documentation>
193
+ </xs:annotation>
194
+ </xs:element>
195
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
196
+ <xs:element name="test-ref" type="tns:grades-test-ref-child-type"/>
197
+ <xs:element name="combine-ref" type="tns:grades-combine-ref-child-type"/>
198
+ </xs:choice>
199
+ </xs:sequence>
200
+ <xs:attribute name="id" type="xs:string" use="optional">
201
+ <xs:annotation>
202
+ <xs:documentation xml:lang="en">Node identifier. It is optional for the "root" node and required for "combine"
203
+ nodes.
204
+ </xs:documentation>
205
+ </xs:annotation>
206
+ </xs:attribute>
207
+ <xs:attribute name="function" use="optional" default="min">
208
+ <xs:annotation>
209
+ <xs:documentation xml:lang="en">Accumulator function that is used to condense several sub results to a single
210
+ result.
211
+ </xs:documentation>
212
+ </xs:annotation>
213
+ <xs:simpleType>
214
+ <xs:restriction base="xs:string">
215
+ <xs:enumeration value="min">
216
+ <xs:annotation>
217
+ <xs:documentation xml:lang="en">Specifies the minimum of several sub scores. This can be used in an "all
218
+ or nothing" situation, where a parent score should reflect the worst of the child results. Weights can
219
+ be attached to children to express the valency of a child's result. The child node representing the
220
+ easiest aspect among its siblings could get the weight 1. Child nodes for grading aspects connected with
221
+ a higher effort represent scores that are more difficult to achieve. These child nodes could get weights
222
+ larger than 1. This would guarantee, that when all child nodes results are in [0,1] also the parent node
223
+ result is in [0,1].
224
+ </xs:documentation>
225
+ </xs:annotation>
226
+ </xs:enumeration>
227
+ <xs:enumeration value="max">
228
+ <xs:annotation>
229
+ <xs:documentation xml:lang="en">Specifies the maximum of several sub scores. This is used in an "one
230
+ success is enough" situation, where a parent score should reflect the best of the child results. An
231
+ example is a task or a graded problem aspect that could be solved in different ways and for each way
232
+ there is a separate test element in the task. A solution that succeeds any one of these tests is
233
+ regarded successful. If one of the different ways of solving the task is more sophisticated than the
234
+ others, the respective child test could get the highest weight 1. Easier, less valent solution paths get
235
+ lower weights between 0 and 1. This would guarantee, that when all child nodes results are in [0,1] also
236
+ the parent node result is in [0,1].
237
+ </xs:documentation>
238
+ </xs:annotation>
239
+ </xs:enumeration>
240
+ <xs:enumeration value="sum">
241
+ <xs:annotation>
242
+ <xs:documentation xml:lang="en">Specifies the sum of several sub scores. This is used in a situation,
243
+ where every child represents a problem aspect that could be solved more or less independently of the
244
+ other aspects. Weights can be attached to child nodes. Those child nodes representing easy problem
245
+ aspects could get lower weights than other aspects. If all weights of all direct children of a node add
246
+ up to 1, this would guarantee, that the parent node result is in [0,1] when all child nodes results are
247
+ in [0,1].
248
+ </xs:documentation>
249
+ </xs:annotation>
250
+ </xs:enumeration>
251
+ </xs:restriction>
252
+ </xs:simpleType>
253
+ </xs:attribute>
254
+ </xs:complexType>
255
+
256
+ <xs:complexType name="grades-base-ref-child-type">
257
+ <xs:annotation>
258
+ <xs:documentation xml:lang="en">Inner nodes of the grading scheme hierarchy carry pointers to children. This
259
+ element represents such a pointer. There are two kinds of pointers: "test-ref" pointers and "combine-ref"
260
+ pointers.
261
+ </xs:documentation>
262
+ </xs:annotation>
263
+ <xs:sequence>
264
+ <xs:choice minOccurs="0">
265
+ <xs:element name="nullify-conditions" type="tns:grades-nullify-conditions-type">
266
+ <xs:annotation>
267
+ <xs:documentation xml:lang="en">Specifies a composite condition when the sub result of the pointed-at node
268
+ should get nullified. The pointed-at node is a test or a combine node. If the composite condition
269
+ evaluates to False, it has no effect. Otherwise, the score of the pointed-at node is not accumulated into
270
+ the condensed result of the pointing-from-node. State differently, the score that flows into the
271
+ accumulator function of the pointing-from-node, is assumed to be emitted as 0 from the pointed-at node.
272
+ </xs:documentation>
273
+ </xs:annotation>
274
+ </xs:element>
275
+ <xs:element name="nullify-condition" type="tns:grades-nullify-condition-type">
276
+ <xs:annotation>
277
+ <xs:documentation xml:lang="en">Specifies a _comparison_ condition when the sub result of the pointed-at
278
+ node should get nullified. The only difference to &lt;nullify-conditions&gt; is the trailing "s" and the
279
+ fact, that &lt;nullify-conditions&gt; represents a composite condition while &lt;nullify-condition&gt;
280
+ represents a simple comparison condition.
281
+ </xs:documentation>
282
+ </xs:annotation>
283
+ </xs:element>
284
+ </xs:choice>
285
+ </xs:sequence>
286
+ <xs:attribute name="weight" type="xs:double" use="optional">
287
+ <xs:annotation>
288
+ <xs:documentation xml:lang="en">Specifies a weight that is multiplied to the sub result of the pointed-at node
289
+ when flowing into the accumulator function. The pointed-at node is a test or a combine node. When calculating
290
+ the condensed result for the pointing-from node, the score of the pointed-at node is multiplied by the weight,
291
+ if present. Otherwise nothing is multiplied.
292
+ </xs:documentation>
293
+ </xs:annotation>
294
+ </xs:attribute>
295
+ </xs:complexType>
296
+
297
+ <xs:complexType name="grades-test-ref-child-type">
298
+ <xs:annotation>
299
+ <xs:documentation xml:lang="en">A "test-ref" node points to a test in a ProFormA task. As such the result of the
300
+ pointed at test is obtained and included in a bottom-up fashion in the calculation of the total result.
301
+ </xs:documentation>
302
+ </xs:annotation>
303
+ <xs:complexContent>
304
+ <xs:extension base="tns:grades-base-ref-child-type">
305
+ <xs:sequence>
306
+ <xs:element name="title" type="xs:string" minOccurs="0">
307
+ <xs:annotation>
308
+ <xs:documentation xml:lang="en">A not too long title to be shown above the pointed-at test's result.
309
+ Overrides the title of the pointed-at test element. This can be used especially when pointing to sub
310
+ test results.
311
+ </xs:documentation>
312
+ </xs:annotation>
313
+ </xs:element>
314
+ <xs:element name="description" type="tns:description-type" minOccurs="0">
315
+ <xs:annotation>
316
+ <xs:documentation xml:lang="en">A more or less comprehensive description of the problem aspect represented
317
+ by the pointed-at test. This can be used especially when pointing to sub test results.
318
+ </xs:documentation>
319
+ </xs:annotation>
320
+ </xs:element>
321
+ <xs:element name="internal-description" type="tns:description-type" minOccurs="0">
322
+ <xs:annotation>
323
+ <xs:documentation xml:lang="en">A more or less comprehensive internal description of the problem aspect
324
+ represented by the pointed-at test. This can be used especially when pointing to sub test results.
325
+ Internal descriptions are meant for teachers and maybe grading assistants. Internal descriptions are not
326
+ shown to students. The internal description could include didactic background information and possibly
327
+ technical or organizational details about this grading aspect.
328
+ </xs:documentation>
329
+ </xs:annotation>
330
+ </xs:element>
331
+ </xs:sequence>
332
+ <xs:attribute name="ref" type="xs:string" use="required">
333
+ <xs:annotation>
334
+ <xs:documentation xml:lang="en">The id of the pointed-at test.</xs:documentation>
335
+ </xs:annotation>
336
+ </xs:attribute>
337
+ <xs:attribute name="sub-ref" type="xs:string" use="optional">
338
+ <xs:annotation>
339
+ <xs:documentation xml:lang="en">If the pointed at test exhibits sub test results, this points to one of the
340
+ sub results. Examples are individual test cases in a unit test specification, individual violation rules
341
+ in a static code analyzer, individual error classes in a compilation step, etc. Since the sub-ref format
342
+ or content is test-tool-specific, it is not normed in the ProFormA format.
343
+ </xs:documentation>
344
+ </xs:annotation>
345
+ </xs:attribute>
346
+ </xs:extension>
347
+ </xs:complexContent>
348
+ </xs:complexType>
349
+
350
+ <xs:complexType name="grades-combine-ref-child-type">
351
+ <xs:annotation>
352
+ <xs:documentation xml:lang="en">A "combine-ref" node points to a "combine" node in the grading scheme hierarchy.
353
+ As such the result of the pointed at node is obtained and included in a bottom-up fashion in the calculation of
354
+ the total result.
355
+ </xs:documentation>
356
+ </xs:annotation>
357
+ <xs:complexContent>
358
+ <xs:extension base="tns:grades-base-ref-child-type">
359
+ <xs:attribute name="ref" type="xs:string" use="required">
360
+ <xs:annotation>
361
+ <xs:documentation xml:lang="en">The id of the pointed-at combine node.</xs:documentation>
362
+ </xs:annotation>
363
+ </xs:attribute>
364
+ </xs:extension>
365
+ </xs:complexContent>
366
+ </xs:complexType>
367
+
368
+ <xs:complexType name="grades-nullify-base-type">
369
+ <xs:annotation>
370
+ <xs:documentation xml:lang="en">Specifies an operand of a composite nullify condition.</xs:documentation>
371
+ </xs:annotation>
372
+ <xs:sequence>
373
+ <xs:element name="title" type="xs:string" minOccurs="0">
374
+ <xs:annotation>
375
+ <xs:documentation xml:lang="en">A title to be displayed when explaining a score nullification to students or
376
+ teachers. Front ends might decide to explain nullification conditions in a grading scheme even if for a
377
+ certain submission no nullification took place.
378
+ </xs:documentation>
379
+ </xs:annotation>
380
+ </xs:element>
381
+ <xs:element name="description" type="tns:description-type" minOccurs="0">
382
+ <xs:annotation>
383
+ <xs:documentation xml:lang="en">A detailed description to be displayed when explaining a score nullification.
384
+ Front ends might decide to extend this description by an automatically generated, human readable version of
385
+ the involved boolean or comparison expression.
386
+ </xs:documentation>
387
+ </xs:annotation>
388
+ </xs:element>
389
+ <xs:element name="internal-description" type="tns:description-type" minOccurs="0">
390
+ <xs:annotation>
391
+ <xs:documentation xml:lang="en">A detailed description to be displayed to teachers and grading assistants
392
+ only.
393
+ </xs:documentation>
394
+ </xs:annotation>
395
+ </xs:element>
396
+ </xs:sequence>
397
+ </xs:complexType>
398
+
399
+ <xs:complexType name="grades-nullify-conditions-type">
400
+ <xs:annotation>
401
+ <xs:documentation xml:lang="en">Specifies a composite condition when the sub result of a pointed-at node should
402
+ get nullified. The composite condition is attributed with one of the boolean operators { and, or }. Further it
403
+ contains operands that usually are of the nullify-condition type, which represents a simple comparison.
404
+ Nevertheless a composite condition can have nested composite conditions as operands as well.
405
+ </xs:documentation>
406
+ </xs:annotation>
407
+ <xs:complexContent>
408
+ <xs:extension base="tns:grades-nullify-base-type">
409
+ <xs:sequence>
410
+ <xs:choice minOccurs="2" maxOccurs="unbounded">
411
+ <xs:element name="nullify-conditions" type="tns:grades-nullify-conditions-type">
412
+ <xs:annotation>
413
+ <xs:documentation xml:lang="en">An operand of the boolean expression, itself being a composite
414
+ condition.
415
+ </xs:documentation>
416
+ </xs:annotation>
417
+ </xs:element>
418
+ <xs:element name="nullify-condition" type="tns:grades-nullify-condition-type">
419
+ <xs:annotation>
420
+ <xs:documentation xml:lang="en">A simple comparison condition as an operand of the boolean expression.
421
+ </xs:documentation>
422
+ </xs:annotation>
423
+ </xs:element>
424
+ </xs:choice>
425
+ </xs:sequence>
426
+ <xs:attribute name="compose-op" use="required">
427
+ <xs:annotation>
428
+ <xs:documentation xml:lang="en">The boolean operator of the boolean expression.</xs:documentation>
429
+ </xs:annotation>
430
+ <xs:simpleType>
431
+ <xs:restriction base="xs:string">
432
+ <xs:enumeration value="and"/>
433
+ <xs:enumeration value="or"/>
434
+ </xs:restriction>
435
+ </xs:simpleType>
436
+ </xs:attribute>
437
+ </xs:extension>
438
+ </xs:complexContent>
439
+ </xs:complexType>
440
+
441
+ <xs:complexType name="grades-nullify-condition-type">
442
+ <xs:annotation>
443
+ <xs:documentation xml:lang="en">Specifies a simple comparison condition when the sub result of a pointed-at node
444
+ should get nullified. This simple comparison condition is attributed with one of the six common comparison
445
+ operators. Further it contains operands that refer to tests or combine nodes or that specify a numerical
446
+ constant, which a result should be compared to.
447
+ </xs:documentation>
448
+ </xs:annotation>
449
+ <xs:complexContent>
450
+ <xs:extension base="tns:grades-nullify-base-type">
451
+ <xs:sequence>
452
+ <xs:choice minOccurs="2" maxOccurs="2">
453
+ <xs:element name="nullify-combine-ref" type="tns:grades-nullify-combine-ref-type">
454
+ <xs:annotation>
455
+ <xs:documentation xml:lang="en">An operand of the comparison expression pointing to a "combine" node.
456
+ When evaluating the condition, the numerical score calculated for the referenced combine node will be
457
+ used as an operand in comparison.
458
+ </xs:documentation>
459
+ </xs:annotation>
460
+ </xs:element>
461
+ <xs:element name="nullify-test-ref" type="tns:grades-nullify-test-ref-type">
462
+ <xs:annotation>
463
+ <xs:documentation xml:lang="en">An operand of the comparison expression pointing to a "test". When
464
+ evaluating the condition, the numerical score delivered by the referenced test will be used as an
465
+ operand in comparison.
466
+ </xs:documentation>
467
+ </xs:annotation>
468
+ </xs:element>
469
+ <xs:element name="nullify-literal" type="tns:grades-nullify-literal-type">
470
+ <xs:annotation>
471
+ <xs:documentation xml:lang="en">A numerical constant serving as an operand of the comparison expression.
472
+ The constant is specified as a "value" attribute in the nullify-literal element.
473
+ </xs:documentation>
474
+ </xs:annotation>
475
+ </xs:element>
476
+ </xs:choice>
477
+ </xs:sequence>
478
+ <xs:attribute name="compare-op" use="required">
479
+ <xs:annotation>
480
+ <xs:documentation xml:lang="en">The comparison operator of the comparison expression.</xs:documentation>
481
+ </xs:annotation>
482
+ <xs:simpleType>
483
+ <xs:restriction base="xs:string">
484
+ <xs:enumeration value="eq">
485
+ <xs:annotation>
486
+ <xs:documentation xml:lang="en">equals</xs:documentation>
487
+ </xs:annotation>
488
+ </xs:enumeration>
489
+ <xs:enumeration value="ne">
490
+ <xs:annotation>
491
+ <xs:documentation xml:lang="en">not equals</xs:documentation>
492
+ </xs:annotation>
493
+ </xs:enumeration>
494
+ <xs:enumeration value="gt">
495
+ <xs:annotation>
496
+ <xs:documentation xml:lang="en">greater than</xs:documentation>
497
+ </xs:annotation>
498
+ </xs:enumeration>
499
+ <xs:enumeration value="ge">
500
+ <xs:annotation>
501
+ <xs:documentation xml:lang="en">greater than or equals</xs:documentation>
502
+ </xs:annotation>
503
+ </xs:enumeration>
504
+ <xs:enumeration value="lt">
505
+ <xs:annotation>
506
+ <xs:documentation xml:lang="en">less than</xs:documentation>
507
+ </xs:annotation>
508
+ </xs:enumeration>
509
+ <xs:enumeration value="le">
510
+ <xs:annotation>
511
+ <xs:documentation xml:lang="en">less than or equals</xs:documentation>
512
+ </xs:annotation>
513
+ </xs:enumeration>
514
+ </xs:restriction>
515
+ </xs:simpleType>
516
+ </xs:attribute>
517
+ </xs:extension>
518
+ </xs:complexContent>
519
+ </xs:complexType>
520
+
521
+ <xs:complexType name="grades-nullify-comparison-operand-type">
522
+ <xs:annotation>
523
+ <xs:documentation xml:lang="en">Specifies an operand of a comparison nullify condition.</xs:documentation>
524
+ </xs:annotation>
525
+ </xs:complexType>
526
+
527
+ <xs:complexType name="grades-nullify-combine-ref-type">
528
+ <xs:annotation>
529
+ <xs:documentation xml:lang="en">An operand of a comparison expression pointing to a "combine" node.
530
+ </xs:documentation>
531
+ </xs:annotation>
532
+ <xs:complexContent>
533
+ <xs:extension base="tns:grades-nullify-comparison-operand-type">
534
+ <xs:attribute name="ref" type="xs:string" use="required">
535
+ <xs:annotation>
536
+ <xs:documentation xml:lang="en">The id of the pointed-at combine node.</xs:documentation>
537
+ </xs:annotation>
538
+ </xs:attribute>
539
+ </xs:extension>
540
+ </xs:complexContent>
541
+ </xs:complexType>
542
+
543
+ <xs:complexType name="grades-nullify-test-ref-type">
544
+ <xs:annotation>
545
+ <xs:documentation xml:lang="en">An operand of a comparison expression pointing to a "test".</xs:documentation>
546
+ </xs:annotation>
547
+ <xs:complexContent>
548
+ <xs:extension base="tns:grades-nullify-comparison-operand-type">
549
+ <xs:attribute name="ref" type="xs:string" use="required">
550
+ <xs:annotation>
551
+ <xs:documentation xml:lang="en">The id of the pointed-at test.</xs:documentation>
552
+ </xs:annotation>
553
+ </xs:attribute>
554
+ <xs:attribute name="sub-ref" type="xs:string" use="optional">
555
+ <xs:annotation>
556
+ <xs:documentation xml:lang="en">If the pointed at test exhibits sub test results, this points to one of the
557
+ sub results. Examples are individual test cases in a unit test specification, individual violation rules
558
+ in a static code analyzer, individual error classes in a compilation step, etc. Since the sub-ref format
559
+ or content is test-tool-specific, it is not normed in the ProFormA format.
560
+ </xs:documentation>
561
+ </xs:annotation>
562
+ </xs:attribute>
563
+ </xs:extension>
564
+ </xs:complexContent>
565
+ </xs:complexType>
566
+
567
+ <xs:complexType name="grades-nullify-literal-type">
568
+ <xs:annotation>
569
+ <xs:documentation xml:lang="en">A numerical constant serving as an operand of the comparison expression.
570
+ </xs:documentation>
571
+ </xs:annotation>
572
+ <xs:complexContent>
573
+ <xs:extension base="tns:grades-nullify-comparison-operand-type">
574
+ <xs:attribute name="value" type="xs:decimal" use="required">
575
+ <xs:annotation>
576
+ <xs:documentation xml:lang="en">A numerical constant value to be compared with.</xs:documentation>
577
+ </xs:annotation>
578
+ </xs:attribute>
579
+ </xs:extension>
580
+ </xs:complexContent>
581
+ </xs:complexType>
582
+
583
+ <xs:complexType name="task-type">
584
+ <xs:sequence>
585
+ <xs:element name="title" type="tns:title-type"/>
586
+ <xs:element name="description" type="tns:description-type"/>
587
+ <xs:element name="internal-description" type="tns:description-type" minOccurs="0"/>
588
+ <xs:element name="proglang" type="tns:proglang-type"/>
589
+ <xs:element name="submission-restrictions" type="tns:submission-restrictions-type" minOccurs="0"/>
590
+ <xs:element name="files" type="tns:task-files-type"/>
591
+ <xs:element name="external-resources" type="tns:external-resources-type" minOccurs="0"/>
592
+ <xs:element name="model-solutions" type="tns:model-solutions-type"/>
593
+ <xs:element name="tests" type="tns:tests-type"/>
594
+ <xs:element name="grading-hints" type="tns:grading-hints-type" minOccurs="0">
595
+ <xs:key name="task-gh-combineids">
596
+ <xs:selector xpath=".//tns:combine"/>
597
+ <xs:field xpath="@id"/>
598
+ </xs:key>
599
+ <xs:keyref name="task-gh-combinerefs" refer="tns:task-gh-combineids">
600
+ <xs:selector xpath=".//tns:combine-ref|.//tns:nullify-combine-ref"/>
601
+ <xs:field xpath="@ref"/>
602
+ </xs:keyref>
603
+ </xs:element>
604
+ <xs:element name="meta-data" type="tns:task-meta-data-type"/>
605
+ </xs:sequence>
606
+ <xs:attribute name="uuid" type="xs:string" use="required"/>
607
+ <xs:attribute name="parent-uuid" type="xs:string" use="optional"/>
608
+ <xs:attribute name="lang" type="xs:language"/>
609
+ </xs:complexType>
610
+
611
+ <xs:complexType name="submission-restrictions-type">
612
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
613
+ <xs:element name="file-restriction" type="tns:file-restr-type"/>
614
+ </xs:sequence>
615
+ <xs:attribute name="max-size" type="xs:positiveInteger" use="optional"/>
616
+ </xs:complexType>
617
+
618
+ <xs:complexType name="file-restr-type">
619
+ <xs:simpleContent>
620
+ <xs:extension base="xs:string">
621
+ <xs:attribute name="required" type="xs:boolean" use="optional" default="true"/>
622
+ <xs:attribute name="pattern-format" use="optional" default="none">
623
+ <xs:simpleType>
624
+ <xs:restriction base="xs:string">
625
+ <xs:enumeration value="none"/>
626
+ <xs:enumeration value="posix-ere"/>
627
+ </xs:restriction>
628
+ </xs:simpleType>
629
+ </xs:attribute>
630
+ </xs:extension>
631
+ </xs:simpleContent>
632
+ </xs:complexType>
633
+
634
+ <xs:complexType name="model-solutions-type">
635
+ <xs:sequence maxOccurs="unbounded">
636
+ <xs:element name="model-solution" type="tns:model-solution-type"/>
637
+ </xs:sequence>
638
+ </xs:complexType>
639
+
640
+ <xs:complexType name="model-solution-type">
641
+ <xs:sequence>
642
+ <xs:element name="filerefs" type="tns:filerefs-type"/>
643
+ <xs:element name="description" type="tns:description-type" minOccurs="0"/>
644
+ <xs:element name="internal-description" type="tns:description-type" minOccurs="0"/>
645
+ </xs:sequence>
646
+ <xs:attribute name="id" type="xs:string" use="required"/>
647
+ </xs:complexType>
648
+
649
+ <xs:complexType name="task-meta-data-type">
650
+ <xs:sequence>
651
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
652
+ </xs:sequence>
653
+ </xs:complexType>
654
+
655
+ <xs:complexType name="proglang-type">
656
+ <xs:simpleContent>
657
+ <xs:extension base="xs:string">
658
+ <xs:attribute name="version" type="xs:string" use="required"/>
659
+ </xs:extension>
660
+ </xs:simpleContent>
661
+ </xs:complexType>
662
+
663
+ <xs:complexType name="task-file-type">
664
+ <xs:sequence>
665
+ <xs:group ref="tns:file-choice-group"/>
666
+ <xs:element name="internal-description" type="tns:description-type" minOccurs="0"/>
667
+ </xs:sequence>
668
+ <xs:attribute name="id" type="xs:string" use="required"/>
669
+ <xs:attribute name="mimetype" type="xs:string" use="optional"/>
670
+ <xs:attribute name="used-by-grader" type="xs:boolean" use="required"/>
671
+ <xs:attribute name="visible" use="required">
672
+ <xs:simpleType>
673
+ <xs:restriction base="xs:string">
674
+ <xs:enumeration value="yes"/>
675
+ <xs:enumeration value="no"/>
676
+ <xs:enumeration value="delayed"/>
677
+ </xs:restriction>
678
+ </xs:simpleType>
679
+ </xs:attribute>
680
+ <xs:attribute name="usage-by-lms" use="optional" default="download">
681
+ <xs:simpleType>
682
+ <xs:restriction base="xs:string">
683
+ <xs:enumeration value="edit"/>
684
+ <xs:enumeration value="display"/>
685
+ <xs:enumeration value="download"/>
686
+ </xs:restriction>
687
+ </xs:simpleType>
688
+ </xs:attribute>
689
+ </xs:complexType>
690
+
691
+ <xs:complexType name="task-files-type">
692
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
693
+ <xs:element name="file" type="tns:task-file-type"/>
694
+ </xs:sequence>
695
+ </xs:complexType>
696
+
697
+ <xs:complexType name="external-resources-type">
698
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
699
+ <xs:element name="external-resource" type="tns:external-resource-type"/>
700
+ </xs:sequence>
701
+ </xs:complexType>
702
+
703
+ <xs:complexType name="external-resource-type">
704
+ <xs:sequence>
705
+ <xs:element name="internal-description" type="tns:description-type" minOccurs="0"/>
706
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
707
+ </xs:sequence>
708
+ <xs:attribute name="id" type="xs:string" use="required"/>
709
+ <xs:attribute name="reference" type="xs:string" use="optional"/>
710
+ </xs:complexType>
711
+
712
+ <xs:simpleType name="title-type">
713
+ <xs:restriction base="xs:string"/>
714
+ </xs:simpleType>
715
+
716
+ <xs:complexType name="tests-type">
717
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
718
+ <xs:element name="test" type="tns:test-type"/>
719
+ </xs:sequence>
720
+ </xs:complexType>
721
+
722
+ <xs:simpleType name="test-type-type">
723
+ <xs:restriction base="xs:string">
724
+ <xs:annotation>
725
+ <xs:documentation xml:lang="en">
726
+ For common test types one of the following strings should be used:
727
+ "java-compilation", "java-checkstyle", "java-code-coverage-emma", "java-findbugs",
728
+ "java-pmd", "unittest", "dejagnu", "setlx", "regexptest". For some of these
729
+ an xsd is provided by the format.
730
+ </xs:documentation>
731
+ </xs:annotation>
732
+ </xs:restriction>
733
+ </xs:simpleType>
734
+
735
+ <xs:complexType name="test-configuration-type">
736
+ <xs:sequence>
737
+ <xs:element name="filerefs" type="tns:filerefs-type" minOccurs="0"/>
738
+ <xs:element name="timeout" minOccurs="0">
739
+ <xs:simpleType>
740
+ <xs:restriction base="xs:positiveInteger"/>
741
+ </xs:simpleType>
742
+ </xs:element>
743
+ <xs:element name="externalresourcerefs" type="tns:externalresourcerefs-type" minOccurs="0"/>
744
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
745
+ <xs:element name="test-meta-data" type="tns:test-meta-data-type" minOccurs="0"/>
746
+ </xs:sequence>
747
+ </xs:complexType>
748
+
749
+ <xs:complexType name="test-type">
750
+ <xs:sequence>
751
+ <xs:element name="title" type="tns:title-type"/>
752
+ <xs:element name="description" type="tns:description-type" minOccurs="0"/>
753
+ <xs:element name="internal-description" type="tns:description-type" minOccurs="0"/>
754
+ <xs:element name="test-type" type="tns:test-type-type"/>
755
+ <xs:element name="test-configuration" type="tns:test-configuration-type"/>
756
+ </xs:sequence>
757
+ <xs:attribute name="id" type="xs:string" use="required"/>
758
+ <xs:attribute name="validity" use="optional" default="1.00">
759
+ <xs:simpleType>
760
+ <xs:restriction base="xs:decimal">
761
+ <xs:totalDigits value="3"/>
762
+ <xs:fractionDigits value="2"/>
763
+ <xs:minInclusive value="0"/>
764
+ <xs:maxInclusive value="1.00"/>
765
+ </xs:restriction>
766
+ </xs:simpleType>
767
+ </xs:attribute>
768
+ </xs:complexType>
769
+
770
+ <xs:complexType name="externalresourcerefs-type">
771
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
772
+ <xs:element name="externalresourceref" type="tns:externalresourceref-type"/>
773
+ </xs:sequence>
774
+ </xs:complexType>
775
+
776
+ <xs:complexType name="externalresourceref-type">
777
+ <xs:attribute name="refid" type="xs:string" use="required"/>
778
+ </xs:complexType>
779
+
780
+ <xs:complexType name="test-meta-data-type">
781
+ <xs:sequence>
782
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
783
+ </xs:sequence>
784
+ </xs:complexType>
785
+
786
+ <xs:complexType name="submission-type">
787
+ <xs:sequence>
788
+ <xs:choice>
789
+ <xs:element name="external-task" type="tns:external-task-type"/>
790
+ <xs:element name="included-task-file" type="tns:included-task-file-type"/>
791
+ <xs:element name="task" type="tns:task-type"/>
792
+ </xs:choice>
793
+ <xs:element name="grading-hints" type="tns:grading-hints-type" minOccurs="0">
794
+ <xs:key name="subm-gh-combineids">
795
+ <xs:selector xpath=".//tns:combine"/>
796
+ <xs:field xpath="@id"/>
797
+ </xs:key>
798
+ <xs:keyref name="subm-gh-combinerefs" refer="tns:subm-gh-combineids">
799
+ <xs:selector xpath=".//tns:combine-ref|.//tns:nullify-combine-ref"/>
800
+ <xs:field xpath="@ref"/>
801
+ </xs:keyref>
802
+ </xs:element>
803
+ <xs:choice>
804
+ <xs:element name="external-submission" type="tns:external-submission-type"/>
805
+ <xs:element name="files" type="tns:submission-files-type"/>
806
+ </xs:choice>
807
+ <xs:element name="lms" type="tns:lms-type" minOccurs="0"/>
808
+ <xs:element name="result-spec" type="tns:result-spec-type"/>
809
+ </xs:sequence>
810
+ </xs:complexType>
811
+
812
+ <xs:complexType name="submission-file-type">
813
+ <xs:group ref="tns:file-choice-group"/>
814
+ <xs:attribute name="id" type="xs:string" use="optional"/>
815
+ <xs:attribute name="mimetype" type="xs:string" use="optional"/>
816
+ </xs:complexType>
817
+
818
+ <xs:complexType name="submission-files-type">
819
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
820
+ <xs:element name="file" type="tns:submission-file-type"/>
821
+ </xs:sequence>
822
+ </xs:complexType>
823
+
824
+ <xs:complexType name="external-task-type">
825
+ <xs:simpleContent>
826
+ <xs:extension base="xs:string">
827
+ <xs:attribute name="uuid" type="xs:string" use="optional"/>
828
+ </xs:extension>
829
+ </xs:simpleContent>
830
+ </xs:complexType>
831
+
832
+ <xs:simpleType name="external-submission-type">
833
+ <xs:restriction base="xs:string"/>
834
+ </xs:simpleType>
835
+
836
+ <xs:complexType name="included-task-file-type">
837
+ <xs:choice>
838
+ <xs:element name="embedded-zip-file" type="tns:embedded-bin-file-type"/>
839
+ <xs:element name="attached-zip-file" type="tns:attached-bin-file-type"/>
840
+ <xs:element name="attached-xml-file" type="tns:attached-txt-file-type"/>
841
+ </xs:choice>
842
+ <xs:attribute name="uuid" type="xs:string" use="optional"/>
843
+ </xs:complexType>
844
+
845
+ <xs:complexType name="lms-type">
846
+ <xs:sequence>
847
+ <xs:element name="submission-datetime" type="xs:dateTime"/>
848
+ <xs:element name="user-id" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
849
+ <xs:element name="course-id" type="xs:string" minOccurs="0"/>
850
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded"
851
+ processContents="lax"/>
852
+ </xs:sequence>
853
+ <xs:attribute name="url" type="xs:string" use="optional"/>
854
+ </xs:complexType>
855
+
856
+ <xs:complexType name="result-spec-type">
857
+ <xs:sequence>
858
+ <xs:element name="student-feedback-level" type="tns:feedback-level-type" minOccurs="0"/>
859
+ <xs:element name="teacher-feedback-level" type="tns:feedback-level-type" minOccurs="0"/>
860
+ </xs:sequence>
861
+ <xs:attribute name="format" use="required">
862
+ <xs:simpleType>
863
+ <xs:restriction base="xs:string">
864
+ <xs:enumeration value="xml"/>
865
+ <xs:enumeration value="zip"/>
866
+ </xs:restriction>
867
+ </xs:simpleType>
868
+ </xs:attribute>
869
+ <xs:attribute name="structure" use="required">
870
+ <xs:simpleType>
871
+ <xs:restriction base="xs:string">
872
+ <xs:enumeration value="merged-test-feedback"/>
873
+ <xs:enumeration value="separate-test-feedback"/>
874
+ </xs:restriction>
875
+ </xs:simpleType>
876
+ </xs:attribute>
877
+ <xs:attribute name="lang" type="xs:language"/>
878
+ </xs:complexType>
879
+
880
+ <xs:simpleType name="feedback-level-type">
881
+ <xs:restriction base="xs:string">
882
+ <xs:enumeration value="debug"/>
883
+ <xs:enumeration value="info"/>
884
+ <xs:enumeration value="warn"/>
885
+ <xs:enumeration value="error"/>
886
+ </xs:restriction>
887
+ </xs:simpleType>
888
+
889
+ <xs:complexType name="response-type">
890
+ <xs:sequence>
891
+ <xs:choice>
892
+ <xs:element name="merged-test-feedback" type="tns:merged-test-feedback-type"/>
893
+ <xs:element name="separate-test-feedback" type="tns:separate-test-feedback-type"/>
894
+ </xs:choice>
895
+ <xs:element name="files" type="tns:response-files-type"/>
896
+ <xs:element name="response-meta-data" type="tns:response-meta-data-type"/>
897
+ </xs:sequence>
898
+ <xs:attribute name="lang" type="xs:language"/>
899
+ </xs:complexType>
900
+
901
+ <xs:complexType name="response-meta-data-type">
902
+ <xs:sequence>
903
+ <xs:element name="grader-engine" type="tns:grader-engine-type"/>
904
+ <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
905
+ </xs:sequence>
906
+ </xs:complexType>
907
+
908
+ <xs:complexType name="grader-engine-type">
909
+ <xs:attribute name="name" type="xs:string" use="required"/>
910
+ <xs:attribute name="version" type="xs:string" use="required"/>
911
+ </xs:complexType>
912
+
913
+ <xs:complexType name="result-type">
914
+ <xs:sequence>
915
+ <xs:element name="score" type="tns:score-type"/>
916
+ <xs:element name="validity" minOccurs="0" type="tns:validity-type"/>
917
+ </xs:sequence>
918
+ <xs:attribute name="is-internal-error" type="xs:boolean" default="false"/>
919
+ </xs:complexType>
920
+
921
+ <xs:simpleType name="score-type">
922
+ <xs:restriction base="xs:decimal">
923
+ <xs:minInclusive value="0.0"/>
924
+ <xs:maxInclusive value="1.0"/>
925
+ </xs:restriction>
926
+ </xs:simpleType>
927
+
928
+ <xs:simpleType name="validity-type">
929
+ <xs:restriction base="xs:decimal">
930
+ <xs:minInclusive value="0.0"/>
931
+ <xs:maxInclusive value="1.0"/>
932
+ </xs:restriction>
933
+ </xs:simpleType>
934
+
935
+ <xs:simpleType name="merged-feedback-type">
936
+ <xs:restriction base="xs:string"/>
937
+ </xs:simpleType>
938
+
939
+ <xs:complexType name="merged-test-feedback-type">
940
+ <xs:sequence>
941
+ <xs:element name="overall-result" type="tns:result-type"/>
942
+ <xs:element name="student-feedback" type="tns:merged-feedback-type" minOccurs="0"/>
943
+ <xs:element name="teacher-feedback" type="tns:merged-feedback-type" minOccurs="0"/>
944
+ </xs:sequence>
945
+ </xs:complexType>
946
+
947
+ <xs:complexType name="separate-test-feedback-type">
948
+ <xs:sequence>
949
+ <xs:element name="submission-feedback-list" type="tns:feedback-list-type"/>
950
+ <xs:element name="tests-response" type="tns:tests-response-type"/>
951
+ </xs:sequence>
952
+ </xs:complexType>
953
+
954
+ <xs:complexType name="tests-response-type">
955
+ <xs:sequence>
956
+ <xs:element name="test-response" type="tns:test-response-type" minOccurs="0" maxOccurs="unbounded"/>
957
+ </xs:sequence>
958
+ </xs:complexType>
959
+
960
+ <xs:complexType name="test-response-type">
961
+ <xs:choice>
962
+ <xs:element name="test-result" type="tns:test-result-type"/>
963
+ <xs:element name="subtests-response" type="tns:subtests-response-type">
964
+ <xs:key name="subtestrespids">
965
+ <xs:selector xpath=".//tns:subtest-response"/>
966
+ <xs:field xpath="@id"/>
967
+ </xs:key>
968
+ </xs:element>
969
+ </xs:choice>
970
+ <xs:attribute name="id" use="required" type="xs:string"/>
971
+ </xs:complexType>
972
+
973
+ <xs:complexType name="subtests-response-type">
974
+ <xs:sequence>
975
+ <xs:element name="subtest-response" maxOccurs="unbounded" type="tns:subtest-response-type"/>
976
+ </xs:sequence>
977
+ </xs:complexType>
978
+
979
+ <xs:complexType name="subtest-response-type">
980
+ <xs:sequence>
981
+ <xs:element name="test-result" type="tns:test-result-type"/>
982
+ </xs:sequence>
983
+ <xs:attribute name="id" use="required" type="xs:string"/>
984
+ </xs:complexType>
985
+
986
+ <xs:complexType name="test-result-type">
987
+ <xs:sequence>
988
+ <xs:element name="result" type="tns:result-type"/>
989
+ <xs:element name="feedback-list" type="tns:feedback-list-type"/>
990
+ </xs:sequence>
991
+ </xs:complexType>
992
+
993
+ <xs:complexType name="feedback-list-type">
994
+ <xs:sequence>
995
+ <xs:element name="student-feedback" minOccurs="0" maxOccurs="unbounded"
996
+ type="tns:feedback-type"/>
997
+ <xs:element name="teacher-feedback" minOccurs="0" maxOccurs="unbounded"
998
+ type="tns:feedback-type"/>
999
+ </xs:sequence>
1000
+ </xs:complexType>
1001
+
1002
+ <xs:complexType name="feedback-type">
1003
+ <xs:sequence>
1004
+ <xs:element name="title" minOccurs="0" type="xs:string"/>
1005
+ <xs:element name="content" minOccurs="0">
1006
+ <xs:complexType>
1007
+ <xs:simpleContent>
1008
+ <xs:extension base="xs:string">
1009
+ <xs:attribute name="format" use="required">
1010
+ <xs:simpleType>
1011
+ <xs:restriction base="xs:string">
1012
+ <xs:enumeration value="html"/>
1013
+ <xs:enumeration value="plaintext"/>
1014
+ </xs:restriction>
1015
+ </xs:simpleType>
1016
+ </xs:attribute>
1017
+ </xs:extension>
1018
+ </xs:simpleContent>
1019
+ </xs:complexType>
1020
+ </xs:element>
1021
+ <xs:element name="filerefs" type="tns:filerefs-type" minOccurs="0"/>
1022
+ </xs:sequence>
1023
+ <xs:attribute name="level" type="tns:feedback-level-type"/>
1024
+ </xs:complexType>
1025
+
1026
+ <xs:complexType name="response-file-type">
1027
+ <xs:group ref="tns:file-choice-group"/>
1028
+ <xs:attribute name="id" type="xs:string" use="required"/>
1029
+ <xs:attribute name="mimetype" type="xs:string" use="optional"/>
1030
+ <xs:attribute name="title" type="xs:string" use="required"/>
1031
+ </xs:complexType>
1032
+
1033
+ <xs:complexType name="response-files-type">
1034
+ <xs:sequence minOccurs="0" maxOccurs="unbounded">
1035
+ <xs:element name="file" type="tns:response-file-type"/>
1036
+ </xs:sequence>
1037
+ </xs:complexType>
1038
+ </xs:schema>