{ "$schema": "http://json-schema.org/draft-06/schema#", "$id": "https://c3voc.de/schedule/schema.json", "type": "object", "additionalProperties": false, "properties": { "schedule": { "$ref": "#/definitions/Schedule" }, "$schema": { "type": "string" }, "generator": { "type": "object", "properties": { "name": { "type": "string" }, "version": { "type": "string" }, "url": { "type": "string", "format": "uri" } } } }, "required": ["schedule"], "definitions": { "Schedule": { "type": "object", "additionalProperties": true, "properties": { "version": { "type": "string" }, "base_url": { "description": "base for relative media URIs in this document", "type": "string", "format": "uri" }, "conference": { "$ref": "#/definitions/Conference" }, "rooms": false }, "required": ["conference", "version"] }, "Conference": { "type": "object", "title": "Conference", "required": [ "title", "acronym", "days", "daysCount", "start", "end", "timeslot_duration" ], "additionalProperties": false, "properties": { "acronym": { "type": "string", "examples": ["36c3", "rc3", "divoc-ptt"], "pattern": "^[a-z0-9_-][a-z0-9_]{3,}(-2[0-9]{3}-[a-z]+)?$" }, "title": { "type": "string" }, "description": { "type": "string" }, "start": { "type": "string", "$oneOf": [ { "format": "date" }, { "format": "date-time" } ] }, "end": { "type": "string", "$oneOf": [ { "format": "date" }, { "format": "date-time" } ] }, "daysCount": { "type": "integer" }, "timeslot_duration": { "type": "string" }, "time_zone_name": { "type": "string", "examples": ["Europe/Amsterdam", "Europe/Berlin", "UTC"], "pattern": "^([A-Z][a-z]+/[A-Z][a-z]+)|UTC$" }, "logo": { "type": "string", "format": "uri", "$comment": "absolute URL, or relative to base_url" }, "colors": { "type": "object", "additionalProperties": true, "properties": { "primary": { "type": "string", "format": "color" }, "background": { "type": "string", "format": "color" } } }, "keywords": { "type": "array", "items": { "type": "string" } }, "url": { "description": "URL to the conference schedule or public website", "type": "string", "format": "uri" }, "tracks": { "type": "array", "items": { "type": "object", "properties": { "name": { "type": "string" }, "slug": { "type": "string", "pattern": "^[a-z0-9_-]+[a-z0-9]$" }, "color": { "type": "string", "format": "color" } } } }, "rooms": { "type": "array", "items": { "$ref": "#/definitions/Room" } }, "meta": { "type": "object", "additionalProperties": true }, "days": { "type": "array", "items": { "$ref": "#/definitions/Day" } } } }, "Day": { "type": "object", "additionalProperties": false, "properties": { "index": { "type": "integer" }, "date": { "type": "string", "format": "date" }, "day_start": { "type": "string", "format": "date-time" }, "day_end": { "type": "string", "format": "date-time" }, "rooms": { "type": "object", "patternProperties": { ".*": { "type": "array", "items": { "$ref": "#/definitions/Event" } } } } }, "required": ["date", "day_end", "day_start", "index", "rooms"] }, "Event": { "type": "object", "additionalProperties": false, "properties": { "guid": { "type": "string", "format": "uuid" }, "code": { "type": "string", "pattern": "^[A-Z0-9]+$" }, "id": { "type": "integer", "minimum": 1, "deprecated": true, "$comment": "use guid instead" }, "logo": { "type": ["string", "null"], "format": "uri", "description": "absolute URL, or relative to base_url" }, "date": { "type": "string", "format": "date-time", "examples": ["2020-12-14T09:00:00+01:00"] }, "start": { "type": "string", "pattern": "^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$", "examples": ["09:00"] }, "duration": { "$ref": "#/definitions/Duration" }, "room": { "$ref": "#/definitions/RoomName" }, "slug": { "type": "string", "pattern": "^[a-z0-9_-]+[a-z0-9]$" }, "url": { "type": "string", "format": "uri" }, "title": { "type": "string" }, "subtitle": { "type": ["string", "null"] }, "track": { "type": ["string", "null"] }, "type": { "type": "string", "examples": [ "talk", "workshop", "hands-on", "meeting", "discussion", "game", "other" ] }, "language": { "type": "string", "examples": ["en", "de", "cs", "ab"] }, "abstract": { "type": ["string", "null"] }, "description": { "type": ["string", "null"] }, "recording_license": { "type": "string" }, "do_not_record": { "type": ["boolean", "null"] }, "do_not_stream": { "type": ["boolean", "string", "null"] }, "persons": { "type": "array", "items": { "$ref": "#/definitions/Person" } }, "links": { "type": "array", "items": { "$ref": "#/definitions/Reference" } }, "feedback_url": { "type": "string", "format": "uri" }, "attachments": { "type": "array", "items": { "$ref": "#/definitions/Reference" } }, "answers": { "type": "array", "items": {}, "$ref": "https://c3voc.de/schedule/submission#/definitions/Answers" } }, "required": [ "abstract", "date", "duration", "guid", "id", "language", "links", "persons", "room", "slug", "start", "subtitle", "title", "track", "type", "url" ] }, "Person": { "type": "object", "properties": { "name": { "type": "string" }, "guid": { "type": "string", "format": "uuid", "description": "Person UUID generated from email address via uuid5(NS_URL, 'acct:user@domain.tld') or random uuid4() if email not available" }, "id": { "type": "integer", "description": "deprecated integer person id, use guid with uuid5(NS_URL, 'acct:user@domain.tld') instead" }, "url": { "type": "string", "format": "uri" }, "links": { "type": "array", "items": { "$ref": "#/definitions/Reference" } }, "public_name": { "type": "string", "deprecated": true, "$comment": "use name instead" } }, "oneOf": [ { "$ref": "#/definitions/FrabPerson" }, { "$ref": "#/definitions/PretalxPerson" } ] }, "FrabPerson": { "type": "object", "properties": { "id": { "type": "integer" }, "public_name": { "type": "string", "deprecated": true, "$comment": "use name instead" } }, "required": ["public_name", "id"] }, "HubAssembly": { "type": "object", "properties": { "name": { "type": "string" }, "slug": { "type": "string", "pattern": "^[a-z0-9_-]+[a-z0-9]$" }, "guid": { "type": "string", "format": "uuid" }, "url": { "type": "string", "format": "uri" } }, "required": ["name", "guid", "slug"] }, "PretalxPerson": { "type": "object", "properties": { "code": { "type": "string", "pattern": "^[A-Z0-9]+$" }, "name": { "type": "string" }, "avatar": { "type": ["string", "null"], "format": "uri", "description": "absolute URL, or relative to base_url" }, "biography": { "type": ["string", "null"] }, "answers": { "type": "array", "items": {} } }, "required": ["name"] }, "Room": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string" }, "slug": { "type": "string", "pattern": "^[a-z0-9_-]+[a-z0-9]$" }, "type": { "type": "string", "enum": ["lecturehall", "stage", "workshop", "outside", "online", "project", "bbb", "hangar", "other"] }, "guid": { "type": "string", "format": "uuid" }, "stream_id": { "type": ["string", "null"] }, "description": { "type": ["string", "null"], "description": "might also be set as description_de, description_en etc." }, "capacity": { "type": ["number", "null"] }, "url": { "type": "string", "format": "uri" }, "features" :{ "$ref": "#/definitions/RoomFeatures" }, "assembly": { "$ref": "#/definitions/HubAssembly" } }, "patternProperties": { "description_.+": { "type": ["string", "null"] } }, "required": ["name", "guid"] }, "RoomName": { "type": "string" }, "RoomFeatures": { "type": "object", "additionalProperties": true, "properties": { "recording": { "type": "string", "enum": ["record_by_default", "not_recorded_by_default", "recording_forbidden", "recording_not_possible", "unknown"] } } }, "Duration": { "title": "Duration (hh:mm)", "type": "string", "examples": ["00:30", "01:30"], "pattern": "^[0-9]+:[0-9]{2}$" }, "Reference": { "title": "Link or Attachment", "type": "object", "additionalProperties": false, "properties": { "type": { "type": "string", "enum": [ "slides", "paper", "web", "blog", "article", "media", "related", "activitypub" ] }, "url": { "type": "string", "format": "uri" }, "title": { "type": "string" } }, "required": [ "url" ] } } }