{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "QED Object Schema", "version": "4", "type": "object", "oneOf": [ { "$ref": "#/definitions/schemaInfo" }, { "$ref": "#/definitions/docs/any" } ], "definitions": { "nonEmptyString": { "type": "string", "minLength": 1 }, "codeString": { "type": "string", "pattern": "^[A-Za-z0-9]+$" }, "subcodeString": { "type": "string", "pattern": "^[A-Za-z0-9]*$" }, "schemaInfo": { "type": "object", "properties": { "_id": { "type": "string", "pattern": "^schemaInfo$" }, "_rev": { "$ref": "#/definitions/nonEmptyString" }, "version": { "$ref": "#/definitions/nonEmptyString" }, "viewsVersion": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["_id","version"], "additionalProperties": false }, "docs": { "any": { "type": "object", "oneOf":[ { "$ref": "#/definitions/docs/Question" }, { "$ref": "#/definitions/docs/Survey" }, { "$ref": "#/definitions/docs/SurveyRun" }, { "$ref": "#/definitions/docs/Response" } ] }, "Question": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^Question$" }, "_id": { "$ref": "#/definitions/nonEmptyString" }, "_rev": { "$ref": "#/definitions/nonEmptyString" }, "categories": { "type": "array", "items": { "$ref": "#/definitions/nonEmptyString" } }, "code": { "$ref": "#/definitions/codeString" }, "content": { "type": "array", "items": { "$ref": "#/definitions/content/any" } }, "description": { "$ref": "#/definitions/nonEmptyString" }, "publicationDate": { "type": "string", "format": "datetime" }, "title": { "$ref": "#/definitions/nonEmptyString" }, "topic": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["type","categories","code","content","title"], "additionalProperties": false }, "Survey": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^Survey$" }, "_id": { "$ref": "#/definitions/nonEmptyString" }, "_rev": { "$ref": "#/definitions/nonEmptyString" }, "description": { "$ref": "#/definitions/nonEmptyString" }, "publicationDate": { "type": "string", "format": "datetime" }, "questions": { "type": "array", "items": { "$ref": "#/definitions/docs/Question" } }, "title": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["type","questions","title"], "additionalProperties": false }, "SurveyRun": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^SurveyRun$" }, "_id": { "$ref": "#/definitions/nonEmptyString" }, "_rev": { "$ref": "#/definitions/nonEmptyString" }, "description": { "$ref": "#/definitions/nonEmptyString" }, "endDate": { "type": "string", "format": "datetime" }, "liveName": { "$ref": "#/definitions/nonEmptyString" }, "mode": { "type": "string", "enum": [ "open", "closed" ] }, "respondentCanDeleteOwnResponse": { "type": "boolean" }, "secret": { "$ref": "#/definitions/nonEmptyString" }, "startDate": { "type": "string", "format": "datetime" }, "survey": { "$ref": "#/definitions/docs/Survey" }, "title": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["type","mode","secret","survey","title"], "additionalProperties": false }, "Response": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^Response$" }, "_id": { "$ref": "#/definitions/nonEmptyString" }, "_rev": { "$ref": "#/definitions/nonEmptyString" }, "answers": { "type": "object", "patternProperties": { "^[A-Za-z0-9]+$": { "type": ["string","number"] } }, "additionalProperties": false }, "email": { "type": "string", "format": "email" }, "publicationDate": { "type": "string", "format": "datetime" }, "secret": { "$ref": "#/definitions/nonEmptyString" }, "surveyRunId": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["type","answers","secret","surveyRunId"], "additionalProperties": false } }, "content": { "any": { "type": "object", "oneOf": [ { "$ref": "#/definitions/content/Header" }, { "$ref": "#/definitions/content/Text" }, { "$ref": "#/definitions/content/Divider" }, { "$ref": "#/definitions/content/StringInput" }, { "$ref": "#/definitions/content/TextInput" }, { "$ref": "#/definitions/content/NumberInput" }, { "$ref": "#/definitions/content/ScaleInput" }, { "$ref": "#/definitions/content/SingleChoiceInput" }, { "$ref": "#/definitions/content/MultipleChoiceInput" } ] }, "Header": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^Header$" }, "text": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["type","text"], "additionalProperties": false }, "Text": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^Text$" }, "text": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["type","text"], "additionalProperties": false }, "Divider": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^Divider$" } }, "additionalProperties": false }, "StringInput": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^StringInput$" }, "subcode": { "$ref": "#/definitions/subcodeString" }, "text": { "$ref": "#/definitions/nonEmptyString" } }, "required":["type","subcode"], "additionalProperties": false }, "TextInput": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^TextInput$" }, "maxLength": { "type": "integer" }, "subcode": { "$ref": "#/definitions/subcodeString" }, "text": { "$ref": "#/definitions/nonEmptyString" } }, "required":["type","subcode"], "additionalProperties": false }, "NumberInput": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^NumberInput$" }, "min": { "type": "integer" }, "max": { "type": "integer" }, "places": { "type": "integer" }, "subcode": { "$ref": "#/definitions/subcodeString" }, "text": { "$ref": "#/definitions/nonEmptyString" } }, "required":["type","subcode"], "additionalProperties": false }, "ScaleInput": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^ScaleInput$" }, "minLabel": { "$ref": "#/definitions/nonEmptyString" }, "min": { "type": "integer" }, "max": { "type": "integer" }, "maxLabel": { "$ref": "#/definitions/nonEmptyString" }, "naLabel": { "$ref": "#/definitions/nonEmptyString" }, "items": { "type": "array", "items": { "type": "object", "properties": { "minLabel": { "$ref": "#/definitions/nonEmptyString" }, "maxLabel": { "$ref": "#/definitions/nonEmptyString" }, "subcode": { "$ref": "#/definitions/subcodeString" }, "text": { "$ref": "#/definitions/nonEmptyString" } }, "required":["subcode","text"], "additionalProperties": false } } }, "required":["type","min","max","items"], "additionalProperties": false }, "SingleChoiceInput": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^SingleChoiceInput$" }, "items": { "type": "array", "items": { "type": "object", "properties": { "text": { "$ref": "#/definitions/nonEmptyString" }, "value": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["text","value"], "additionalProperties": false } }, "lastItemIsOpen": { "type": "object", "properties": { "subcode": { "$ref": "#/definitions/subcodeString" } }, "required": ["subcode"], "additionalProperties": false }, "subcode": { "$ref": "#/definitions/subcodeString" } }, "required":["type","items","subcode"], "additionalProperties": false }, "MultipleChoiceInput": { "type": "object", "properties": { "type": { "type": "string", "pattern": "^MultipleChoiceInput$" }, "items": { "type": "array", "items": { "type": "object", "properties": { "subcode": { "$ref": "#/definitions/subcodeString" }, "text": { "$ref": "#/definitions/nonEmptyString" } }, "required": ["subcode","text"], "additionalProperties": false } }, "lastItemIsOpen": { "type": "object", "properties": { "subcode": { "$ref": "#/definitions/subcodeString" } }, "required": ["subcode"], "additionalProperties": false } }, "required":["type","items"], "additionalProperties": false } } } }