Compare commits

...

8 Commits

Author SHA1 Message Date
50824255f8 Extend TOC info type to handle URL
All checks were successful
Generate and Release Protos / release (push) Successful in 32s
2026-03-25 13:24:20 +00:00
e1950c0ef3 Fix TIPLOC in darwin-tiplocs to be a simple string, rather than an array
All checks were successful
Generate and Release Protos / release (push) Successful in 36s
2026-03-22 19:26:37 +00:00
1a9b68ce41 Add schemas for Darwin Reference data
All checks were successful
Generate and Release Protos / release (push) Successful in 41s
2026-03-21 21:00:27 +00:00
817baa7d66 Remove hashes from PIS data type
All checks were successful
Generate and Release Protos / release (push) Successful in 37s
2026-03-19 06:22:13 +00:00
072902be59 Fix incorrect data type
All checks were successful
Generate and Release Protos / release (push) Successful in 32s
2026-03-02 22:47:25 +00:00
2452e17faa Fix onocorrect data-type 2026-03-02 22:47:08 +00:00
f2a9b7ffdc Ensure types correct
All checks were successful
Generate and Release Protos / release (push) Successful in 35s
2026-03-02 22:25:02 +00:00
4ab05ba738 Adjust declarations and remove uses of the allOf function to assist with type generation
All checks were successful
Generate and Release Protos / release (push) Successful in 38s
2026-02-27 20:18:57 +00:00
10 changed files with 590 additions and 146 deletions

View File

@@ -0,0 +1,50 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/stations.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinStationsNames",
"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": "ref-darwin-station-names",
"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",
"required": ["c", "n"],
"properties": {
"c": {
"type": "string",
"description": "CRS of the location"
},
"n": {
"type": "string",
"description": "The display name of this location"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,58 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/tiplocs.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinTiplocData",
"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": "ref-darwin-tiplocs",
"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",
"required": ["t", "n"],
"properties": {
"c": {
"type": "string",
"description": "CRS of the location"
},
"t": {
"type": "string",
"description": "TIPLOC assigned to the location"
},
"n": {
"type": "string",
"description": "The display name of this location"
},
"l": {
"type": "string",
"description": "The NLC of this location"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,67 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/via-text.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinViaText",
"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": "ref-darwin-via-text",
"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",
"required": ["a", "d", "l1", "v"],
"properties": {
"a": {
"name": "at",
"type": "string",
"description": "The CRS defining where the text should be displayed"
},
"d": {
"name": "destination",
"type": "string",
"description": "The text should apply to trains to this destination"
},
"l1": {
"name": "location-one",
"type": "string",
"description": "Message triggered if loc1 & loc2 (if present) are listed as stops"
},
"l2": {
"name": "location-two",
"type": "string",
"description": "Message triggered if loc1 & loc2 (if present) are listed as stops"
},
"v": {
"name": "viaText",
"description": "The text that should be displayed",
"type": "string"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,77 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/loading-category.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinLoadingCatData",
"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": "ref-darwin-loading-category",
"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",
"required": ["c", "n"],
"properties": {
"c": {
"name": "code",
"type": "string",
"description": "The 'code' for the 'category'"
},
"t": {
"name": "typicalDescription",
"type": "string",
"description": "The 'typicalDescription' of the category"
},
"e": {
"name": "expectedDescription",
"type": "string",
"description": "The 'expectedDescription' of the category"
},
"d": {
"name": "definition",
"description": "The 'definition' of the category",
"type": "string"
},
"n": {
"name": "name",
"description": "The 'name' of the category",
"type": "string"
},
"i": {
"name": "image",
"description": "The 'image' for the category",
"type": "string"
},
"o": {
"name": "TOC",
"description": "The 'toc' for the category",
"type": "string"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,54 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/reasons.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinReasonCodeData",
"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": "ref-darwin-reason-code",
"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",
"required": ["c", "lR", "cR"],
"properties": {
"c": {
"type": "integer",
"description": "The 'code' that the late/cancel reason maps to"
},
"lR": {
"type": "string",
"description": "The lateReason string for the item"
},
"cR": {
"type": "string",
"description": "The cancelReason string for the item"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -0,0 +1,57 @@
{
"$id": "https://schema.owlboard.info/data-ingress/darwin/ref/tocs.schema.json",
"$schema": "https://json-schema.org/draft-07/schema#",
"title": "DarwinTocData",
"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": "ref-darwin-toc",
"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",
"required": ["c", "n"],
"properties": {
"c": {
"name": "ATOC Code",
"type": "string",
"description": "The ATOC 'code' for the TOC"
},
"n": {
"name": "TOC Name",
"type": "string",
"description": "The name of the TOC"
},
"u": {
"name": "URL",
"type": "string",
"description": "URL for TOC Information"
}
}
}
}
},
"required": ["service_name", "service_id", "data_type", "data_kind", "sent_timestamp"],
"additionalProperties": false
}

View File

@@ -14,7 +14,7 @@
}, },
"data_type": { "data_type": {
"type": "string", "type": "string",
"enum": ["file"], "enum": ["file", "raw"],
"description": "The type of data contained in this message object" "description": "The type of data contained in this message object"
}, },
"sent_timestamp": { "sent_timestamp": {
@@ -23,7 +23,7 @@
}, },
"data_kind": { "data_kind": {
"type": "string", "type": "string",
"enum": ["pis", "timetable", "knowledgebase", "darwin_schedule", "darwin_ts", "darwin_ref"], "enum": ["pis", "timetable", "knowledgebase", "PushPort16Schedule", "darwin_ts", "darwin_ref"],
"description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data" "description": "The data type contained in the message. Currently supported PIS: PIS Data, Timetable: CIF or VSTP Data, Knowledgebase: Station Data"
}, },
"payload": {} "payload": {}

View File

@@ -25,13 +25,6 @@
}, },
"description": "List of 3ALPHA/CRS Codes" "description": "List of 3ALPHA/CRS Codes"
}, },
"crsHash": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[0-9]+$",
"description": "Stringified 64-bit hash"
},
"tiplocStops": { "tiplocStops": {
"type": "array", "type": "array",
"items": { "items": {
@@ -41,14 +34,8 @@
"pattern": "^[a-zA-Z0-9]+$" "pattern": "^[a-zA-Z0-9]+$"
}, },
"description": "List of TIPLOC Codes" "description": "List of TIPLOC Codes"
},
"tiplocHash": {
"type": "string",
"minLength": 1,
"maxLength": 64,
"pattern": "^[0-9]+$"
} }
}, },
"required": ["code", "toc", "crsStops", "crsHash", "tiplocStops", "tiplocHash"], "required": ["code", "toc", "crsStops", "tiplocStops"],
"additionalProperties": false "additionalProperties": false
} }

View File

@@ -4,12 +4,13 @@
"title": "PushPortSchedule", "title": "PushPortSchedule",
"description": "Consolidated object definition for Darwin Schedule messages", "description": "Consolidated object definition for Darwin Schedule messages",
"definitions": { "definitions": {
"SchedLocAttributes": { "originPoint": {
"type": "object", "description": "Merged Origin (OR / OPOR). The starting point of the journey.",
"description": "Attributes common to all schedule locations",
"required": [ "required": [
"wtd",
"tpl" "tpl"
], ],
"type": "object",
"properties": { "properties": {
"tpl": { "tpl": {
"type": "string", "type": "string",
@@ -32,13 +33,7 @@
"fid": { "fid": {
"type": "string", "type": "string",
"description": "Unique identifier of the formation data (v3) " "description": "Unique identifier of the formation data (v3) "
} },
}
},
"CallPtAttributes": {
"type": "object",
"description": "Attributes for Calling Points (Optional for Operational variants)",
"properties": {
"pta": { "pta": {
"type": "string", "type": "string",
"description": "Public Scheduled Time of Arrival" "description": "Public Scheduled Time of Arrival"
@@ -50,134 +45,181 @@
"avgLoading": { "avgLoading": {
"type": "string", "type": "string",
"description": "Average Loading value based on long-term averages (v3) " "description": "Average Loading value based on long-term averages (v3) "
},
"wta": {
"type": "string",
"description": "Working Scheduled Time of Arrival (Optional)"
},
"wtd": {
"type": "string",
"description": "Working Scheduled Time of Departure (Required)"
},
"fd": {
"type": "string",
"description": "False Destination TIPLOC (Passenger only)"
} }
} }
}, },
"originPoint": {
"description": "Merged Origin (OR / OPOR). The starting point of the journey.",
"required": [
"wtd"
],
"allOf": [
{
"$ref": "#/definitions/SchedLocAttributes"
},
{
"$ref": "#/definitions/CallPtAttributes"
},
{
"type": "object",
"properties": {
"wta": {
"type": "string",
"description": "Working Scheduled Time of Arrival (Optional)"
},
"wtd": {
"type": "string",
"description": "Working Scheduled Time of Departure (Required)"
},
"fd": {
"type": "string",
"description": "False Destination TIPLOC (Passenger only)"
}
}
}
]
},
"callingPoint": { "callingPoint": {
"description": "Merged Intermediate Point (IP / OPIP). An intermediate stop requiring dwell time.", "description": "Merged Intermediate Point (IP / OPIP). An intermediate stop requiring dwell time.",
"required": [ "required": [
"wta", "wta",
"wtd" "wtd",
"tpl"
], ],
"allOf": [ "type": "object",
{ "properties": {
"$ref": "#/definitions/SchedLocAttributes" "tpl": {
"type": "string",
"description": "TIPLOC"
}, },
{ "act": {
"$ref": "#/definitions/CallPtAttributes" "type": "string",
"default": " ",
"description": "Current Activity Codes"
}, },
{ "planAct": {
"type": "object", "type": "string",
"properties": { "description": "Planned Activity Codes"
"wta": { },
"type": "string", "can": {
"description": "Working Scheduled Time of Arrival (Required)" "type": "boolean",
}, "default": false,
"wtd": { "description": "Cancelled flag"
"type": "string", },
"description": "Working Scheduled Time of Departure (Required)" "fid": {
}, "type": "string",
"rdelay": { "description": "Unique identifier of the formation data (v3) "
"type": "integer", },
"default": 0, "pta": {
"description": "Route delay value" "type": "string",
}, "description": "Public Scheduled Time of Arrival"
"fd": { },
"type": "string", "ptd": {
"description": "False Destination (Passenger only)" "type": "string",
} "description": "Public Scheduled Time of Departure"
} },
"avgLoading": {
"type": "string",
"description": "Average Loading value based on long-term averages (v3) "
},
"wta": {
"type": "string",
"description": "Working Scheduled Time of Arrival (Required)"
},
"wtd": {
"type": "string",
"description": "Working Scheduled Time of Departure (Required)"
},
"rdelay": {
"type": "integer",
"default": 0,
"description": "Route delay value"
},
"fd": {
"type": "string",
"description": "False Destination (Passenger only)"
} }
] }
}, },
"passPoint": { "passPoint": {
"description": "Intermediate Passing Point (PP). Purely operational.", "description": "Intermediate Passing Point (PP). Purely operational.",
"required": [ "required": [
"wtp" "wtp",
"tpl"
], ],
"allOf": [ "type": "object",
{ "properties": {
"$ref": "#/definitions/SchedLocAttributes" "tpl": {
"type": "string",
"description": "TIPLOC"
}, },
{ "act": {
"type": "object", "type": "string",
"properties": { "default": " ",
"wtp": { "description": "Current Activity Codes"
"type": "string", },
"description": "Working Scheduled Time of Passing (Required)" "planAct": {
}, "type": "string",
"rdelay": { "description": "Planned Activity Codes"
"type": "integer", },
"default": 0, "can": {
"description": "Route delay value" "type": "boolean",
} "default": false,
}, "description": "Cancelled flag"
"additionalProperties": false },
"fid": {
"type": "string",
"description": "Unique identifier of the formation data (v3) "
},
"wtp": {
"type": "string",
"description": "Working Scheduled Time of Passing (Required)"
},
"rdelay": {
"type": "integer",
"default": 0,
"description": "Route delay value"
} }
] },
"additionalProperties": false
}, },
"destinationPoint": { "destinationPoint": {
"description": "Merged Destination (DT / OPDT). The termination point of the journey.", "description": "Merged Destination (DT / OPDT). The termination point of the journey.",
"required": [ "required": [
"wta" "wta",
"tpl"
], ],
"allOf": [ "type": "object",
{ "properties": {
"$ref": "#/definitions/SchedLocAttributes" "tpl": {
"type": "string",
"description": "TIPLOC"
}, },
{ "act": {
"$ref": "#/definitions/CallPtAttributes" "type": "string",
"default": " ",
"description": "Current Activity Codes"
}, },
{ "planAct": {
"type": "object", "type": "string",
"properties": { "description": "Planned Activity Codes"
"wta": { },
"type": "string", "can": {
"description": "Working Scheduled Time of Arrival (Required)" "type": "boolean",
}, "default": false,
"wtd": { "description": "Cancelled flag"
"type": "string", },
"description": "Working Scheduled Time of Departure (Optional)" "fid": {
}, "type": "string",
"rdelay": { "description": "Unique identifier of the formation data (v3) "
"type": "integer", },
"default": 0, "pta": {
"description": "Route delay value" "type": "string",
} "description": "Public Scheduled Time of Arrival"
} },
"ptd": {
"type": "string",
"description": "Public Scheduled Time of Departure"
},
"avgLoading": {
"type": "string",
"description": "Average Loading value based on long-term averages (v3) "
},
"wta": {
"type": "string",
"description": "Working Scheduled Time of Arrival (Required)"
},
"wtd": {
"type": "string",
"description": "Working Scheduled Time of Departure (Optional)"
},
"rdelay": {
"type": "integer",
"default": 0,
"description": "Route delay value"
} }
] }
} }
}, },
"type": "object", "type": "object",
@@ -192,7 +234,7 @@
}, },
"data_type": { "data_type": {
"type": "string", "type": "string",
"const": "PushPort16Schedule", "const": "raw",
"description": "The type of data contained in this message object" "description": "The type of data contained in this message object"
}, },
"sent_timestamp": { "sent_timestamp": {
@@ -215,42 +257,94 @@
"locations" "locations"
], ],
"properties": { "properties": {
"rid": {"type": "string", "description": "Rail Identifier - Unique value for the service"}, "rid": {
"uid": {"type": "string", "description": "Unique ID - Unique value for the timetable entry - maps to Network Rail CIF schedules"}, "type": "string",
"ssd": {"type": "string", "format": "date", "description": "Service Start Date - The date the service commences"}, "description": "Rail Identifier - Unique value for the service"
"trainId": {"type": "string", "description": "Headcode"}, },
"toc": {"type": "string", "minLength": 2, "maxLength": 2, "description": "Train Operator (ATOC Code)"}, "uid": {
"rsid": {"type": "string", "description": "Retail Service ID"}, "type": "string",
"status": {"type": "string", "default": "P", "description": "P = Permanent, L = Long Term, S = Short Term"}, "description": "Unique ID - Unique value for the timetable entry - maps to Network Rail CIF schedules"
"trainCat": {"type": "string", "default": "OO", "description": "Train Category"}, },
"isPassenger": {"type": "boolean", "default": true, "description": "Declares the service as a passenger service"}, "ssd": {
"isActive": {"type": "boolean", "default": false, "description": "UNKNOWN"}, "type": "string",
"isCharter": {"type": "boolean", "default": false, "description": "Declares the service as a charter service"}, "format": "date",
"cancelReason": {"type": "integer", "description": "Cancellation Reason code"}, "description": "Service Start Date - The date the service commences"
},
"trainId": {
"type": "string",
"description": "Headcode"
},
"toc": {
"type": "string",
"minLength": 2,
"maxLength": 2,
"description": "Train Operator (ATOC Code)"
},
"rsid": {
"type": "string",
"description": "Retail Service ID"
},
"status": {
"type": "string",
"default": "P",
"description": "P = Permanent, L = Long Term, S = Short Term"
},
"trainCat": {
"type": "string",
"default": "OO",
"description": "Train Category"
},
"isPassenger": {
"type": "boolean",
"default": true,
"description": "Declares the service as a passenger service"
},
"isActive": {
"type": "boolean",
"default": false,
"description": "UNKNOWN"
},
"isCharter": {
"type": "boolean",
"default": false,
"description": "Declares the service as a charter service"
},
"cancelReason": {
"type": "integer",
"description": "Cancellation Reason code"
},
"locations": { "locations": {
"type": "object", "type": "object",
"additionalProperties": false,
"description": "Merged and flattened location objects", "description": "Merged and flattened location objects",
"properties": { "properties": {
"OR": { "OR": {
"type": "array", "type": "array",
"description": "OR/OPOR Values - Trains Origin", "description": "OR/OPOR Values - Trains Origin",
"items": {"$ref": "#/definitions/originPoint"} "items": {
"$ref": "#/definitions/originPoint"
}
}, },
"IP": { "IP": {
"type": "array", "type": "array",
"description": "IP/OPIP Values - Intermediate Points", "description": "IP/OPIP Values - Intermediate Points",
"items": {"$ref": "#/definitions/callingPoint"} "items": {
"$ref": "#/definitions/callingPoint"
}
}, },
"PP": { "PP": {
"type": "array", "type": "array",
"description": "Passing Points (Non-stop)", "description": "Passing Points (Non-stop)",
"items": {"$ref": "#/definitions/passPoint"} "items": {
"$ref": "#/definitions/passPoint"
}
}, },
"DT": { "DT": {
"type": "array", "type": "array",
"description": "DT/OPDT Values - Trains Destination", "description": "DT/OPDT Values - Trains Destination",
"items": {"$ref": "#/definitions/destinationPoint"} "items": {
"$ref": "#/definitions/destinationPoint"
}
} }
} }
} }