CREATE
// nodes
(route1:Route {name:"Route1"}), (route2:Route {name:"Route2"}),
(sensorA:Sensor {name:"SensorA"}), (sensorB:Sensor {name:"SensorB"}), (sensorC:Sensor {name:"SensorC"}),
(segment1:Segment {name:"Segment1"}), (segment2: Segment {name:"Segment2"}), (segment3: Segment {name:"Segment3"}),
(sw:Switch {name:"Switch"}),
(swP1:SwitchPosition {name:"SwP1", position:"DIVERGING"}), (swP2:SwitchPosition {name:"SwP2", position:"STRAIGHT"}),
// requires edges
(route1)-[:requires]->(sensorA),
(route1)-[:requires]->(sensorB),
(route1)-[:requires]->(sensorC),
(route2)-[:requires]->(sensorA),
(route2)-[:requires]->(sensorC),
// monitoredBy edges
(segment1)-[:monitoredBy]->(sensorA),
(sw)-[:monitoredBy]->(sensorA),
(sw)-[:monitoredBy]->(sensorC),
(segment2)-[:monitoredBy]->(sensorB),
(segment3)-[:monitoredBy]->(sensorC),
// connectsTo edges
(segment1)-[:connectsTo]->(sw),
(sw)-[:connectsTo]->(segment2),
(sw)-[:connectsTo]->(segment3),
// target edges
(swP1)-[:target]->(sw),
(swP2)-[:target]->(sw),
// follows edges
(route1)-[:follows]->(swP1),
(route2)-[:follows]->(swP2)