You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
527 lines
12 KiB
527 lines
12 KiB
{
|
|
"$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"
|
|
]
|
|
}
|
|
}
|
|
} |