Table of Contents | ||||
---|---|---|---|---|
|
...
Question metadata which has some differences from the QuML specs are:-
responseDeclaration
media
responseDeclaration
Currently, the response declaration responseDeclaration
is stored in the below format but there are two properties that are maxScore
is not allowed in it , which are: maxScore
and outcomes
and outcomes
property is not allowed inside correctResponse
Code Block |
---|
"responseDeclaration": { "response1": { "maxScore": 1, // maxScore is not allowed here "cardinality": "single", "type": "integer", "correctResponse": { "value": "0", "outcomes": { "SCORE": 1 } // outcome is not allowed here, only property ‘value’ is allowed }, "mapping": [] } } |
...
Instead of keeping maxScore
and outcomes
in responseDeclaration
we can store it maxScore
in outcomeVariables
as below:
...
We will not store outcomes.score
inside correctResponse
because maxScore
and outcomes.score
holds the same value.
For newly created single select MCQ question responseDecleration
and outcomeVariables
will be stored in the below format for single select MCQ:
Code Block |
---|
"responseDeclaration": { "response1": { "cardinality": "single", "type": "integer", "correctResponse": { "value": "0" }, "mapping": [{ "response": 0, "outcomes": { "score": 1 } }] } }, "outcomeVariables": { "maxScore": 1, } |
...
We will store the maxScore
inside the outcomeVariables
property for new question creation using v2 API.
Without No Data Migration (Recommended)
We will do these changes as part of the v2 API and will give the data in the above format.
The old quml- player mobile app will not be supported to play questions created using the v2 API.
If a user edits the old question using v2 API, We will store
maxScore
inside theoutcomeVariables
and remove themaxScore
from theresponseDeclaration
.
With Data Migration (Not Recommended)
We can do the data migration for the old questions and update the question metadata with the format mentioned above.
This solution is not recommended because, with the migration of old questions, the old mobile app will break.
...
The player will check if the question is having the
outcomeVariables
in the metadata of the question and what’s themaxScore
value present in it.If the
outcomeVariables
property is found then the player will use it as is it.If the question does not have the
outcomeVariables
property in the metadata then the player will look for themaxScore
property in theresponseDeclartion
.
media
Currently, Question metadata contains media in the below format:
...
Proposed Solution for media
Editor Changes:
With migration
We can do the data migration for the old questions and update the question with the above-mentioned format.
Without migrationUpdate QuML specs (Recommended)
If we can update the QuML spec then change will be required in the editor and player.
No Data Migration (Recommended)
For the new question creation, we will store the media in a new format using v2 API.
If the user edits the old question using, we will check if the
type
is present in the media object, and convert it tomediaType
while editing the question.
No migration (Not Recommended)
We can do the data migration for the old questions and update the question with the above-mentioned format.
Player Changes:
The player will first check if the question media have
mediaType
property if not it will check intype
property.
...
QuestionSet metadata which has some differences from the QuML specs is:-
timeLimits
timeLimits
Time limits are currently being stored in the question set metadata as below:
...
But as per the QuML schema, it timeLimits
` should be stored in the below format:
...
Proposed Solution for timeLimits
We can set the limit timeLimits
for the complete question set as:
Code Block | ||
---|---|---|
| ||
timeLimits: { questionset: { min: number, max: number, warn: number // update the QuML specs } } |
If we have a time limit for each of the questions we will store the time limit timeLimits
to the question set metadata as:
...
Code Block | ||
---|---|---|
| ||
timeLimits: { questionset: { min: null, max: 240, warn: 60 } } |
We will have to update the QuML spec so the warn time should be stored inside timeLimits
Editor Changes:
Note: The timer field in the question set editor is part of the common form which is taking maxTime
and warningTime
as input.
We can keep on using the same configuration for the field in the form configuration keeping maxTime
and warningTime
. And in at the editor code level, we can handle maxTime
with max
and warningTime
with warn
.
With Migration
we can do the data migration for the old questions and update the question with above mentioned format.
Without Data MigrationNo Data Migration (Recommended)
For the new question creation, we will store the
timeLimits
in a new format using v2 API.If the user edits the old question using V2 API, we will check for the
timeLimits
if it's present in an the old format we will convert it to the new format on save.
Data Migration (Not Recommended)
we can do the data migration for the old questions and update the question with the above-mentioned format.
Player Changes:
The player will first check if the question has timeLimits.questionset
it will take the min
and warn
value from there, if timeLimits.questionset
is undefined and timeLimits
directly contains maxTime
and warningTime
it will take the value from there.
...