Powiązanie zdarzeń (komenda ROUTE) 
 
Połączenie między węzłem generującym zdarzenie a węzłem przyjmującym zdarzenie nazywane jest trasą (route). Węzeł, który wysyła zdarzenia danego typu może być połączone trasą z węzłem przyjmującym zdarzenia tego samego typu, używając następującego zapisu:

ROUTE [nazwa_zDEFiniowanego_węzła].[zdarzenie_changed] TO [nazwa_zDEFiniowanego_węzła].[set_zdarzenie]

Używanie nazw przedrostków set_ i końcówek _changed jest jedynie zalecaną do stosowania konwencją, a nie ścisłą regułą. Ci, którzy tworzą prototypy lub piszą skrypty nazwy dla eventIn i eventOut mogą zostać zastąpione dowolnymi innymi nazwami. Jednakże pole exposedField rozumie jedynie przedrostek set_ i końcówkę _changed, jeżeli zmienimy te nazwy to nie będziemy mogli korzystać z pola exposedField. Dlatego do tworzenia nowych typów zalecane jest stosowanie przedrostków i końcówek określonych tą specyfikacją. Są trzy wyjątki od tego zalecenia: zdarzenia boolean’owskie, zdarzenia czasowe i zdarzenia występujące w podwęzłach węzła grupującego. Typy pól SF/MFBool dla eventIn i eventOut mają przedrostek „is", np.: isActive. Typy pól SF/MFTime dla eventIn i eventOut mają przedrostek „enter", np.: enterTime. Pole eventIn w węzłach zdefiniowanych w polach children dla dodawania lub usuwania „dzieci" wygląda następująco: addChildren (dla dodania) i removeChildren (dla usunięcia).

Trasy nie są węzłami. Trasy są jedynie syntaktyczną konstrukcją służącą do połączenia węzłów, między którymi przebiega zdarzenie. Komenda ROUTE może pojawić się w dowolnym miejscu pliku *.wrl, wewnątrz implementacji prototypu lub w przeznaczonym do tego polu w węźle.

Typy pól eventIn i eventOut muszą dokładnie do siebie pasować. Nie można ustalić połączenia komendą ROUTE między polem o typie SFFloat a polem o typie SFInt32.

Trasy mogą być ustalone tylko od eventOut do eventIn. Jeżeli oba pola lub zdarzenia są rodzaju  exposedField kolejność pola/zdrzenia, od którego zaczniemy nie ma znaczenia. Załóżmy, że mamy zdefiniowane dwa węzły: TouchSensor i DirectionalLight:

DEF Przycisk  TouchSensor      { enabled TRUE }
DEF Swiatlo   DirectionalLight { on FALSE }

wtedy:

ROUTE Przycisk.enabled TO Swiatlo.on

lub

ROUTE Przycisk.enabled_changed TO Swiatlo.on

lub

ROUTE Przycisk.enabled TO Swiatlo.set_on

lub

ROUTE Przycisk.enabled_changed TO Swiatlo.set_on