RailwayContainer ::= Route* Region*; abstract RailwayElement ::= <id:int>; Region : RailwayElement ::= TrackElement* Sensor*; Semaphore : RailwayElement ::= <Signal:Signal>; Route : RailwayElement ::= <Active:boolean> SwitchPosition* <_impl_requires:RefList<Sensor>> <_impl_entry:Semaphore> <_impl_exit:Semaphore>; SwitchPosition : RailwayElement ::= <Position:Position> <_impl_target:Switch>; Sensor : RailwayElement ::= <_impl_monitors:RefList<TrackElement>>; abstract TrackElement : RailwayElement ::= <_impl_monitoredBy:RefList<Sensor>> <_impl_connectsTo:RefList<TrackElement>>; Segment : TrackElement ::= <Length:int> Semaphore*; Switch : TrackElement ::= <CurrentPosition:Position> <_impl_positions:RefList<SwitchPosition>>;