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

Currently, the responseDeclaration is stored in the below format but maxScore is not allowed in it and   outcomes property is not allowed inside correctResponse

"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 maxScore in outcomeDeclaration as below:

"outcomeDeclaration": {
    "maxScore": {
      "cardinality": "single",
      "type": "integer",
      "defaultValue": 3
    }
  },

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 outcomeDeclaration will be stored in the below format:

"responseDeclaration": {
    "response1": {
      "cardinality": "single",
      "type": "integer",
      "correctResponse": {
        "value": 2
      },
      "mapping": [
        {
          "value": 2,
          "score": 3
        }
      ]
    }
  },
  "outcomeDeclaration": {
    "maxScore": {
      "cardinality": "single",
      "type": "integer",
      "defaultValue": 3
    }
}

For multi-select MCQ, responseDecleration and outcomeDeclaration will be in the below format:

"responseDeclaration": {
    "response1": {
      "cardinality": "single",
      "type": "integer",
      "correctResponse": {
        "value": [2,1]
      },
      "mapping": [
        {
          "value": 2,
          "score": 0.5
        },
        {
          "value": 1,
          "score": 0.5
        }
      ]
    }
  },
  "outcomeDeclaration": {
    "maxScore": {
      "cardinality": "single",
      "type": "integer",
      "defaultValue": 1
    }
  },

We will store the maxScore inside the outcomeDeclaration property for new question creation using v2 API.

Player Changes:

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"
}]

Proposed Solution for media

Editor Changes:
Player Changes:

(Note: Following changes will not be required if we are updating the QuML specs as mentioned above).


QuestionSet metadata which has some differences from the QuML specs is:-

timeLimits

Time limits are currently being stored in the question set metadata as below:

timeLimits: {
   "maxTime": "240",
   "warningTime": "60"
}

The use of maxTime is to show the timer on the QuML player and the use of warningTime is to indicate the time remaining to complete the question set.

But as per the QuML schema, timeLimits` 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

We can set the timeLimits for the question set as:

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 timeLimits to the question set metadata as:

timeLimits:
{
   question: {
           min: number,
           max: number,
           warn: number // update the QuML specs
   }
}

If we want to store max and warn value but don't want to store min value we can store the data in the below format:

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:
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.