{ "$schema": "http://json-schema.org/draft-07/schema#", "$id": "http://xcit.org/nback.schema.json", "title": "Behaverse N-back Dataset", "description": "A list of events collected using Behaverse N-back task.", "type": "array", "items": { "$ref": "#/definitions/Event" }, "definitions": { "Event":{ "title": "A N-back Event", "type": "object", "additionalProperties": false, "properties": { "base": { "$ref": "#/definitions/Base" }, "types": { "$ref": "#/definitions/Types" }, "custom": { "$ref": "#/definitions/Custom" } }, "required": ["base", "types", "custom"] }, "Base":{ "title": "Basic N-back Event Data", "type": "object", "properties": { "tsGenerated": { "type": "string", "format": "date-time" }, "userId": { "type": "string", "format": "uuid" }, "sessionId": { "type": "string", "format": "uuid" } }, "required": ["tsGenerated", "userId", "sessionId"] }, "Types":{ "type": "array", "minItems": 1, "items": { "type": "string" } }, "Custom":{ "type": "object", "$comment": "extract custom keys using this JQ query: '[.[] | .custom | keys | .[]] | unique | sort'", "properties": { "accuracy": {"type": "number"}, "buttons": {"type": "array"}, "correctRejectionCount": {"type": "number"}, "falseAlarmCount": {"type": "number"}, "gameObject": {"type": "string", "enum": ["Button"]}, "hitCount": {"type": "number", "minimum": 0}, "id": {"type": "number"}, "isMatch": {"type": "boolean"}, "missCount": {"type": "number", "minimum": 0}, "name": {"type": "string"}, "parameters": {"type": "object"}, "pressDuration": {"type": "number"}, "pressTime": {"type": "string", "format": "date-time"}, "responseDuration": {"type": ["number", "null"]}, "responseTime": {"type": ["number", "null"]}, "seed": {"type": "number"}, "stream": {"type": "number"}, "streamIndex": {"type": "number"}, "streamResults": {"type": "array"}, "timeline": {"type": "string"}, "timeOutCount": {"type": "number", "minimum": 0}, "type": {"type": "string", "enum": [null, "Game", "Instructions"]}, "value": {"type": ["number", "null"]}, "viewportPosition": { "$ref": "#/definitions/XY_Position" }, "worldPosition": { "$ref": "#/definitions/XY_Position" } }, "additionalProperties": true, "anyOf": [ { "if": { "properties": {"types": {"enum": ["NBack.TaskStart"]}} }, "then": { "required": ["timeline", "seed"] } }, { "if": { "properties": { "types": {"enum": ["NBack.BlockStart"]} } }, "then": { "required": ["id", "type"] } }, { "if": { "properties": {"types": {"enum": ["NBack.BlockEnd"]}}, "$comment": "jq command to extract required parameters: [.[] | select(.types | .[] | contains(\"NBack.BlockEnd\")) | .custom | keys] | unique | .[][]" }, "then": { "required": ["id","type","name","seed","accuracy","hitCount","missCount", "falseAlaram", "correctRejectionCount", "timeOutCount"] } }, { "if": { "properties": {"types": {"enum": ["NBack.TaskEnd"]}} }, "then": { "required": [] } }, { "if": { "properties": {"types": {"enum": ["NBack.TrialEnd"]}} }, "then": { "required": [] } }, { "if": { "properties": {"types": {"enum": ["NBack.TrialStart"]}} }, "then": { "required": ["id", "seed"] } }, { "if": { "properties": {"types": {"enum": ["NBack.MatchingButtonClick"]}} }, "then": { "required": ["worldPosition", "viewportPosition", "pressTime", "pressDuration", "isMatch", "streamIndex", "responseTime"] } } ] }, "XY_Position": { "title": "XY Spatial Position", "type": ["null", "object"], "additionalProperties": false, "properties": { "x": {"type": "number"}, "y": {"type": "number"} }, "required": ["x", "y"] }, "InstructionCustom": { "title": "Custom element for instruction blocks", "type": "object", "additionalProperties": false, "properties": { "id": {"type": "number"}, "type": {"type": "string", "enum": ["Instruction"]} }, "required": ["id", "type"] } } }