@@ -58,49 +58,105 @@ pipeline GtfsRTSimplePipeline {
5858 }
5959
6060 // 5. Next, we interpret the sheets as tables
61+ valuetype TripUpdate {
62+ property headerGtfsRealtimeVersion oftype text;
63+ property headerTimestamp oftype text;
64+ property headerIncrementality oftype text;
65+ property entityId oftype text;
66+ property entityTripUpdateTripTripId oftype text;
67+ property entityTripUpdateTripRouteId oftype text;
68+ property entityTripUpdateStopTimeUpdateStopSequence oftype text;
69+ property entityTripUpdateStopTimeUpdateStopId oftype text;
70+ property entityTripUpdateStopTimeUpdateArrivalTime oftype text;
71+ property entityTripUpdateStopTimeUpdateDepartureTime oftype text;
72+ }
73+ transform TripUpdateParser {
74+ from r oftype Collection<text>;
75+ to tripUpdate oftype TripUpdate;
76+
77+ tripUpdate: {
78+ headerGtfsRealtimeVersion: r cellInColumn "header.gtfs_realtime_version",
79+ headerTimestamp: r cellInColumn "header.timestamp",
80+ headerIncrementality: r cellInColumn "header.incrementality",
81+ entityId: r cellInColumn "entity.id",
82+ entityTripUpdateTripTripId: r cellInColumn "entity.trip_update.trip.trip_id",
83+ entityTripUpdateTripRouteId: r cellInColumn "entity.trip_update.trip.route_id",
84+ entityTripUpdateStopTimeUpdateStopSequence: r cellInColumn "entity.trip_update.stop_time_update.stop_sequence",
85+ entityTripUpdateStopTimeUpdateStopId: r cellInColumn "entity.trip_update.stop_time_update.stop_id",
86+ entityTripUpdateStopTimeUpdateArrivalTime: r cellInColumn "entity.trip_update.stop_time_update.arrival.time",
87+ entityTripUpdateStopTimeUpdateDepartureTime: r cellInColumn "entity.trip_update.stop_time_update.departure.time",
88+ };
89+ }
6190 block TripUpdateTableInterpreter oftype TableInterpreter {
6291 header: true;
63- columns: [
64- "header.gtfs_realtime_version" oftype text,
65- "header.timestamp" oftype text,
66- "header.incrementality" oftype text,
67- "entity.id" oftype text,
68- "entity.trip_update.trip.trip_id" oftype text,
69- "entity.trip_update.trip.route_id" oftype text,
70- "entity.trip_update.stop_time_update.stop_sequence" oftype text,
71- "entity.trip_update.stop_time_update.stop_id" oftype text,
72- "entity.trip_update.stop_time_update.arrival.time" oftype text,
73- "entity.trip_update.stop_time_update.departure.time" oftype text,
74- ];
92+ columns: TripUpdate;
93+ parseWith: TripUpdateParser;
7594 }
7695
96+
97+ valuetype VehiclePosition {
98+ property headerGtfsRealtimeVersion oftype text;
99+ property headerTimestamp oftype text;
100+ property headerIncrementality oftype text;
101+ property entityId oftype text;
102+ property entityVehiclePositionVehicleDescriptorId oftype text;
103+ property entityVehiclePositionTripTripId oftype text;
104+ property entityVehiclePositionTripRouteId oftype text;
105+ property entityVehiclePositionPositionLatitude oftype text;
106+ property entityVehiclePositionPositionLongitude oftype text;
107+ property entityVehiclePositionTimestamp oftype text;
108+ }
109+ transform VehiclePositionParser {
110+ from r oftype Collection<text>;
111+ to vehiclePosition oftype VehiclePosition;
112+
113+ vehiclePosition: {
114+ headerGtfsRealtimeVersion: r cellInColumn "header.gtfs_realtime_version",
115+ headerTimestamp: r cellInColumn "header.timestamp",
116+ headerIncrementality: r cellInColumn "header.incrementality",
117+ entityId: r cellInColumn "entity.id",
118+ entityVehiclePositionVehicleDescriptorId: r cellInColumn "entity.vehicle_position.vehicle_descriptor.id",
119+ entityVehiclePositionTripTripId: r cellInColumn "entity.vehicle_position.trip.trip_id",
120+ entityVehiclePositionTripRouteId: r cellInColumn "entity.vehicle_position.trip.route_id",
121+ entityVehiclePositionPositionLatitude: r cellInColumn "entity.vehicle_position.position.latitude",
122+ entityVehiclePositionPositionLongitude: r cellInColumn "entity.vehicle_position.position.longitude",
123+ entityVehiclePositionTimestamp: r cellInColumn "entity.vehicle_position.timestamp",
124+ };
125+ }
77126 block VehiclePositionTableInterpreter oftype TableInterpreter {
78127 header: true;
79- columns: [
80- "header.gtfs_realtime_version" oftype text,
81- "header.timestamp" oftype text,
82- "header.incrementality" oftype text,
83- "entity.id" oftype text,
84- "entity.vehicle_position.vehicle_descriptor.id" oftype text,
85- "entity.vehicle_position.trip.trip_id" oftype text,
86- "entity.vehicle_position.trip.route_id" oftype text,
87- "entity.vehicle_position.position.latitude" oftype text,
88- "entity.vehicle_position.position.longitude" oftype text,
89- "entity.vehicle_position.timestamp" oftype text
90- ];
128+ columns: VehiclePosition;
129+ parseWith: VehiclePositionParser;
91130 }
92131
132+
133+ valuetype Alert {
134+ property headerGtfsRealtimeVersion oftype text;
135+ property headerTimestamp oftype text;
136+ property headerIncrementality oftype text;
137+ property entityId oftype text;
138+ property entityAlertInformedEntityRouteId oftype text;
139+ property entityAlertHeaderText oftype text;
140+ property entityAlertDescriptionText oftype text;
141+ }
142+ transform AlertParser {
143+ from r oftype Collection<text>;
144+ to alert oftype Alert;
145+
146+ alert: {
147+ headerGtfsRealtimeVersion: r cellInColumn "header.gtfs_realtime_version",
148+ headerTimestamp: r cellInColumn "header.timestamp",
149+ headerIncrementality: r cellInColumn "header.incrementality",
150+ entityId: r cellInColumn "entity.id",
151+ entityAlertInformedEntityRouteId: r cellInColumn "entity.alert.informed_entity.route_id",
152+ entityAlertHeaderText: r cellInColumn "entity.alert.header_text",
153+ entityAlertDescriptionText: r cellInColumn "entity.alert.description_text",
154+ };
155+ }
93156 block AlertTableInterpreter oftype TableInterpreter {
94157 header: true;
95- columns: [
96- 'header.gtfs_realtime_version' oftype text,
97- 'header.timestamp' oftype text,
98- 'header.incrementality' oftype text,
99- 'entity.id' oftype text,
100- 'entity.alert.informed_entity.route_id' oftype text,
101- 'entity.alert.header_text' oftype text,
102- 'entity.alert.description_text' oftype text,
103- ];
158+ columns: Alert;
159+ parseWith: AlertParser;
104160 }
105161
106162 // 6. Last, we load the tables into the same SQLite file.
@@ -124,4 +180,4 @@ pipeline GtfsRTSimplePipeline {
124180 file: "./gtfs.sqlite";
125181 dropTable: false;
126182 }
127- }
183+ }
0 commit comments