L'application développée utilise principalement deux fichiers : le premier décrit l'enchainement des phrases échangées entre un contrôleur et un pilote. C'est un enchainement logique, une question appelle en retour une réponse standardisée ; cette réponse pouvant varier selon les circonstances du vol (conditions météos, équipements, conditions de trafic etc.). Il semblait naturelle de décrire cette variabilité avec une grammaire XML de gestion de tâches. Nous utilisons des compoundTask (enchainement), orTask (condition), subgraph (sous tâche associée à une orTask) et spawnTask (tâche élémentaire), voir l'exemple complet.
<compoundTask id="PHRASEO" name="Phraséologie"> <call class="info" tab="SO" refid="DEMANDE_MISE_EN_ROUTE"/> <call class="info" tab="SO" refid="DEMANDE_REPOUSSAGE"/> <call class="info" tab="SO" refid="DEMANDE_ROULAGE"/> <call class="warning" tab="SO" refid="TAXI"/> <call class="warning" tab="SO" refid="TRANSFERT_TOUR1"/> <call class="info" tab="DE" refid="CONTACT_TOUR1"/> <call class="info" tab="DE" refid="TRAVERSEE_PISTE"/> <call class="warning" tab="DE" refid="TYPE_ALIGNEMENT"/> <call class="warning" tab="DE" refid="DECOLLAGE"/> ............ </compoundTask>
Ce code décrit les étapes importantes d'un vol. Il contient les appels à l'initiative des pilotes class="info" ou à l'initiative des contrôleurs class="warning" Les valeurs des attributs n'ont pas de valeur métier ; ils se rapportent aux valeurs du Twitter Bootstrap. Le deuxième attribut précise la phase du vol ; tab="SO" indique que l'avion est au sol. Ce découpage permet de ranger les tâches selon les onglets suivants : Sol, Décollage, Croisière, Approche, Atterrissage, Sol. Le dernier attribut va préciser la tâche appellée : refid="DEMANDE_MISE_EN_ROUTE" joue la tâche DEMANDE_MISE_EN_ROUTE qui est une orTask.
<orTask id="DEMANDE_MISE_EN_ROUTE" name="Mise en route"> <para lang="fr" class="Pilot"> [DEP] [NDEL], [POL], [CAL] en [POS], demandons mise en route pour [ARR], information [INF]. </para> <para lang="en" class="Pilot"> [DEP] [NDEL], [POL], [CAL] gate [POS], requesting startup to [ARR], [INF] information. </para> <subgraph> <call class="warning" refid="MER_APPROUVEE"/> </subgraph> <subgraph> <call class="warning" refid="MER_DIFFEREE"/> </subgraph> <subgraph> <call class="warning" refid="MER_OMNI"/> </subgraph> <subgraph> <call class="warning" refid="NON_RNAV"/> </subgraph> </orTask>
Cette tâche démarre toujours par la demande de clairance <para lang="fr" class="Pilot"> Deux attributs décrivent la langue (FR) et l'orateur (Pilot). Toutes les phrases sont traduites en anglais. Un pilote français devant nécessairement être capable de gérer un vol aussi bien dans sa langue maternelle qu'en anglais. Le contrôleur a le choix de sa réponse (orTask), il peut approuver la requête, la différer etc. Si le choix se porte sur la mise en route approuvée : refid="MER_APPROUVEE", le système va jouer la tâche correspondante :
<spawnTask id="MER_APPROUVEE" name="MER approuvée"> <para lang="fr" class="ATC"> [CAL], [POL], mise en route approuvée, départ [STA], piste [RWY], montée initiale [NIV], transpondeur [SQU]. </para> <para lang="fr" class="Pilot"> Mise en route approuvée, départ [STA], piste [RWY], montée initiale [NIV], transpondeur [SQU], [CAA]. </para> <para lang="fr" class="ATC"> [CAL], correct, rappelez prêt pour le repoussage sur [DEP] [GND] {ce rappel est nécessaire uniquement en cas de transfert}. </para> <para lang="en" class="ATC"> [CAL], [POL], startup approved, [STA] departure, runway [RWY], initial climb [NIV], squawk [SQU]. </para> <para lang="en" class="Pilot"> startup approved, [STA] departure, runway [RWY], intitial climb [NIV], squawk [SQU]. </para> <para lang="en" class="ATC"> [CAL], correct, report ready for push-back [DEP] [GND] {ce rappel est nécessaire uniquement en cas de transfert}. </para> </spawnTask>
MER_APPROUVEE est une spawnTask ; elle ne contient que du texte. Ce dernier comporte des jetons comme par exemple [CAL]. Le système va remplacer dynamiquement ce jeton par le callsign (indicatif) du pilote.