Outil Lelie Manuel Utilisateur 1) Première utilisation 2) Menu Projet 3) Interface principale 4) Vérifications a) Test de cohérence b) Test de complétude c) Test de redondance 5) Remarques 6) Annexes a) Fonctionnement général de l'outil b) Définition du langage logique utilisé c) Données en entrée de l'outil d) Traduction des données d'entrée e) Vérifications des données f) Les phrases logiques prises en compte g) Les balises prises en compte 2 2 3 4 4 5 6 6 7 7 7 7 9 11 12 15 1 1) Première utilisation Assurez vous qu'une machine virtuelle java à jour est installée sur votre machine. Il est possible d'en télécharger une version à jour depuis le site officiel de java : http://www.java.com/fr/download/. Placer l'exécutable lelie.jar et le dossier ressources dans un unique répertoire dédié. Lancer l'outil en exécutant lelie.jar (double clic, commande exécuter avec java depuis le menu contextuel, ou "java -jar Lelie.jar" en invite de commande). A la première utilisation, l'outil demande de spécifier un espace de travail. Il est recommandé de lui proposer un répertoire réservé à cet usage. Il demande ensuite de spécifier l'encodage de fichiers à utiliser (UTF8, UTF16, ISO-8859-15...). Attention : l'encodage spécifié devra être celui de TOUS les fichiers traités par l'outil. Il sera possible de le changer par la suite, mais il est impossible d'utiliser simultanément différents encodages. Il est conseillé de vérifier l'encodage de tout nouveau fichier donné à l'outil et le traduire si besoin. 2) Menu Projet Permet la gestion d'un projet Lelie. Un projet rassemble différents textes sélectionnés lors de sa création et permet de retravailler leur traduction par l'outil avant de les soumettre à diverses vérifications. L'item Nouveau ouvre une fenêtre permettant de saisir les différents champs du projet. Son nom, utilisé pour l'identifier et l'enregistrer doit être unique et ne peut contenir de caractère spécial autre que l'underscore (aussi appelé tiret du 8 ou souligné). 2 Les tableaux Exigences et Procédures permettent d'ajouter des fichiers de textes traités par textcoop et répartis en fichiers individuels. Le bouton Ajouter un fichier complexe permet de donner un fichier de sortie textcoop mixte contenant de nombreuses exigences et procédures. Le tableau Synonymes permet d'ajouter des fichiers de synonymes au format décrit en annexe. En cliquant sur Valider l'outil va pré-traiter tous les textes donnés, ce qui peut prendre quelques minutes sur des volumes conséquents. Attention : Il est possible de créer un projet sans donner de fichiers synonymes ou de désactiver totalement leur utilisation et cochant les cases correspondantes. Ceci est fortement déconseillé car l'efficacité des différentes vérifications en dépend en grande partie. L'item Ouvrir permet d'ouvrir un fichier sauvegardé en mémoire. Pour cela, sélectionnez simplement le fichier Nom_de_votre_projet.projectdata dans le répertoire de travail de l'outil. L'item Éditer ouvre une fenêtre similaire à celle de création de projet. Il est possible d'y ajouter ou supprimer des textes, ou d'y ajouter des fichiers synonymes. En cliquant sur Valider l'outil va pré-traiter tous les textes ajoutés, ce qui peut prendre quelques minutes sur des volumes conséquents. Note : le projet est automatiquement sauvegardé lors du prétraitement. L'item Re-Traiter ordonne à l'outil de pré-traiter tous les textes du projet, ce qui peut prendre quelques minutes sur des volumes conséquents. Cela permet notamment de prendre en compte de nouveaux synonymes ajoutés au projet. L'item Sauver enregistre l'état courant du projet en mémoire, sous la forme d'un fichier Nom_de_votre_projet.projectdata et d'un répertoire Nom_de_votre_projet contenant les divers fichiers créés dans le cadre du projet. 3) Interface principale L'interface principale permet d'explorer les différents fichiers d'un projet dans les tableaux de gauche. Un double clic sur un fichier ouvre un onglet détaillant ses différentes composantes. La zone supérieure contient la phrase originale soumise à l'outil et sa version débarrassée des synonymes, articles et prépositions. La zone inférieure contient la phrase mise sous forme épurée et son masque. 3 Le bouton Modifier Synonyme ouvre une fenêtre permettant de corriger les erreurs de synonymie. Sélectionnez tout d'abord l'expression mal traduite dans la phrase originale (sans sélectionner de séparateur dissociant les différents éléments grammaticaux, ni de ponctuation), puis cliquer sur Trouver. Si l'expression sélectionnée possède un synonyme dans la base de synonymes du projet, il s'affiche alors à droite de la flèche. Il est alors possible de le retirer immédiatement de la base en cliquant sur Supprimer. Qu'un synonyme soit déjà associé ou non, il est possible d'associer un nouveau synonyme à l'expression sélectionnée. Pour cela, tapez le synonyme désiré dans le champ de texte (qui propose automatiquement les synonymes proches dans la base de synonymes du projet) et cliquez sur Lier. Attention : Le nouveau synonyme sera ajouté à la base de synonymes du projet au prochain re-traitement du projet ! Le bouton Erreur Masque permet de générer un rapport d'erreur de masque. Il ouvre une fenêtre permettant de spécifier le masque attendu en lieu et place de celui obtenu ainsi qu'un commentaire. Le rapport d'erreur généré sera automatiquement placé dans un dossier logs_erreur_masques dans le répertoire de travail de l'outil. Il est conseillé de faire remonter ces rapports pour permettre des améliorations futures de l'outil. 4) Vérifications La fonctionnalité principale de l'outil est de permettre différentes vérifications des exigences et procédures. Avant de procéder, il convient d'ouvrir le projet contenant les fichiers à tester et de s'assurer de la justesse de leur traduction. Plus le vocabulaire sera restreint, plus la vérification sera efficace. a) Test de cohérence On accède au test de cohérence par le menu Vérifications > Valider cohérence. Apparaît alors une fenêtre permettant de sélectionner les fichiers à tester parmi ceux du projet. Le bouton Déterminer les exigences requises permet, après avoir sélectionné des procédures de sélectionner automatiquement les exigences portant sur les thèmes de ces procédures. Lancer la vérification en cliquant sur Lancer le test. Une fois le test terminé, une fenêtre affiche son résultat et permet d'ouvrir un log de la vérification. Ce dernier affiche une vue détaillée des diverses étapes de traduction des textes donnés, et, si des incohérences sont apparues, donne l'ensemble de propositions ayant donné lieu à la première incohérence. Note : les items du log sont extensibles, cliquez dessus pour accéder aux informations concernées. Attention : Le log de vérification est un fichier au format xml mis en forme par une feuille de style xsl. Internet explorer et Mozilla Firefox permettent son affichage de manière conviviale, mais la plupart des navigateurs devraient également en être capables. Si votre navigateur par défaut ne permet pas un affichage correct des fichiers logs, vous pouvez les afficher manuellement dans un navigateur le permettant. Les fichiers logs se trouvent dans workspace_défini/nom_du_projet/nom_vérification_date/log.xml 4 Exemple de log : b) Test de complétude On accède au test de complétude par le menu Vérifications > Valider complétude. Apparaît alors une fenêtre permettant de sélectionner les fichiers à tester parmi ceux du projet. Le bouton Déterminer les exigences requises permet, après avoir sélectionné des procédures de sélectionner automatiquement les exigences portant sur les thèmes de ces procédures. Lancer la vérification en cliquant sur Lancer le test. Note : Le test de complétude n'a de sens que si les textes donnés sont cohérents, l'outil effectuera donc un test de cohérence automatique lors du test de complétude. Lecture des résultats : L'échec à un test (en rouge) signifie que son résultat n'a pas été le même sur la procédure seule et sur la procédure conjuguée aux exigences. Ici par exemple, aucune instruction de la procédure ne demande de se protéger, de ne pas utiliser de cordes, ou d'installer des échafaudages, alors que les exigences l'exigent. L'outil mets donc en évidence trois cas d’incomplétude de la procédure. 5 c) Test de redondance On accède au test de complétude par le menu Vérifications > Valider non-redondance. Apparaît alors une fenêtre permettant de sélectionner les fichiers à tester parmi ceux du projet. Le bouton Déterminer les exigences requises permet, après avoir sélectionné des procédures de sélectionner automatiquement les exigences portant sur les thèmes de ces procédures. Lancer la vérification en cliquant sur Lancer le test. Note : Le test de redondance n'a de sens que si les textes donnés sont cohérents, l'outil effectuera donc un test de cohérence automatique lors du test de complétude. Exemple de log : 5) Remarques Certaines vérifications peuvent s'effectuer sur des plages d'instructions afin de réaliser des tests en fenêtre glissante. Pour ce faire, ne sélectionnez qu'un seul fichier procédure lors de la vérification et l'outil vous proposera de n'effectuer le test que sur une plage d'instructions. 6 6) Annexes a) Fonctionnement général de l'outil L'idée exploitée ici est de travailler en deux phases : d'abord traduction des informations (en langage naturel) contenues dans les exigences et/ou les procédures en expressions exprimées dans un langage formel afin d'automatiser leur traitement ; puis utilisation d'un logiciel, appelé « solver », permettant de détecter les incohérences, incomplétudes et redondances parmi un ensemble d'expressions formelles, cet ensemble étant appelé « base de connaissances ». Nous avons choisi d'utiliser un « solver » « open source » disponible sur internet (http://z3.codeplex.com/). D'autre part, l'outil est un module écrit en Java afin de pouvoir réaliser facilement une interface graphique permettant de l'utiliser de manière agréable. b) Définition du langage logique utilisé Le langage formel choisi est la logique des prédicats (aussi appelée logique du premier ordre). Les raisons de ce choix sont les suivantes : ce langage est particulièrement bien connu et assez expressif ; il existe de nombreuses extensions possibles si on veut enrichir la représentation des connaissances manipulées ; il existe aussi de nombreux « solvers » disponibles qui ont bénéficié d'années de mise au point par de très nombreux chercheurs du domaine et qui sont pour la plupart des « open source ». NB : les « solvers » standards ne permettent pas d'utiliser tout l'éventail de la logique du premier ordre, cependant ils autorisent toutes les formules du premier ordre sans symbole de fonctions. L'expressivité de ce langage restreint est néanmoins suffisante pour notre application. c) Données en entrée de l'outil Il faut d'abord distinguer deux types de données en entrée : les exigences : ensemble de connaissances décrivant le contexte dans lequel la procédure va s'exécuter, les procédures : suite ordonnée d'instructions à faire. Ces deux aspects correspondront à deux fichiers distincts. Il faut d'autre part considérer que les exigences ou procédures traitées par l'outil ont déjà subi un pré-traitement qui a permis un échantillonnage avec des marqueurs linguistiques par l'outil « TextCoop ». L'outil prendra donc en entrée des fichiers au format texte, dans lesquels les connaissances seront exprimées sous la forme de phrases du langage naturel, avec pour chaque phrase le repérage par balises (du type balise HTML) des éléments linguistiques et logiques suivants : 7 les verbes les sujets les compléments d'objet les compléments de manière les outils, instruments les lieux les thèmes les valeurs numériques les intervalles de valeurs les comparateurs de valeur les états d'inclusions Exemple 1 : <procedure> procedure 2 : <predicat> fournir </predicat> aux travailleurs <objet> les équipements appropriés </objet> pour <theme> manutentionner </theme> des charges en toute sécurité. lors du levage : <predicat> encadrer </predicat> <objet> la charge </objet> <instr> avec les pieds </instr>. <predicat> utiliser </predicat> <objet> la force des jambes </objet>. <predicat> éviter </predicat> <objet> les mouvements de torsion et de flexion du tronc </objet> lorsque vous êtes chargés. <predicat> poser </predicat> <objet> la charge </objet> <maniere> doucement </maniere>. </procedure> Exemple 2 : <exigence> exigence 2 :<theme> manutentions </theme> les principes de base sont : <predicat> garder </predicat> <objet> la colonne vertébrale droite </objet> et <predicat> éviter </predicat> <objet> les torsions du buste </objet>, <predicat> utiliser </predicat> principalement <objet> la musculature des jambes </objet>, <predicat> porter </predicat> <objet> des équipements de protection </objet> tels que <objet> gants </objet>, <objet> ceinture lombaire </objet> ou <objet> chaussures de sécurité </objet>. </exigence> Seront aussi fournis des fichiers de synonymes permettant de simplifier les phrases afin d'avoir un vocabulaire plus restreint. Ces fichiers de synonymes sont aussi des fichiers au format texte respectant la syntaxe suivante : deux lignes de commentaires en début de fichier donnant le thème traité, puis des paquets de lignes commençant par une ligne avec la chaîne « SYN = » suivie de l'expression donnant le synonyme à utiliser, des lignes avec sur chaque ligne l'expression à remplacer par le synonyme. 8 Exemple 3 : theme : manutention SYN = manutention manutention charges porter des charges manutentionner manutention manuelle Exemple 4 : VERBES SYN = mettre port de être équipé de utiliser se munir de se protéger par protection du corps s'assurer d'une protection efficace se protéger avec employer se protéger à l'aide de disposer de se protéger au moyen de avoir porter enfiler être équipé d) Traduction des données d'entrée Le langage formel utilisé étant la logique du premier ordre sans les symboles de fonction, l'outil de traduction devra traiter chaque phrase de la procédure en plusieurs phases : nettoyage de la phrase (remplacement des expressions par leur synonyme, suppression des articles et des accents) et repérage du thème, identification du masque correspondant à la phrase ; il existe plusieurs masques possibles suivant la sémantique de la phrase (voir en annexe), puis mise en forme de de la phrase au format du masque repéré, traduction au format logique de la phrase ainsi mise en forme. Exemple 1 (suite) : Le texte devient après nettoyage et repérage du thème (à cette occasion, tous les morceaux de phrase non balisés vont disparaître) : <procedure> <theme> manutention </theme> <predicat> mettre </predicat> <objet> équipements appropriés </objet> <predicat> encadrer </predicat> <objet> charge </objet> <instr> avec pieds </instr> <predicat> utiliser </predicat> <objet> force jambes </objet>. <predicat> éviter </predicat> <objet> mouvements torsion et flexion tronc </objet> <predicat> poser </predicat> <objet> charge </objet> <maniere> doucement </maniere> </procedure> 9 Puis, pour chaque phrase, on identifie un masque et on met la phrase au format correspondant. Ici, on va obtenir en utilisant deux masques : <procedure> <theme> manutention </theme> theme etre manutention 0 (masque : sujet verbe-état attribut temps) <predicat> mettre </predicat> <objet> equipements appropries </objet> NULL mettre equipements_appropries NULL NULL 1 (masque : sujet verbe-action COD manière-outil lieu temps) <predicat> encadrer </predicat> <objet> charge </objet> <instr> pieds </instr> NULL encadrer charge avec_pieds NULL 2 (masque : sujet verbe-action COD manière-outil lieu temps) <predicat> utiliser </predicat> <objet> force jambes </objet> NULL utiliser force_jambes NULL NULL 3 (masque : sujet verbe-action COD manière-outil lieu temps) <predicat> eviter </predicat> <objet> mouvements torsion et flexion tronc </objet> NULL eviter mouvements_torsion_et_flexion_tronc NULL NULL 4 (masque : sujet verbe-action COD manière-outil lieu temps) <predicat> poser </predicat> <objet> charge </objet> <maniere> doucement </maniere> NULL poser charge doucement NULL 5 (masque : sujet verbe-action COD manière-outil lieu temps) </procedure> Chaque phrase est alors considérée comme une formule logique devant être vraie au moment correspondant à l'exécution de l'action (rappelons qu'une formule ne peut être que vraie ou fausse). Cela donnera le code suivant adapté au solver « z3 » qui utilise le formalisme logique « smt » : (declare-sort Agent) (declare-sort Item) (declare-sort Place) (declare-sort Attribut) (declare-sort Outil) (declare-const it_theme Item) (declare-const att_theme_manutention Attribut) (declare-const pl_NULL Place) (declare-const ag_NULL Agent) (declare-const ou_NULL Outil) (echo "<theme> manutention </theme>'') (assert (etre_i it_theme att_theme_manutention pl_NULL 0)) (echo "<predicat> fournir </predicat> aux travailleurs <objet> les équipements appropriés </objet> ") (declare-fun mettre (Agent Item Outil Place Int) Bool) (declare-const it_equipements_appropries Item) (assert (fournir ag_NULL it_equipements_appropries ou_NULL pl_NULL 1)) (echo "<predicat> encadrer </predicat> <objet> la charge </objet> <instr> avec les pieds </instr> ") (declare-fun encadrer (Agent Item Outil Place Int) Bool) (declare-const ou_pieds Outil) (declare-const it_charge Item) (assert (encadrer ag_NULL it_charge ou_pieds pl_NULL 2)) (echo "<predicat> utiliser </predicat> <objet> la force des jambes </objet> ") (declare-const it_force_jambes Item) (assert (utiliser ag_NULL it_force_jambes ou_NULL pl_NULL 3)) 10 (echo "<predicat> éviter </predicat> les mouvements de torsion et de flexion du tronc lorsque vous êtes chargés ") (declare-const it_mouvements_torsion_flexion_tronc Item) (assert (eviter ag_NULL it_mouvements_torsion_flexion_tronc ou_NULL pl_NULL 4)) (echo "<predicat> poser </predicat> <objet> la charge </objet> <maniere> doucement </maniere> ") (declare-fun poser (Agent Item Outil Place Int) Bool) (declare-const ou_doucement Outil) (assert (poser ag_NULL it_charge ou_doucement pl_NULL 5)) e) Vérifications des données Les fonctionnalités que l'outil permet de réaliser sont de trois sortes : détection d'incohérence, recherche d'incomplétude et vérification de non-redondance. Cela s'appuie sur la notion de « satisfiabilité » d'une formule (ou d'un ensemble de formules qui est en fait considéré comme la formule correspondant à la conjonction des formules de l'ensemble) : une formule est « satisfiable » si et seulement s'il existe un modèle de cette formule (c'est-à-dire un moyen de la rendre vraie). Et cette vérification de « satisfiabilité » fait partie des opérations de base de tout « solver » logique. Dans les paragraphes suivants, nous montrons à quoi correspondent les fonctionnalités de l'outil en utilisant les notations suivantes : Fi dénotera la formule logique correspondant à la ième instruction, FE dénotera l'ensemble des formules logiques correspondant aux exigences, V(F)={v1, ..., vn} dénotera l'ensemble des littéraux de base positifs ou négatifs issus d'une formule logique F donnée, NEG(F) dénotera la négation logique de la formule F (c'est-à-dire la formule qui est vraie quand F est fausse et fausse quand F est vraie). La détection d'incohérence peut se faire : soit au niveau des exigences, en vérifiant avec le « solver » la satisfiabilité de la formule FE, cela correspond à vérifier si elles ne contiennent pas de contradiction c'est-à-dire qu'elles sont bien applicables. soit au niveau d'une instruction Fi ou d'un ensemble d'instructions {F1, ..., Fn}, en vérifiant avec le « solver » la satisfiabilité de la formule Fi ou de l'ensemble de formules {F1, ..., Fn}, cela correspond à vérifier que l'on n'applique pas des instructions incohérentes entre elles. soit entre les exigences et une instruction Fi ou d'un ensemble d'instructions {F1, ..., Fn}, en vérifiant avec le « solver » la satisfiabilité de l'ensemble {FE, Fi} ou celle de l'ensemble {FE, F1, ..., Fn}, cela correspond à vérifier que les instructions sont bien compatibles avec les exigences. La vérification de non-redondance consiste à vérifier que l'ajout d'une instruction Fk à un ensemble de formules {F1, ..., Fi} permet de déduire de nouveaux faits (si ce n'est pas le cas, cela signifie que l'instruction n'apporte rien et qu'elle peut donc être retirée). Cela doit se faire après avoir vérifié que les formules testées sont bien cohérentes (si ce n'est pas le cas alors le langage logique permet de déduire n'importe quoi et les tests de non-redondance ne sont alors plus significatifs). Le test de non-redondance peut donc se faire en vérifiant que les ensembles {F1, ..., Fi, Fk} et {F1, ..., Fi, NEG(Fk)} sont satisfiables. 11 La recherche d'incomplétude présente deux aspects distincts : soit les exigences toutes seules (donc en l'absence d'instructions) permettent de déduire des nouveaux faits ; dans ce cas-là, cela signifie que les exigences sont trop fortes du point de vue déductif. soit l'union des exigences et des instructions permettent de déduire de nouveaux faits que les instructions seules n'imposaient pas ; cela signifie que les instructions étaient incomplètes. Ces deux tests peuvent se faire de la manière suivante : pour chaque littéral de base v appartenant à v(FE), il ne faut pas que FE seule permette de déduire v, pour chaque littéral de base v appartenant à v({FE, Fi}) tel que FE n'infère pas v alors que {FE,Fi} infère v, il faut vérifier que soit Fi infère v, soit les instructions précédentes à Fi infèrent v tout en étant cohérentes avec Fi. f) Les phrases logiques prises en compte Les formules logiques sont obtenues par traduction des phrases du type : si condition alors conséquence sauf si exception La phrase à traduire devra donc être un enchaînement des trois composantes séparées par le symbole ':' : condition:conséquence:exception Une seule composante est obligatoire (on peut donc au pire avoir une phrase réduite à cette composante : composante Ensuite, chaque composante peut être soit une conjonction, soit une disjonction de souscomposantes sous la forme suivante : sous-composante_1<AND>sous-composante_2<AND> ... <AND>sous-composante_n ou sous-composante_1<OR>sous-composante_2<OR> ... <OR>sous-composante_n (Attention, pour l'instant, nous n'autorisons pas des phrases contenant à la fois des <AND> et des <OR>). Pour chaque sous-composante, sont pris en compte les formats suivants (avec le masque associé) : - Avec verbe d'action, forme active : "AGENT VERBE_ACTION OBJET MANIERE LIEU TEMPS" (masque : "s[c,u,e] v[a,an] co[c,u,e] cm[c,u,e] cl[c,u,e]") - Avec verbe d'action, forme passive : "OBJET VERBE_ACTION AGENT MANIERE LIEU TEMPS" (masque : "s[c,u,e] v[p,pn] ca[c,u,e] cm[c,u,e] cl[c,u,e]") 12 - Avec verbe d'état pour objet : "OBJET VERBE_ETAT ATTRIBUT LIEU TEMPS" (masque : "s[c,u,e] v[e,en] at[c,u,e] cl[c,u,e]") - Avec verbe d'état liant deux objets : "OBJET VERBE_ETAT OBJET LIEU TEMPS" (masque : "s[c,u,e] v[eo,eon] at[c,u,e] cl[c,u,e]") - Avec verbe d'état pour agent : "AGENT VERBE_ETAT ATTRIBUT LIEU TEMPS" (masque : "s[c,u,e] v[ea,ean] at[c,u,e] cl[c,u,e]") - Avec un symbole de comparaison (pour traiter le temps) : "TEMPS COMPARATEUR TEMPS" (masque : "tu comp tu") - Avec une comparaison de valeurs : " VERBE_ACTION OBJET COMPARATEUR VALEUR TEMPS" (masque : "va co[c,u,e] comp[n] nb[c,u,e]") " OBJET VERBE_ETAT COMPARATEUR VALEUR TEMPS " (masque : "co[c,u,e] ve comp[n] nb[c,u,e]") - Avec une inclusion dans un intervalle : " VERBE_ACTION OBJET INCLUSION INTERVALLE TEMPS" (masque : "va co[c,u,e] inc[n] int[c,u,e]") " OBJET VERBE_ETAT INCLUSION INTERVALLE TEMPS " (masque : "co[c,u,e] ve inc[n] int[c,u,e]") la signification des symboles dans les masques est la suivante : - s : sujet - v : verbe - ca : complément d'agent - co : complément d'objet - at : attribut - cm : complément de manière (en fait c'est souvent un outil) - cl : complément de lieu - tu : variable temps à quantifier universellement - comp : comparaison mathématique - inc : inclusion mathématique (potentiellement stricte) - nb : valeur numérique - int : intervalle de valeurs avec les attributs suivants sur s, ca, cm, co, at, cl, nb et int : - c : entité constante - u : entité quantifiée universellement - e : entité quantifiée existentiellement 13 et avec les attributs suivants sur v : - a : verbe d'action sous forme active - an : verbe d'action sous forme active avec une négation - p : verbe d'action sous forme passive - pn : verbe d'action sous forme passive avec une négation - e : verbe d'état pour l'objet - en : verbe d'état pour l'objet avec une négation - ea : verbe d'état pour l'agent - ean : verbe d'état pour l'agent avec une négation - eo : verbe d'état liant 2 objets - eon : verbe d'état liant 2 objets avec une négation et potentiellement la négation pour comp et inc : - compn : négation du comparateur, utile pour « différent de » - incn : négation de l'inclusion Si un élément de la phrase est manquant, on le remplace par la chaîne "NULL". Il pourra alors être considéré comme constant ou universel dans le masque (mais pas existentiel). Exemples : - l'instruction "toto mange une pomme avec ses doigts dans la cuisine au moment 1" sera à traduire sous la forme : toto mange pomme doigt cuisine 1 avec le masque : sc va coc cmc clc - l'instruction "la pomme n'est pas mangée avec les doigts dans la cuisine au moment 1" sera à traduire sous la forme : pomme mange toto doigt cuisine 1 avec le masque : sc vpn cac cm clc - l'instruction "une casserole est un récipient" sera à traduire sous la forme du doublon suivant casserole est recipient NULL avec le masque : sc veo atc clc - l'instruction "la pomme est dans la cuisine au moment 1" sera à traduire sous la forme du doublon suivant : pomme est NULL cuisine 1 avec le masque : sc ve atc clc - l'instruction "si toto mange une pomme dans la cuisine au moment 1 alors toto sera content au moment 2" sera à traduire sous la forme du doublon suivant : toto mange pomme NULL cuisine 1:toto est content NULL 2 avec le masque : sc va coc cmc clc:sc vea atc clc 14 - l'instruction "si toto mange une pomme dans la cuisine au moment 1 alors toto sera content au moment 2 sauf si la pomme est mauvaise" sera à traduire sous la forme du triplet suivant : toto mange pomme NULL cuisine 1:toto est content NULL 2:pomme est mauvaise NULL avec le masque : sc va coc cmc clc:sc vea atc clc:sc ve atc clc - l'instruction "si toto mange une pomme et une poire dans la cuisine au moment 1 alors sera content au moment 2 sauf si la pomme ou la poire sont mauvaises" sera à traduire sous la forme du triplet suivant : toto mange pomme NULL cuisine 1<AND>toto mange poire NULL cuisine 1:toto est content NULL 2:pomme est mauvaise NULL<OR>poire est mauvaise NULL avec le masque : sc va coc cm clc<AND>sc va coc cm clc:sc vea atc clc:sc ve atc clc<OR>sc ve atc clc - l'instruction "vérifier que la valeur de la sonde est égale à 5" sera à traduire sous la forme suivante : verifier valeur_sonde est_egale_a 5 avec le masque : va coc comp nbc - l'instruction "la valeur de la sonde doit être toujours strictement comprise entre 5 et 10" sera à traduire sous la forme suivante : doit_etre valeur_sonde strictement_comprise entre_5_et_10 avec le masque : va coc inc intc g) Les balises prises en compte Les balises traitées par l'outil sont de deux types différents. Celles qui décrivent des éléments de la phrase destinés à correspondre à un des éléments de masque mentionnés page 13 : Balise de début Balise de fin Élément de masque associé <predicat> </predicat> Verbe d'action sous forme active positive ou négative (va ou van) <sujet> </sujet> sujet constant (sc) <objet> </objet> complément d'objet constant (coc) <maniere> </maniere> complément de manière constant (cmc) <location> </location> complément de lieu constant (clc) <comparateur> </comparateur> comparateur (comp, compn) <inclusion> </inclusion> inclusion (inc, incn) <valeur> </valeur> valeur numérique (nb) <intervalle> </intervalle> intervalle (int) 15 Dans ce cas, si une même balise apparaît plusieurs fois dans une phrase, l'outil considère pour l'instant qu'il s'agit d'un ET. Une remarque concernant la prise en compte d'un prédicat négatif : cela se fait à l'aide des fichiers synonymes. Les autres balises sont destinées à permettre à l'outil de gérer la traduction des thèmes suivant le type de données traitées (exigence ou procédure). Elles ne correspondent donc pas à des éléments de masque : Balise de début Balise de fin <exigence> </exigence> <procedure> </procedure> <theme> </theme> Dans le cas d'une exigence, le thème est vu comme une condition alors que dans le cas d'une procédure, le thème est considéré comme une assertion. Le même morceau de texte balisé sera donc traduit différemment suivant qu'il est dans une exigence ou dans une procédure. Exemple : Dans une procédure, le texte suivant : <theme> manutention </theme> <predicat> mettre </predicat> <objet> équipements appropriés </objet> sera mis en forme comme suit : theme etre manutention 0 NULL mettre equipements_appropries NULL NULL 1 Alors que dans une exigence, le même texte : <theme> manutention </theme> <predicat> mettre </predicat> <objet> équipements appropriés </objet> sera mis en forme comme suit : theme etre manutention:NULL mettre equipements_appropries NULL NULL 16