Background
While comparing the existing inQuiry question and question set metadata with QuML specs we found a few gaps. Below are the properties having some differences from the QuML specs:
Question metadata which has some differences from the QuML specs are:-
responseDeclaration
media
responseDeclaration
Currently, the response declaration is stored in the below format but there are two properties that are not allowed in it, which are: maxScore
and outcomes
"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": [] } }
Proposed Solution for responseDeclaration
Editor Changes:
Instead of keeping maxScore
and outcomes
in responseDeclaration
we can store it in outcomeVariables
as below:
"outcomeVariables": { "maxScore": 1, }
We will not store outcomes.score
because maxScore
and outcomes.score
holds the same value.
For newly created question responseDecleration
and outcomeVariables
will be in the below format for single select MCQ:
"responseDeclaration": { "response1": { "cardinality": "single", "type": "integer", "correctResponse": { "value": "0", }, "mapping": [] } }, "outcomeVariables": { "maxScore": 1, }
For multi-select MCQ, responseDecleration
and outcomeVariables
will be in the below format:
"responseDeclaration": { "response1": { "cardinality": "multiple", "type": "integer", "correctResponse": { "value": [0, 1], }, "mapping": [{ "response": 0, "outcomes": { "score": 1 } }, { "response": 1, "outcomes": { "score": 1 } } ] } }, "outcomeVariables": { "maxScore": 2, }
With Migration
We can do the data migration for the old questions and update the question with the above-mentioned format.
Without Data Migration
For the new question creation, We will store the
maxScore
inside theoutcomeVariables
property.If the user edits the old question, We will store the
maxScore
inside theoutcomeVariables
and remove themaxScore
from theresponseDeclaration
.
Player Changes:
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 property in theresponseDeclartion
.
media
Currently, Question metadata contains media in the below format:
"media": [{ "id": "do_2136952965043896321346", "type": "image", //instead of ‘type’ it should be ‘mediaType’ "src": "/assets/public/content/assets/do_2136952965043896321346/mountain.jpeg", "baseUrl": "https://dev.inquiry.sunbird.org" }]
As per QuML specs, it should be stored in the below format:
"media": [{ "id": "do_2136952965043896321346", "mediaType": "image", "src": "/assets/public/content/assets/do_2136952965043896321346/mountain.jpeg", "baseUrl": "https://dev.inquiry.sunbird.org" }]
Editor Changes:
With migration
We can do the data migration for the old questions and update the question with the above-mentioned format.
Without migration
For the new question creation, we will store the media in a new format.
If the user edits the old question, we will check if the
type
is present in the media object, convert it tomediaType
while editing the question.
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:
timeLimits: { "maxTime": "240", "warningTime": "60" }
The use of maxTime
is showing the timer on the QuML player and warningTime
is used to show the timer in red color indicating you are left with only these few minutes to complete the questionset.
But as per the QuML schema, it should be stored in the below format:
timeLimits: { "description": "Time limits for the complete set and/or for each question in the question set.", questionset: { min: number, max: number }, question: { min: number, max: number } }
Proposed Solution for timeLimits
Editor Changes:
We can set the limit for the complete question set as:
timeLimits: { questionset: { min: number, max: number, } }
If we have a time limit for each of the questions we can store the time limit to the question set metadata
timeLimits: { question: { min: number, max: number } }
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 the editor code we can handle maxTime
with max
and warningTime
with min
.
With Migration
we can do the data migration for the old questions and update the question with above mentioned format.
Without Data Migration
For the new question creation, we will store the
timeLimits
in a new format.If the user edits the old question, we will check for the
timeLimits
if it's present in an old format we will convert it to the new format on save.
Player Changes:
The player will first check if the question has timeLimits.questionset
it will take the min
and max
value for there, if timeLimits.questionset
is undefined and timeLimits
directly maxTime
and warningTime
it will take the value for there.