From b17efa3e5dce52c155ebd9231117082200274960 Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Tue, 31 Mar 2026 20:41:44 +0100 Subject: [PATCH] Add 'darwin-schedule' schema --- .../darwin-data/darwin-schedule.json | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 schemas/data-ingress/darwin-data/darwin-schedule.json diff --git a/schemas/data-ingress/darwin-data/darwin-schedule.json b/schemas/data-ingress/darwin-data/darwin-schedule.json new file mode 100644 index 0000000..33f0ed9 --- /dev/null +++ b/schemas/data-ingress/darwin-data/darwin-schedule.json @@ -0,0 +1,191 @@ +{ + "$id": "https://schema.owlboard.info/data-ingress/darwin/schedule.schema.json", + "$schema": "https://json-schema.org/draft-07/schema#", + "title": "DarwinScheduleData", + "type": "object", + "properties": { + "service_name": { + "type": "string", + "description": "Name of the service submitting the update" + }, + "service_id": { + "type": "string", + "description": "ID of the service sending the message - usually a hostname" + }, + "data_type": { + "type": "string", + "const": "raw", + "description": "The type of data contained in this message object" + }, + "sent_timestamp": { + "type": "integer", + "description": "Unix timestamp representing the time the message was sent" + }, + "data_kind": { + "type": "string", + "const": "darwin-schedule", + "description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data" + }, + "payload": { + "type": "array", + "additionalItems": false, + "items": { + "type": "object", + "additionalProperties": false, + "required": [ + "rid", + "uid", + "ssd", + "tid", + "toc", + "isp", + "isc", + "l" + ], + "properties": { + "rid": { + "type": "string", + "description": "Service RID", + "maxLength": 16 + }, + "uid": { + "type": "string", + "description": "Service UID", + "maxLength": 10 + }, + "ssd": { + "type": "string", + "format": "date", + "description": "Date on which the service commences" + }, + "tid": { + "name": "train_id", + "type": "string", + "minLength": 4, + "maxLength": 4, + "description": "The signalling headcode of the service" + }, + "toc": { + "type": "string", + "minLength": 2, + "maxLength": 2, + "description": "The two character code for the operating TOC" + }, + "sts": { + "type": "string", + "maxLength": 1, + "name": "status", + "description": "The 'status' of the service" + }, + "isp": { + "name": "is_passenger", + "type": "boolean", + "description": "Whether the service is a passenger service" + }, + "isc": { + "name": "is_charter", + "type": "boolean", + "description": "Whether the service is a charter service" + }, + "sid": { + "name": "rsid", + "type": ["string", "null"], + "maxLength": 10 + }, + "cr": { + "name": "cancel_reason", + "type": ["integer", "null"], + "description": "The reason code for the services cancellation" + }, + "cl": { + "name": "cancel_location", + "type": "string", + "description": "The location at which the service was cancelled" + }, + "l": { + "type": "array", + "minItems": 2, + "items": { + "type": "object", + "required": ["tpl", "lr", "s"], + "properties": { + "tpl": { + "type": "string", + "description": "The locations TIPLOC", + "maxLength": 7, + "minLength": 4 + }, + "lr": { + "name": "loc_role", + "description": "The role of the location (Orig, Call, Pass, Dest)", + "enum": ["ORIG", "CALL", "PASS", "DEST"] + }, + "s": { + "name": "seq", + "description": "The sequence in the service at which this location occours", + "type": "integer", + "minimum": 1, + "maximum": 32767 + }, + "pta": { + "description": "Public timetable arrival", + "type": "string", + "format": "date-time" + }, + "ptd": { + "description": "Public timetable departure", + "type": "string", + "format": "date-time" + }, + "wta": { + "description": "Working timetable arrival", + "type": "string", + "format": "date-time" + }, + "wtd": { + "description": "Working timetable arrival", + "type": "string", + "format": "date-time" + }, + "wtp": { + "description": "Working timetable pass", + "type": "string", + "format": "date-time" + }, + "c": { + "name": "can", + "description": "Whether the service is cancelled at this location", + "default": false, + "type": "boolean" + }, + "a": { + "name": "activities", + "type": "string", + "maxLength": 12 + }, + "fid": { + "description": "Unique formation indentifier (Maps to formation feed)", + "type": "string" + }, + "al": { + "name": "avg_loading", + "description": "Average loading at this location", + "type": "integer" + } + } + } + } + } + } + } + }, + "required": [ + "service_name", + "service_id", + "data_type", + "data_kind", + "sent_timestamp", + "payload" + ], + "additionalProperties": false +} \ No newline at end of file