@@ -2,93 +2,110 @@ const { Transform } = require('stream');
22const N3 = require ( 'n3' ) ;
33const { DataFactory } = N3 ;
44const { namedNode, literal, quad } = DataFactory ;
5+ const uri_templates = require ( 'uri-templates' ) ;
6+ const Utils = require ( './Utils' ) ;
57
68class Connections2Triples extends Transform {
7- constructor ( ) {
9+ constructor ( templates ) {
810 super ( { objectMode : true } ) ;
11+ this . _templates = templates ;
912 }
1013
11- _transform ( lc , encoding , done ) {
12- if ( lc [ '@type' ] === 'Connection' ) {
14+ _transform ( conn , encoding , done ) {
15+ // Predefined URI templates
16+ const stopTemplate = uri_templates ( this . templates [ 'stop' ] ) ;
17+ const routeTemplate = uri_templates ( this . templates [ 'route' ] ) ;
18+ const tripTemplate = uri_templates ( this . templates [ 'trip' ] ) ;
19+ const connectionTemplate = uri_templates ( this . templates [ 'connection' ] ) ;
20+
21+ // Resolve values for URIs
22+ const departureStopURI = Utils . resolveURI ( stopTemplate , conn , this . templates [ 'resolve' ] , "departureStop" ) ;
23+ const arrivalStopURI = Utils . resolveURI ( stopTemplate , conn , this . templates [ 'resolve' ] , "arrivalStop" ) ;
24+ const routeURI = Utils . resolveURI ( routeTemplate , conn , this . templates [ 'resolve' ] ) ;
25+ const tripURI = Utils . resolveURI ( tripTemplate , conn , this . templates [ 'resolve' ] ) ;
26+ const connectionURI = Utils . resolveURI ( connectionTemplate , conn , this . templates [ 'resolve' ] ) ;
27+ // Determine Pick Up & Drop Off types
28+ const pickupType = Utils . resolveScheduleRelationship ( conn [ 'pickup_type' ] ) ;
29+ const dropOffType = Utils . resolveScheduleRelationship ( conn [ 'drop_off_type' ] ) ;
30+
31+ if ( conn [ 'type' ] === 'Connection' ) {
1332 this . push (
1433 quad (
15- namedNode ( lc [ '@id' ] ) ,
34+ namedNode ( connectionURI ) ,
1635 namedNode ( 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' ) ,
1736 namedNode ( 'http://semweb.mmlab.be/ns/linkedconnections#Connection' ) ) ) ;
1837 } else {
1938 this . push (
2039 quad (
21- namedNode ( lc [ '@id' ] ) ,
40+ namedNode ( connectionURI ) ,
2241 namedNode ( 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' ) ,
2342 namedNode ( 'http://semweb.mmlab.be/ns/linkedconnections#CancelledConnection' ) ) ) ;
2443 }
2544
2645 this . push (
2746 quad (
28- namedNode ( lc [ '@id' ] ) ,
47+ namedNode ( connectionURI ) ,
2948 namedNode ( 'http://semweb.mmlab.be/ns/linkedconnections#departureStop' ) ,
30- namedNode ( lc [ 'departureStop' ] ) ) ) ;
49+ namedNode ( departureStopURI ) ) ) ;
3150 this . push (
3251 quad (
33- namedNode ( lc [ '@id' ] ) ,
52+ namedNode ( connectionURI ) ,
3453 namedNode ( 'http://semweb.mmlab.be/ns/linkedconnections#arrivalStop' ) ,
35- namedNode ( lc [ 'arrivalStop' ] ) ) ) ;
54+ namedNode ( arrivalStopURI ) ) ) ;
3655 this . push (
3756 quad (
38- namedNode ( lc [ '@id' ] ) ,
57+ namedNode ( connectionURI ) ,
3958 namedNode ( 'http://semweb.mmlab.be/ns/linkedconnections#departureTime' ) ,
40- literal ( lc [ 'departureTime' ] , namedNode ( 'http://www.w3.org/2001/XMLSchema#dateTime' ) ) ) ) ;
59+ literal ( conn [ 'departureTime' ] . toISOString ( ) , namedNode ( 'http://www.w3.org/2001/XMLSchema#dateTime' ) ) ) ) ;
4160 this . push (
4261 quad (
43- namedNode ( lc [ '@id' ] ) ,
62+ namedNode ( connectionURI ) ,
4463 namedNode ( 'http://semweb.mmlab.be/ns/linkedconnections#arrivalTime' ) ,
45- literal ( lc [ 'arrivalTime' ] , namedNode ( 'http://www.w3.org/2001/XMLSchema#dateTime' ) ) ) ) ;
64+ literal ( conn [ 'arrivalTime' ] . toISOString ( ) , namedNode ( 'http://www.w3.org/2001/XMLSchema#dateTime' ) ) ) ) ;
4665 this . push (
4766 quad (
48- namedNode ( lc [ '@id' ] ) ,
67+ namedNode ( connectionURI ) ,
4968 namedNode ( 'http://semweb.mmlab.be/ns/linkedconnections#departureDelay' ) ,
50- literal ( lc [ 'departureDelay' ] , namedNode ( 'http://www.w3.org/2001/XMLSchema#integer' ) ) ) ) ;
69+ literal ( conn [ 'departureDelay' ] , namedNode ( 'http://www.w3.org/2001/XMLSchema#integer' ) ) ) ) ;
5170 this . push (
5271 quad (
53- namedNode ( lc [ '@id' ] ) ,
72+ namedNode ( connectionURI ) ,
5473 namedNode ( 'http://semweb.mmlab.be/ns/linkedconnections#arrivalDelay' ) ,
55- literal ( lc [ 'arrivalDelay' ] , namedNode ( 'http://www.w3.org/2001/XMLSchema#integer' ) ) ) ) ;
74+ literal ( conn [ 'arrivalDelay' ] , namedNode ( 'http://www.w3.org/2001/XMLSchema#integer' ) ) ) ) ;
5675 this . push (
5776 quad (
58- namedNode ( lc [ '@id' ] ) ,
77+ namedNode ( connectionURI ) ,
5978 namedNode ( 'http://vocab.gtfs.org/terms#headsign' ) ,
60- literal ( lc [ 'direction '] , namedNode ( 'http://www.w3.org/2001/XMLSchema#string' ) ) ) ) ;
79+ literal ( conn [ 'headsign '] , namedNode ( 'http://www.w3.org/2001/XMLSchema#string' ) ) ) ) ;
6180 this . push (
6281 quad (
63- namedNode ( lc [ '@id' ] ) ,
82+ namedNode ( connectionURI ) ,
6483 namedNode ( 'http://vocab.gtfs.org/terms#trip' ) ,
65- namedNode ( lc [ 'trip' ] ) ) ) ;
84+ namedNode ( tripURI ) ) ) ;
6685 this . push (
6786 quad (
68- namedNode ( lc [ '@id' ] ) ,
87+ namedNode ( connectionURI ) ,
6988 namedNode ( 'http://vocab.gtfs.org/terms#route' ) ,
70- namedNode ( lc [ 'route' ] ) ) ) ;
71-
72- if ( lc [ 'gtfs:dropOffType' ] && lc [ 'gtfs:dropOffType' ] !== null ) {
73- this . push (
74- quad (
75- namedNode ( lc [ '@id' ] ) ,
76- namedNode ( 'http://vocab.gtfs.org/terms#dropOffType' ) ,
77- namedNode ( lc [ 'gtfs:dropOffType' ] )
78- ) ) ;
79- }
80-
81- if ( lc [ 'gtfs:pickupType' ] && lc [ 'gtfs:pickupType' ] !== null ) {
82- this . push (
83- quad (
84- namedNode ( lc [ '@id' ] ) ,
85- namedNode ( 'http://vocab.gtfs.org/terms#pickupType' ) ,
86- namedNode ( lc [ 'gtfs:pickupType' ] )
87- ) ) ;
88- }
89+ namedNode ( routeURI ) ) ) ;
90+ this . push (
91+ quad (
92+ namedNode ( connectionURI ) ,
93+ namedNode ( 'http://vocab.gtfs.org/terms#dropOffType' ) ,
94+ namedNode ( dropOffType )
95+ ) ) ;
96+ this . push (
97+ quad (
98+ namedNode ( connectionURI ) ,
99+ namedNode ( 'http://vocab.gtfs.org/terms#pickupType' ) ,
100+ namedNode ( pickupType )
101+ ) ) ;
89102
90103 done ( null ) ;
91104 }
105+
106+ get templates ( ) {
107+ return this . _templates ;
108+ }
92109}
93110
94111module . exports = Connections2Triples ;
0 commit comments