WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Réconciliation par consensus des mises à  jour des répliques partielles d'un document structuré.

( Télécharger le fichier original )
par Milliam Maxime Zekeng Ndadji
Université de Dschang - Master 2 2016
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

    UNIVERSITÉ DE DSCHANG UNIVERSITY OF DSCHANG

    ********* *********

    ÉCOLE DOCTORALE POSTGRADUATE SCHOOL

    ********* *********

    FACULTÉ DES SCIENCES FACULTY OF SCIENCES

    DSCHANG SCHOOL OF SCIENCES AND TECHNOLOGY

    DÉPARTEMENT DE MATHÉMATIQUES-INFORMATIQUE
    DEPARTMENT OF MATHEMATICS AND COMPUTER SCIENCE

     

    Présenté et soutenu en accomplissement

    de Master Option :

    Matricule

    Licencié

    Sous

    Chargé de Cours, Université

    Mémoire

    partiel, en vue de l'obtention du diplôme en Informatique

    Par

    : CM04-10SCI1755 en Informatique

    la direction de

    de Dschang, Cameroun.

    2016

     

    REPUBLIQUE DU CAMEROUN
    Pay-- Tramait - Patrie
    REPUBLIC OF CAtOON
    Peace Work Faheerattif

    UNIVERSTIt DE DSCHAI4G UNIVERSITY OF D NG

    Sdrrdae Theariirass hi ancrienex

    BP 96, Dschang (Cameroun) - i fEax 7) 233 45 H Ri W _http://www.univ-dschang.org_ E-rwena_udsrectorat(a~ univ-dschang.org

     

    FA CULTE DES SCIENCES

    FACULTY OF SCIENCE

    Département de Mathématiques et
    bairemnatique
    Department ofMathernatir c and Comprittr
    Science

    BE 67, Dschang (Ornerons)

    TILfFax j237 233 45 17 35

    --~ dept-MI.sciences, univ-dschang.org

    FICHE DE CERTIFICATION DE L'ORIGINALITÉ DU TRAVAIL

    Je soussigné ZEKENG NDADJI Milliam Maxime, matricule CM04-IOSCI1755, atteste que le présent Mémoire est le fruit de mes propres travaux effectués au Laboratoire d'Informatique Fondamentale et Appliquée (LIFA) de l'Université de Dschang sous la direction de Dr TCHOUPÉ TCHENDJI Maurice, Chargé de cours à l'Université de Dschang.

    Ce Mémoire est authentique et n'a pas fait l'objet d'une présentation antérieure pour l'acquisition de quelque grade universitaire que ce soit.

    Fait à Dschang le 18 Juillet 2016

    L'auteur L'encadreur

    ZEKENG NDADJI Milliam Maxime TCHOUPÉ TCHENDJI Maurice

    (Chargé de cours, Directeur du Mémoire)

    Chef de département

    TAYOU DJAMEGNI Clémentin
    (Maitre de conférences)

     
     

    TCHOUPË TCHENDJI Maurice (Chargé de cours)

    TAYOU DJAMEGNI Clémentin (Maitre de conférences)

     
     

    Chef de département

     
     

    TAYOU DJAMEGNI Clémentin (Maitre de conférences)

    KENGNE TCHENDJI Vianney (Chargé de cours)

    REPUBLIQUJE DU CAMEROUN

    Puzx-- Pairie

    REPcmuc OF CAMEROON
    Pence -- Work Ruherlaud

    UMVERSTIt IIA.

    UNIVERS= OF DSCELANG
    Scitalat Thesmausi&hairgeasis Ibi Confina

    BP 96, Dschang (Cameroun) -- Ta /Fax (237) 233 4513 St
    Wd.aitiL-http: //www.univ-dschang.org_
    E- _ udsrectorat@univ-dschang org

     

    FACULTE DES SCIENCES
    FACULTY OF SCIENCE

    Département de Iviadtimatiques et
    htfiarma€igne
    Depatiment of Idathemaiks and Computer
    Scie ce

    BP 67, Dschang (CamercIZI)
    T"OJFax (237) 233 45 17 35

    E-nom _ deot-MI. sciences ( univ-dschang.org

    ATTESTATION OE CORRECTION OU MEMOIRE DE MASTER (c)E
    Monsieur ZEKENG 14DADJI Milliam Maxime

    Nous attestons que le Mémoire de Master de Monsieur ZEKENG NDADJI Milliam Maxime intitulé «Réconciliation par consensus des mises à jour des répliques partielles d'un document structuré » a effectivement été corrigé, conformément aux remarques et aux recommandations du Jury devant lequel, ledit Mémoire a été soutenu le 12 Juillet 2016, au Département de Mathématiques-Informatique de la Faculté des Sciences de l'Université de Dschang.

    En foi de quoi, la présente attestation lui est délivrée pour servir et valoir ce que de droit.

    Fait à Dschang le 18 Juillet 2016

    Président du Jury Rn . .. rteur, du Tu

    Dédicaces

    i

    À mon père NDADJI EMMANUEL et à ma mère MAFFO ZEMTSOP MARIE.

    ii

    Remerciements

    Alors que mon regard s'illumine et que je commence à percevoir le bout de cet énorme tunnel que fut ce travail, je remarque que tous les progrès réalisés et présentés ici, reposent sur l'infinie bonté du Seigneur et sur les qualités innombrables et incomparables de bien de personnes, tant physiques que morales. Je ne trouverai certainement pas les formules justes pour vous exprimer toute ma gratitude. Pour compenser, si cela est possible, je voudrais mentionner ici vos noms et/ou prénoms ainsi que vos rôles respectifs dans l'accomplissement de ce travail. Un merci chaleureux:

    -- Au Dr. TCHOUPÉ TCHENDJI Maurice, mon encadreur, parce que vous avez su avoir confiance en moi et qu'avec le laps de temps qui nous était imparti, vous avez fait de moi un prototype d'éditeur coopératif de documents structurés. Vous êtes, sans conteste, mon idole;

    -- À tous les membres du jury, pour l'immense honneur que vous m'accordez en appréciant ce travail;

    -- À tous les enseignants du département de Mathématiques-Informatique de la Faculté des Sciences de l'université de Dschang (en particulier, le Pr. TAYOU DJAMEGNI Clémentin), pour tous vos enseignements et conseils judicieux;

    -- Au Dr. FUTE TAGNE Elie, parce que vous avez su aller au delà de votre fonction d'enseignant pour vous imposer comme un véritable père pour moi;

    -- Au Dr. KENGNE TCHENDJI Vianney, à M. SOH Mathurin, au Dr. BOMGNI Alain Bertrand et à M. KUITCHE KAMELA Esaïe Durel, vous m'avez fait prendre conscience des capacités et des possibilités qui étaient à ma bourse en me proposant régulièrement des challenges;

    -- À mes parents, NDADJI Emmanuel et MAFFO ZEMTSOP Marie, parce que vous vous êtes donné la peine d'assurer mon éducation depuis ma naissance;

    -- À mes frères et soeurs (Chanceline, Emanie, Alex alias Tété, Arnold alias Nicky, Brice alias Toutou), pour votre soutien inconditionnel;

    -- À tous mes camarades de promotion de Master 2 Recherche, je ne vous changerai pour rien au monde parce qu'avec vous, j'apprends à devenir un Homme meilleur. Merci pour vos relectures et vos suggestions constructives;

    -- À tous mes amis (Audrey, Jaurès, Blaise, Brel, Armel, Lionel, Léonard, Osman, Rodrigue, Sidoine, Yannick, Patrick, Doris, Fabrice, Jeanne, Ange...), vous avez tellement pensé tout haut que j'allais y arriver au point que je commence à y arriver;

    -- À tous mes collègues des lycées technique et classique de Dschang, pour votre dynamisme permanent qui a été pour moi une source d'inspiration;

    -- À tous les membres et amis de la communauté Maths-Info Universe, pour votre confiance et la bonne humeur permanente dont vous faites preuve;

    -- À ZILE CHONGANG Virginie, pour tout et le reste;

    -- Que tous ceux dont les noms ne figurent pas sur cette page ne se sentent point lésés.

    iii

    Table des matières

    Dédicaces i

    Remerciements ii

    Résumé vi

    Abstract vii

    Introduction 1

    Le contexte du travail 1

    Les documents structurés 1

    L'édition coopérative des documents structurés 2

    La problématique étudiée 2

    Le travail réalisé 3

    Organisation du manuscrit 3

    Chapitre 1 Notions d'édition coopérative et de conflits 5

    1.1 - Le travail coopératif 5

    1.1.1 - Coopération vs Collaboration 6

    1.1.1.1 - Le comportement des personnes 6

    1.1.1.2 - L'organisation du travail 6

    1.1.2 - Notion de Travail Coopératif Assisté par Ordinateur (CSCW) 7

    1.1.2.1 - Les caractéristiques des systèmes de CSCW 7

    1.1.2.2 - Classification des systèmes de CSCW 8

    1.1.2.3 - Les systèmes de CSCW comme systèmes à flots de tâches . . . 9

    1.2 - Un exemple de CSCW : L'édition coopérative 11

    1.2.1 - Les types de documents électroniques 11

    1.2.1.1 - Les documents non structurés 12

    1.2.1.2 - Les documents structurés 12

    1.2.2 - Les documents dans un système de workflow (BPMN) 14

    1.2.3 - Édition coopérative et conflits 15

    1.2.3.1 - Les techniques de détection des conflits 17

    1.2.3.2 - La résolution des conflits 17

    1.3 - Synthèse 18

    Chapitre 2 L'édition coopérative des documents structurés 19

    2.1 - Documents structurés, conformité et édition 19

    2.1.1 - Représentation d'un document structuré 20

    2.1.2 - Conformité d'un document structuré 21

    2.1.2.1 - Notion d'AST (Abstract Syntax Tree) 21

    2.1.2.2 - Notion d'automate d'arbre 22

    2.1.3 - Une approche d'édition coopérative des documents structurés 24

    2.2 - Vues, projection et répliques partielles 26

    2.2.1 - Les vues d'un document structuré 26

    2.2.2 - Projection d'un document structuré 27

    Table des matières iv

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    2.3 - Expansion des répliques partielles 27

    2.3.1 - Le problème de la projection inverse 28

    2.3.2 - Sérialisation d'un document structuré 29

    2.3.3 - Représentation de l'expansion d'une réplique partielle et exemple . . . 30

    2.4 - Fusion des répliques partielles 31

    2.4.1 - Produit synchrone des automates d'arbre 31

    2.4.2 - Fusion des répliques partielles 32

    2.5 - Synthèse 32

    Chapitre 3 Fusion consensuelle des mises à jour des répliques partielles 33

    3.1 - Problématique de la réconciliation par consensus 34

    3.2 - Calcul du consensus 34

    3.2.1 - Consensus entre plusieurs (deux) documents 35

    3.2.2 - Construction de l'automate du consensus 36

    3.2.3 - Illustration de l'algorithme de la fusion consensuelle 39

    3.3 - Synthèse 43

    Chapitre 4 Un prototype d'éditeur coopératif désynchronisé (TinyCE v2) 45

    4.1 - Architecture et fonctionnement de TinyCE v2 46

    4.1.1 - Fertilisation croisée Haskell-Java 47

    4.1.2 - Interaction client-serveur 52

    4.2 - Le matériel de construction de TinyCE v2 52

    4.3 - Mise en oeuvre d'un workflow d'édition sous TinyCE v2 53

    4.4 - Synthèse 54

    Conclusion générale 58

    La problématique étudiée et les choix méthodologiques 58

    Analyse critique des résultats obtenus 59

    Quelques perspectives 60

    Bibliographie 61

    Annexe A Un autre exemple complet de fusion consensuelle 65

    Annexe W Quelques fonctions Haskell pour le calcul des consensus 69

    v

    Table des figures

    1.1 - Matrice 2 x2 de Johansen [Joh88] pour la catégorisation des systèmes de CSCW. 9 1.2 - Matrice 3 x 3 de Grudin pour la catégorisation des systèmes de CSCW [Sar05]. 10

    1.3 - Un exemple de document structuré XML contraint par une DTD. 13
    1.4 - Un exemple de diagramme d'orchestration BPMN, illustrant le processus de

    sélection d'un étudiant dans une des filières de la FS UDs. 16

    2.1 - Représentation graphique d'un arbre et indexation de ses éléments. 21

    2.2 - Un AST et l'arbre de dérivation qu'il détermine 22

    2.3 - Illustration de la procédure de vérification de la conformité d'un arbre à partir

    d'un automate d'arbre 24
    2.4 - Un diagramme d'orchestration BPMN pour le processus d'édition coopérative

    désynchronisée. 26

    2.5 - Exemple de projections et de mises à jour effectuées sur un document 27

    2.6 - Exemple de projections inverses d'une réplique partielle 28

    2.7 - Linéarisation d'un arbre (tma j

    v1 ) : on a associé les symboles de Dyck '(1' et ')1'

    (resp. '(2' et ')2') au symbole grammatical A (resp. B) 29

    3.1 - Fusion consensuelle progressive de deux documents 36

    3.2 - Exemple de workflow d'une édition avec conflit et consensus correspondant. . 40

    3.3 - Arbres consensuels générés à partir de l'automate (sc). 43

    4.1 - Le logo de TinyCE v2. 46

    4.2 - L'architecture de TinyCE v2. 47

    4.3 - Utilisation de TinyCE v2 en mode serveur (poste 1) : création du work-

    flow ExempleChapitre3 avec 3 acteurs (Maxim10 (propriétaire ayant une vue globale), Auteur1 (associé à la vue '1"1 = {A,B}) et Auteur2 (associé à la vue

    '1"2 = {A,C})) 55
    4.4 - Utilisation de TinyCE v2 par le co-auteur Auteur1 : authentification et connexion

    au workflow ExempleChapitre3 55
    4.5 - Modèle local et réplique partielle obtenus par le co-auteurAuteur1, à partir du

    modèle et du document initial du workflow ExempleChapitre3. 56
    4.6 - Édition de sa réplique partielle par Auteur1, conformément au modèle local reçu. 56 4.7 - Consensus obtenu après synchronisation des mises à jour apportées sur leurs

    répliques partielles respectives, par les co-auteurs Auteur1 et Auteur2. 57

    A.1 - AST et arbre de dérivation généré à partir de l'automate consensuel (sc). . . . 68

    vi

    Résumé

    Le travail réalisé dans ce mémoire s'inscrit dans le domaine du CSCW (Computer Supported Cooperative Work); plus précisément, il contribue aux travaux sur l'édition coopérative des documents et a pour but, la production d'un algorithme de fusion des répliques partielles d'un document structuré. En fait, dans un workflow d'édition coopérative asynchrone d'un document structuré, chacun des co-auteurs reçoit au cours des différentes phases du processus d'édition une copie du document pour y insérer sa contribution. Pour des raisons de confidentialité, cette copie peut n'être qu'une réplique partielle ne contenant que les parties du document (global) qui sont d'un intérêt avéré pour le coauteur considéré. Remarquons que certaines parties peuvent être d'un intérêt avéré pour plus d'un co-auteur; elles seront par conséquent accessibles et éditables en concurrence. Quand vient le moment de la synchronisation (à la fin d'une phase du processus d'édition par exemple), il faut alors fusionner toutes les contributions de tous les co-auteurs en un document unique. Du fait de l'asynchronisme de l'édition et de l'existence potentielle des parties offrant des accès concurrents, des conflits peuvent surgir et rendre les répliques partielles non fusionnables dans leur entièreté : on dit que ces répliques sont incohérentes ou en conflit. Nous proposons dans ce mémoire une approche de fusion (basée sur le modèle d'édition coopérative proposé dans [BTT08, BTT07, TT09]) dite par consensus de telles répliques partielles à l'aide des automates d'arbres. Plus précisément, à partir des répliques partielles mises à jour, nous construisons un automate d'arbre dit du consensus qui accepte et/ou engendre exactement les préfixes maximums ne contenant pas de conflit des répliques partielles fusionnées. Ces préfixes maximums constituent les documents du consensus.

    Mots clés : Documents structurés, Workflow d'édition Coopérative, Fusion des répliques partielles, Conflits, Consensus, Automates d'arbre, Produit d'automates, Évaluation paresseuse, TinyCE v2.

    vii

    Abstract

    The work presented in this master thesis belongs to CSCW (Computer Supported Cooperative Work) research field; precisely, it is a contribution to the cooperative editing of documents and its goal is, the production of an algorithm that can merge partial replicas of a structured document. In fact, in an asynchronous cooperative editing workflow of a structured document, each of the co-authors receives in the different phases of the process, a copy of the document in which he inserts his contribution. Sometimes, to increase confidentiality and cooperation, this copy may only be a partial replica containing just some parts of the (global) document which are of demonstrated interest for the considered co-author. Note that some parts may interest more than one co-author; those parts will therefore be accessible and editable concurrently. When comes the synchronization time (at the end of a phase of the process for example), a merging of all contributions of all authors in a single document should be made. Due to the asynchronism of edition and to the potential existence of the document parts offering concurrent access, conflicts may arise when merging and make partial replicas unmergeable in their entirety: those replicas are inconsistent or in conflict. We propose in this master thesis, a merging approach (based on the cooperative edition model presented in [BTT08, BTT07, TT09]) said by consensus of such partial replicas using tree automata. Specifically, from the updated partial replicas, we build a tree automaton that accepts and/or generates exactly the maximum prefixes containing no conflict of partial replicas merged. These maximum prefixes are the consensus documents.

    Keywords : Structured documents, Worflow of cooperative edition, Merging partial replicas, Conflict, Consensus, Tree automata, Automata product, Lazy evaluation, TinyCE v2.

    1

    Introduction

    Sommaire

    Le contexte du travail 1

    La problématique étudiée 2

    Le travail réalisé 3

    Organisation du manuscrit 3

    Le contexte du travail

    La coopération et la collaboration apparaissent de nos jours comme des valeurs essentielles pour les entreprises, les différentes instances municipales et gouvernementales, les établissements de santé, les grandes institutions d'enseignement et autres... Réunir plusieurs acteurs (spécialistes) autour d'un objectif commun est donc devenu un véritable challenge [Gir14]. C'est dans ce contexte que le Travail Coopératif Assisté par Ordinateur (TCAO ou CSCW - Computer Supported Cooperative Work - en anglais) a vu le jour et a évolué. Le domaine du CSCW a favorisé la mise sur pied de nombreux logiciels (group-ware ou systèmes de CSCW) et de plusieurs approches scientifiques pour la résolution des problèmes causés par le CSCW : ces problèmes sont liés essentiellement aux contraintes d'espace (la situation géographique de chaque acteur) et de temps (le mode de communication entre les acteurs). Les systèmes de CSCW permettent de mettre en relation plusieurs acteurs répartis dans le temps, l'espace et à travers les organisations afin que ces derniers coordonnent leurs actions pour l'accomplissement d'une tâche précise.

    Un exemple très présent de CSCW est l'édition coopérative des documents. En effet, on rencontre de plus en plus le scénario des auteurs situés sur des sites géographiquement éloignés qui se coordonnent pour éditer de façon asynchrone un même document (c'est le cas par exemple de plusieurs chercheurs rédigeant un même article de recherche). D'autres cas de CSCW reposent parfois sur l'édition coopérative des documents; puisque ceux ci (les documents) sont de plus en plus utilisés pour l'échange des informations entre applications. Les documents constituent de ce fait, une véritable aide à la coordination.

    Les documents électroniques peuvent être répartis en trois groupes : les documents linéaires, les documents semi-structurés et les documents structurés [Bon98]. Nous nous intéressons ici aux documents structurés.

    Les documents structurés

    Ce sont des documents qui présentent une structure régulière définie par un modèle générique appelé modèle de document : ce sont généralement des grammaires (modèles

    La problématique étudiée 2

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    grammaticaux). La structure régulière et l'interopérabilité de tels documents en ont fait de véritables outils d'échange entre applications hétérogènes ou non. Les documents structurés facilitent la coopération et la coordination des actions de plusieurs personnes. Toutes ces caractéristiques couplées à la puissance toujours croissante des réseaux de communication en terme de débit et de sûreté, ont révolutionné la façon d'éditer de tels documents. On est passé du modèle classique, dans lequel un auteur édite son document en local, à un modèle selon lequel plusieurs co-auteurs participent à l'édition asynchrone d'un même document. On peut imaginer plusieurs scénarios pour la réalisation de ce modèle d'édition en ce qui concerne les documents structurés.

    L'édition coopérative des documents structurés

    Le processus d'édition coopérative d'un document structuré est enclenché par l'un des co-auteurs; en effet, il crée sur le serveur central, un document initial conforme à un modèle donné. Ensuite, ledit document est distribué à tous les co-auteurs pour qu'ils y insèrent, sur leurs sites respectifs (en local), leurs contributions (phase de distribution). Une fois que tous les différents co-auteurs ont édité leurs copies respectives (conformément à un modèle local) du document, il faut fusionner toutes leurs contributions, pour obtenir un document global : on parle de synchronisation. Le document global obtenu, pourra éventuellement être redistribué pour la suite de l'édition.

    L'édition coopérative des documents structurés est un problème d'actualité en raison de la forte utilisation de ces derniers dans les systèmes informatiques modernes. Une approche d'édition coopérative asynchrone des documents structurés [BTT08, BTT07, TT09] consiste, pour des raisons de confidentialité, à associer une"vue" à chaque co-auteur. La vue d'un co-auteur donné indique ainsi, les parties du document auxquelles ce dernier a accès. De ce fait, pour chaque co-auteur, le document global est répliqué suivant sa vue (on dit qu'il est projeté), et la copie présente sur chaque site est donc une réplique partielle du document global. Quand arrive un point de synchronisation, on réalise la projection inverse de chaque réplique partielle, pour obtenir des documents conformes au modèle global, puis on fusionne les documents ainsi obtenus en un document global.

    La fusion des documents est une problématique assez ancienne qui a déjà été étudiée dans plusieurs contextes : le contexte des documents structurés XML [Ask94, CSGM, CSR+, LF02, Lin04, Man01], le contexte des bases de données, le contexte des programmes informatiques [Men02]... En ce qui concerne l'édition coopérative des documents structurés, il existe une approche de fusion des répliques partielles basée sur les automates d'arbres [BTT08, BTT07, TT09].

    La problématique étudiée

    Pendant la fusion des documents structurés, on recherche un document global intégrant les mises à jour de tous les co-auteurs. À ce niveau, il peut surgir deux problèmes :

    L'ambiguïté : on peut trouver plusieurs documents satisfaisant ce critère de recherche. Ce problème est en général dû à un défaut de conception du modèle de document et une bonne analyse pourrait permettre d'y remédier.

    Les conflits : les modifications portées par les différents co-auteurs peuvent ne pas être compatibles. Cet état de chose rend impossible l'obtention d'un document global qui intègre les mises à jour de tous les co-auteurs. Pour éviter (anticiper) ce problème, on pourrait contrôler les éditions locales afin d'assurer la cohérence et ainsi, la compatibilité des

    L'organisation du manuscrit 3

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    répliques partielles. On pourrait aussi, à posteriori, réconcilier les différentes répliques partielles : c'est à dire remettre en cause certaines actions d'édition pour rendre les répliques fusionnables.

    Le problème que nous étudions dans ce mémoire est celui de la réconciliation des répliques partielles d'un document structuré; plus précisément nous voulons proposer un algorithme capable de détecter et d'annuler les actions d'édition menant aux conflits puis de fusionner les nouvelles répliques obtenues.

    Le travail réalisé

    Un document en cours d'édition est représenté par un arbre contenant, potentiellement au niveau des feuilles, des noeuds ouverts ou bourgeons. Éditer un document, consiste à développer (remplacer) un ou plusieurs de ses bourgeons par un ou plusieurs sous-arbres conformément au modèle de document.

    Fusionner consensuellement les mises à jour t1 ···tn de n répliques partielles d'un document t, consiste à trouver un document tc, conforme au modèle de document (appelé modèle global dans la suite), intégrant tous les noeuds des ti non en conflit et dans lequel, tous les noeuds en conflit sont remplacés par des bourgeons. L'algorithme de fusion consensuelle présenté dans ce mémoire est une adaptation de celui de fusion proposé dans [BTT08] qui ne gère pas les conflits. Techniquement, la démarche permettant d'obtenir les documents faisant partie du consensus est la suivante:

    1. Pour chaque mise à jour tma j

    i d'une réplique partielle, nous associons un automate d'arbre à états de sortie (i) reconnaissant les arbres (conforme au modèle global) dont tma j

    i est une projection.

    2. L'automate consensuel (sc) engendrant les documents du consensus est obtenu en effectuant un produit synchrone des automates (i) au moyen d'un opérateur commutatif noté ØÙ : (sc) = ØÙ i (i) que nous définissons.

    L'automate consensuel obtenu est celui qui produit les documents du consensus : c'est à dire les préfixes maximaux sans conflits de la fusion des documents issus des différentes expansions des diverses répliques partielles mises à jour.

    Nous avons aussi proposé une implémentation en Haskell de notre algorithme, puis nous avons construit un prototype de réconciliateur graphique en Java pour pouvoir réaliser nos tests.

    L'organisation du manuscrit

    La suite de ce mémoire est structurée en quatre chapitres et deux annexes organisés comme suit:

    Chapitre 1 - Notions d'édition coopérative et de conflits. Nous présentons ici la notion de travail coopératif et les notions qui lui sont connexes (groupware, workflow...). Nous nous focalisons ensuite sur la notion d'édition coopérative des documents (les types de documents édités, la détection des conflits, la résolution des conflits) et sur le rôle et la circulation de ceux-ci dans les procédures d'entreprise.

    Chapitre 2 - L'édition coopérative des documents structurés. Dans ce chapitre, nous présentons une approche d'édition coopérative et les outils formels issus de la littérature (grammaires algébriques, automates d'arbre...) que nous utilisons pour la spécification et

    L'organisation du manuscrit 4

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    la manipulation des documents structurés, puis nous introduisons de façon plus formelle et en accord avec [BTT08, BTT07, TT09] les définitions relatives aux notions de vues, de projection, de projection inverse et de fusion des répliques partielles d'un document structuré.

    Chapitre 3 - Fusion consensuelle des mises à jour des répliques partielles. Nous présentons dans ce chapitre notre solution au problème de la réconciliation des répliques partielles d'un document structuré.

    Chapitre 4 - Un prototype d'éditeur coopératif désynchronisé. Dans ce chapitre, nous présentons TinyCE v2 (a Tiny Cooperative Editor version 2, prononcer"taï-ni-ci-i"), un prototype expérimental d'éditeur coopératif désynchronisé inspiré de TinyCE (prononcer "tennesse") [TT10] et qui nous permet de mettre en oeuvre les algorithmes présentés dans ce travail et d'en faire la démonstration.

    Conclusion générale. Nous réalisons le bilan de notre travail et nous répertorions quelques perspectives d'amélioration de ce dernier.

    Annexe A - Un autre exemple complet de fusion consensuelle. Dans cette annexe, nous illustrons notre algorithme de fusion consensuelle en l'appliquant à un workflow d'édition sans conflit et dont les répliques partielles mises à jour ne sont pas forcément des documents clos.

    Annexe B - Quelques fonctions Haskell pour le calcul des consensus. Nous donnons le code Haskell des algorithmes qui ont été présentés ainsi que quelques commentaires nécessaires pour une bonne compréhension.

    5

    Chapitre1

    État de l'art sur l'édition coopérative et

    sur la notion de conflits

    Sommaire

    1.1 - Le travail coopératif 5

    1.2 - Un exemple de CSCW : L'édition coopérative 11

    1.3 - Synthèse 18

    Le travail que nous menons dans ce mémoire s'inscrit dans le domaine de recherche du CSCW (Computer Supported Cooperative Work) ou TCAO (Travail Coopératif Assisté par Ordinateur) en français. Nous considérons un système à flots de tâches (worflow system) dont les acteurs, géographiquement distants, coordonnent leurs activités par échange de documents électroniques qu'ils éditent de façon désynchronisée. Les systèmes logiciels chargés d'assurer la coopération entre les différents acteurs doivent présenter certaines caractéristiques afin de faire face aux contraintes du CSCW. Dans ce chapitre nous présentons la notion de travail coopératif (sect. 1.1) en faisant le parallèle avec le CSCW (sect. 1.1.2) et les systèmes de CSCW.

    Ensuite nous nous focalisons sur l'édition coopérative (sect. 1.2); nous présentons les différents types de documents électroniques manipulés et/ou échangés par les applications (sect. 1.2.1) et introduisons la notation BPMN (Business Process Modeling Notation) pour la représentation de la circulation de ces documents dans les systèmes à flots de tâches (sect. 1.2.2).

    Ce chapitre s'achève par une revue de la littérature (sect. 1.2.3) sur les techniques de détection et de résolution des conflits issus des éditions asynchrones des répliques (partielles) d'un document électronique.

    1.1. Le travail coopératif

    Le terme «collaboration» est de nos jours très utilisé dans le jargon industriel et exprime la participation de plusieurs acteurs à une entreprise commune [MGa08]. Pour les entreprises, les différentes instances municipales et gouvernementales, les établissements de santé, les grandes institutions d'enseignement et autres, la collaboration est devenue une

    1.1. Le travail coopératif 6

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    valeur, un objectif à atteindre, une compétence [Gir14]. Très souvent ce mot est confondu ou est utilisé pour désigner la coopération. Toutefois, il existe une nette différence entre les deux termes. Dans cette section, nous établissons la différence entre les termes collaboration et coopération puis nous introduisons la notion de Travail Coopératif Assisté par Ordinateur (TCAO) en présentant quelques concepts qui lui sont associés.

    1.1.1. Coopération et collaboration, quelles différences?

    La coopération et la collaboration impliquent plusieurs acteurs et un but commun. Cependant ces deux concepts diffèrent au niveau du comportement des personnes et du mode d'organisation du travail.

    1.1.1.1. Le comportement des personnes

    La collaboration est définie dans [Gir14] comme étant un processus par lequel deux ou plusieurs personnes ou organisations s'associent pour réaliser un travail suivant des objectifs communs. Theodore (Ted) Panitz [Pan99] ajoute que la collaboration est une philosophie d'interaction et de style personnel de vie dans laquelle chaque acteur est responsable de ses actions mais aussi de celles de ses pairs. La collaboration repose donc sur les relations entre les acteurs, leur aptitude à travailler ensemble pour atteindre un résultat commun. Tous les collaborateurs ont un seul objectif, ce qui induit une co-responsabilité (imputabilité).

    La coopération par contre ne repose pas sur les relations entre les acteurs, elle est une forme d'interaction réunissant plusieurs personnes réalisant différentes tâches complémentaires (objectifs individuels) dans le but d'obtenir un résultat global [Pan99]. Dans ce mode de travail, les interactions entre les acteurs sont minimes et les objectifs sont individuels pour chaque acteur (individu ou équipe de collaborateurs).

    1.1.1.2. L'organisation du travail

    Sur le plan du travail, l'une des différences majeures est la répartition des rôles aux acteurs. En effet, le travail coopératif est très structuré et il résulte de la subdivision d'une tâche en plusieurs actions; lesquelles sont réparties entre les individus au départ et, ceux ci agissent de manière autonome. Les interactions se limitent à l'organisation, la coordination et le suivi de l'avancement (souvent sous la responsabilité d'un individu chargé de s'assurer de la performance individuelle de chacun). La responsabilité de chacun est limitée à garantir la réalisation des actions qui lui incombent : l'objectif global est atteint grâce à une concaténation coordonnée des résultats individuels [Heu03, SB92].

    Le travail collaboratif est moins structuré. Les acteurs forment un groupe dans lequel les interactions sont permanentes et chacun peut concourir à l'action de tout autre membre du groupe afin d'optimiser les performances globales. Il n'existe presque pas de répartition des rôles entre les acteurs. Le mode collaboratif fait donc appel à l'intelligence collective et met en avant le caractère humain. C'est pourquoi il est le plus difficile à mettre en oeuvre.

    Exemple 1 Le cultivateur et son champ

    Un cultivateur dont la famille est nombreuse, veut défricher l'un de ses champs. Il hésite entre deux approches d'accomplissement de cette tâche:

    1. Il pourrait réunir toute sa famille et se rendre au champ. Ils travailleraient ainsi tout en s'amusant; les plus expérimentés guidant ceux qui le sont moins. Avec un peu de solidarité et de détermination, ils accompliraient cette tâche dans les délais et, plus important encore, ils économiseraient de l'argent. De plus, ils partageraient des moments inoubliables et tous se satisferaient du fait que tout le champ soit parfaitement défriché;

    1.1. Le travail coopératif 7

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    2. Il pourrait aussi faire venir quelques professionnels. Chacun défricherait une parcelle sous sa supervision et dans le cas où un professionnel terminerait son travail, il lui donnerait son salaire et ce dernier se satisferait de son rendement individuel puis quitterait la plantation. Le champ serait ainsi parfaitement défriché lorsque tous les professionnels auraient fini de nettoyer leurs parcelles respectives. Cela pourrait lui coûter plus cher mais les délais et la qualité seraient au rendez-vous.

    Les deux approches ont le mérite de mener le cultivateur à son but. Cependant, la première approche est collaborative et sa réussite repose sur les liens entre les différents membres de la famille. La seconde approche quant à elle est coopérative et sa réussite est presque toujours garantie.

    1.1.2. Notion de Travail Coopératif Assisté par Ordinateur (CSCW)

    La collaboration et la coopération étant devenus des objectifs importants pour les industriels [Gir14], l'essor des Technologies de l'Information et de la Communication (TIC) a favorisé le développement d'une nouvelle méthode de travail : il s'agit du Travail Coopératif Assisté par Ordinateur (en anglais : Computer Supported Cooperative Work, ou CSCW1 2 3). C'est une méthode de travail qui met en relation des utilisateurs repartis dans le temps, l'espace et à travers les organisations; ces personnes devant alors collaborer pour répondre à un besoin donné [Imi06]. Les applications du CSCW sont nombreuses et variées.

    Exemple 2 Quelques applications du CSCW [Imi06]

    -- La conception et le développement d'un logiciel par une équipe dont les membres sont disséminés géographiquement;

    -- L'écriture simultanée d'un article scientifique ou de la documentation d'un produit par plusieurs chercheurs (édition coopérative);

    -- La participation à un séminaire, au même instant, de plusieurs personnes situées à différents endroits du globe terrestre;

    -- L'accomplissement d'une tâche nécessitant l'expertise de plusieurs personnes.

    Les recherches dans le domaine du CSCW ont donné naissance à de nombreux logiciels appelés systèmes de CSCW ou groupware 4. Les systèmes de CSCW communiquent à travers les réseaux pour atteindre leurs objectifs (fournir des fonctionnalités afin de faciliter les échanges, la coordination, la collaboration et la co-décision entre les acteurs du CSCW) et ainsi braver les contraintes d'espace et de temps auxquelles le CSCW est soumis.

    1.1.2.1. Les caractéristiques des systèmes de CSCW

    La mise en place d'un système de CSCW nécessite la prise en compte des contraintes auxquelles le CSCW est soumis. En considérant par exemple les contraintes espace et temps, on peut se poser les questions suivantes [TTTA12] :

    -- où sont situés les différents acteurs (sur le même site ou sur des sites différents)? -- comment s'effectue la communication entre acteurs (synchrone, asynchrone)?

    1. CSCW : c'est aussi le nom qu'on donne au domaine de recherche qui se focalise sur le rôle des ordinateurs dans les travaux coopératifs [SB92].

    2. Le CSCW est très souvent assimilé à tord au groupware. Les différences entre ces concepts émanent principalement des différentes connotations des expressions «groupe» et «travail coopératif» [SB92] et aussi le fait que le groupware est fortement lié au logiciel (software).

    3. Nous utiliserons le sigle CSCW tout au long de ce mémoire pour désigner le travail coopératif assisté par ordinateur.

    4. Nous utiliserons l'appellation systèmes de CSCW dans la suite.

    1.1. Le travail coopératif 8

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    On en déduit qu'un système de CSCW peut être distribué (les objets partagés sont répliqués sur les différents sites) ou non, synchrone ou asynchrone...

    Système distribué

    Dans un contexte distribué, chaque site possède des copies locales (répliques) des objets partagés et c'est donc sur ces copies que sont portées les contributions locales. Pour obtenir un état global, le système synchronise toutes les répliques. Par conséquent, il est crucial de mettre en place une procédure de contrôle de la concurrence et ce pour assurer la convergence des copies vers un même état [Imi06].

    Système non distribué

    Dans un contexte non distribué, tous les acteurs travaillent sur une unique copie de chaque objet partagé. Les modifications sont donc réalisées au fur et à mesure, les synchronisations se font à chaque sauvegarde et le système n'a pas besoin de réaliser une opération finale de synchronisation globale. Cet état de chose n'exclut cependant pas la présence d'une procédure de contrôle de la concurrence étant donné que plusieurs acteurs peuvent apporter leurs contributions au même moment (accès concurrent à l'unique copie).

    Système synchrone

    Le CSCW est synchrone lorsque les mises à jour apportées par un acteur sur les données partagées sont immédiatement (en un intervalle de temps raisonnable) visibles par l'ensemble des acteurs pouvant avoir accès à ces données. Ces systèmes sont dits temps réel. Les éditeurs collaboratifs temps réel (ou éditeurs WYSIWIS 5) tels que Etherpad6 et Google Docs7 en sont de parfaites illustrations.

    Système asynchrone

    Le mode de travail asynchrone permet aux acteurs de travailler en même temps ou à des moments différents. Aussi, les synchronisations sont faites en temps voulu par les acteurs. Les mises à jour sont ainsi observées de manière différée. Ce mode de fonctionnement peut être observé dans certains systèmes de gestion de versions et dans certains outils de synchronisation des fichiers [Imi06].

    1.1.2.2. Classification des systèmes de CSCW

    L'analyse des dimensions espace et temps ont permis à plusieurs chercheurs de proposer des méthodes de classement des systèmes de CSCW. La majorité de ces méthodes de catégorisation sont des adaptations de la classification de Johansen [Joh88] et sont par conséquent basées sur des matrices espace/temps. On distingue entre autres les classifications de Johansen [Joh88], de Grudin [Gru94], d'Andriessen [JHE03], de Penichet et al. [PMG+07]...

    La classification de Johansen

    5. What You See Is What I See pouvant être traduit en ce que vous voyez est ce que je vois.

    6. Etherpad est un éditeur collaboratif temps réel disponible à l'adresse http://www.etherpad.org/.

    7. L'une des fonctionnalités de Google Docs est la possibilité de réaliser de l'édition temps réel et à plusieurs, https://docs.google.com/.

    1.1. Le travail coopératif 9

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Johansen attribue les valeurs synchrone et asynchrone (resp. distribué et non distribué) à la dimension temps (resp. espace). Il obtient ainsi une matrice 2 × 2 grâce à laquelle il peut dire si un système de CSCW est synchrone et distribué, synchrone et non distribué, asynchrone et distribué ou asynchrone et non distribué (figure 1.1).

    FIGURE 1.1 - Matrice 2 × 2 de Johansen [Joh88] pour la catégorisation des systèmes de CSCW.

    La classification de Grudin

    Grudin [Gru94] s'appuyant sur les travaux de Johansen a ajouté un caractère aux valeurs des dimensions espace et temps pour construire un framework de catégorisation basé sur une matrice 3 × 3 : ce caractère est la prévisibilité des actions supportées [Sar05]. En effet, selon lui, dans un contexte asynchrone (resp. distribué) les actions des acteurs peuvent être prévisibles ou non. La matrice de Grudin (figure 1.2) permet de ce fait de classer les systèmes de CSCW s'appliquant au même endroit et au même instant, ceux s'appliquant à des endroits différents prévisibles (connus) ou non, et ceux s'appliquant à des instants différents prévisibles ou non.

    Les autres classifications

    La classification d'Andriessen étend encore plus la matrice de Johansen. Celle de Penichet et al. ajoute les caractéristiques (partage de données, communication et coordination) du CSCW aux dimensions espace et temps pour proposer une classification encore plus précise et détaillée [PMG+07].

    Grâce à ces méthodes de classification, il est possible de connaître quelques types de travaux qu'on peut effectuer une fois qu'on a opéré un choix sur les contraintes spatiales et sur les contraintes temporelles.

    1.1.2.3. Les systèmes de CSCW comme systèmes à flots de tâches (Workflows Systems)

    Le workflow peut être défini comme une collection de tâches organisées et réalisées soit par les systèmes logiciels, soit par les humains ou par les deux dans le but d'accomplir

    1.1. Le travail coopératif 10

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    FIGURE 1.2 - Matrice 3 × 3 de Grudin pour la catégorisation des systèmes de CSCW [Sar05].

    un processus métier (ou processus opérationnel ou procédure d'entreprise ou encore business process en anglais) [GHS95]. L'objectif du Workflow est donc celui de rationaliser, coordonner et contrôler des procédures d'entreprise dans un environnement organisé, distribué et informatisé. La WfMC8 (The Workflow Management Coalition [WfM] définit une procédure d'entreprise comme une procédure qui systématise l'organisation et la politique d'une entreprise dans le but d'atteindre certains des objectifs de cette entreprise.

    Exemple 3 Quelques procédures d'entreprise

    -- Le processus d'inscription d'un étudiant dans une faculté;

    -- La conception d'un logiciel informatique;

    -- Le suivi d'un dossier médical;

    -- La procédure de prise de congés dans une institution gouvernementale;

    -- La procédure d'ouverture d'un compte dans une agence bancaire;

    -- L'organisation des secours en cas de catastrophe;

    -- La procédure de réclamation de dommage à une compagnie d'assurance.

    Une procédure d'entreprise est donc une séquence ordonnée de tâches (réalisées par les Hommes ou par les programmes [GHS95, CG08], parfois même par les deux) répondant à un schéma précis et qui mène à un résultat déterminé. De ce fait, on peut considérer une procédure d'entreprise comme un CSCW. Les Systèmes de Gestion des Workflows (SGWf ou WfMS - Workflow Management Systems - en anglais), tout comme les systèmes de CSCW, doivent fournir des fonctionnalités afin de faciliter les échanges, la coordination, la collaboration et la co-décision entre les acteurs humains ou non. Les systèmes de CSCW sont donc des systèmes à flots de tâches. Toutefois, ceux ci ne sont pas forcément des WfMS car les WfMS fournissent aussi des outils pour la définition des processus, l'exé-cution de ces définitions (par les moteurs de workflow) et l'administration d'instances de processus [DG02].

    8. La WfMC est une organisation internationale dont le but est de développer des standards dans le domaine de Workflow en collaboration avec les acteurs principaux du dit domaine.

    1.2. Un exemple de CSCW : L'édition coopérative 11

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    1.2. Un exemple de CSCW : L'édition coopérative

    L'édition coopérative des documents est un exemple très courant de CSCW. En effet, les documents électroniques sont des outils incontournables pour la publication et l'échange d'informations entre applications le plus souvent hétérogènes et distantes. La forte évolution des réseaux de communication en terme de débit et de sûreté a aussi révolutionné la façon d'éditer de tels documents. On est passé du modèle classique d'un auteur éditant en local son document, à un modèle dans lequel plusieurs auteurs situés sur des sites géographiquement éloignés se coordonnent pour éditer de façon asynchrone un même document. Les documents échangés peuvent être considérés autant comme des supports de communication et une aide à la coordination que comme le produit de cette coopération. Cependant, dans un contexte de travail coopératif, il est raisonnable de les considérer comme des supports de communication et une aide à la coordination car ils véhiculent des informations indispensables à la coopération [TT09]. On peut donc imaginer une équipe constituée par des acteurs, ayant chacun un domaine d'expertise propre, qui coopèrent pour accomplir une tâche précise. Chaque acteur peut opérer sur le document par le biais d'une interface lui offrant des outils spécifiques liés à son domaine d'expertise et à son rôle dans cette coopération. Ces outils conçus au préalable imposeront des contraintes d'édition aux acteurs en s'appuyant sur des modèles (grammaires) préconçus. Avec de telles contraintes d'édition, la cohérence entre les versions manipulées localement par chaque acteur sera assurée. C'est dans ce sens que les documents serviront de support à la coordination des différents acteurs.

    Exemple 4 Un exemple d'édition coopérative (partie 1/3)

    Nous considérons ici le processus d'inscription d'un nouvel étudiant à la faculté des sciences de l'Université de Dschang (FS UDs) 9. C'est une procédure d'entreprise dans laquelle, plusieurs acteurs et services (l'étudiant, le CMS - Centre Médico-Social -, la scolarité, les départements, la cellule informatique et la DAF - Division Administrative et Financière -) se succèdent pour éditer un même document: la fiche d'inscription ou fiche personnelle de l'étudiant. Les différents acteurs ici ont des domaines d'expertise différents (la santé, les finances, les systèmes d'information...) et opèrent à partir des sites (leurs bureaux) géographiquement éloignés. La fiche d'inscription de l'étudiant est dans ce cas un support de coordination (le service de la scolarité ne peut recevoir et enregistrer le dossier d'un étudiant que si ce dernier a déjà été reçu par le CMS), de communication et d'aide à la décision (acceptation ou rejet de l'étudiant).

    Après cette brève présentation du concept d'édition coopérative, nous présentons les types de documents manipulés et/ou échangés par les applications puis nous introduisons la notation BPMN (Business Process Modeling Notation) pour la représentation de la circulation des documents électroniques dans les systèmes de workflow.

    1.2.1. Les types de documents manipulés et/ou échangés par les applications

    Dans le processus d'édition et de publication des documents, on peut se baser sur la structure (la nature et l'organisation de l'information) de ces derniers pour les différencier. Selon les cas, on distingue les documents linéaires, les documents semi-structurés et

    9. La description que nous faisons de cette procédure est en partie le fruit de l'ajustement, pour des besoins d'illustration, d'une enquête menée le 25 Mars 2015 auprès du service de la scolarité de la FS UDs et de son chef de service Dr. Onabid. Aussi, certaines analyses complémentaires proviennent de notre connaissance de ce processus (nous avons à notre actif six inscriptions/ré-inscriptions) et des témoignages de certains étudiants.

    1.2. Un exemple de CSCW : L'édition coopérative 12

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    les documents structurés [Bon98, KAA93]. Tout au long de ce mémoire, nous utiliserons l'expression"documents non structurés" pour désigner les documents linéaires et les documents semi-structurés.

    1.2.1.1. Les documents non structurés

    Les documents linéaires sont ceux qui contiennent un flux de données représentant à la fois le contenu du document et sa présentation. Les fichiers DOC 10 (ou doc) par exemple sont des documents linéaires contenant du texte, de la mise en forme, des informations sur les états du fichier, des scripts...[DOC15]

    Les documents semi-structurés ou auto-descriptifs sont libres de tout modèle de description de données mais leurs structures présentent une certaine régularité [TT09]. Les données contenues dans un document semi-structuré sont dites semi-structurées car elles ne sont pas conformes à un schéma prédéfini [Abi97]. De ce point de vue, en accord avec [YS00], les documents semi-structurés sont ceux qui contiennent des données semi-structurées. Comme exemples nous pouvons citer: les fichiers BibTex, les documents HTML ou encore les documents XML non contraints par une DTD (Document Type Definition) ou un XML Schema.

    1.2.1.2. Les documents structurés

    Les documents structurés sont ceux qui présentent une structure régulière définie par un modèle générique appelé modèle grammatical ou modèle de document (DTD, XML Schema...). Ces modèles grammaticaux permettent la description de classes de documents, de leurs composants, des relations hiérarchiques et de voisinage que ces derniers entretiennent les uns avec les autres. Ils permettent en plus, de décrire des informations d'ordre sémantique associées aux composants [KAA93]. Les documents structurés constituent une proportion importante des documents manipulés et/ou échangés par des applications. C'est le cas d'un bon nombre de documents XML qui sont très utilisés comme fichiers de configuration et/ou fichiers d'échanges par des applications telles que yEd Graph Editor11 ou encore Notepad++ 12.

    Contrairement aux documents linéaires dont le contenu est généralement en binaire et uniquement exploitable par le logiciel qui le produit en théorie 13, les documents structurés contiennent du texte compréhensible, manipulable par tout le monde et respectant les normes et les standards industriels fixés par des organismes de standardisation (ISO [ISO], W3C [W3C], IEEE [IEE]...). C'est ce qui favorise leur interopérabilité, justifie leur large diffusion et leurs utilisations variées. Une fois de plus, les documents XML 14 (stan-dard du W3C [BPSM+06]) illustrent parfaitement nos propos car ils peuvent servir de fichiers de configuration, de format d'échange (COLLADA15 [COL] par exemple)... Néanmoins, le stockage des documents sous forme textuelle est un facteur dépréciant pour la

    10. DOC est une extension de nom de fichier, utilisée pour la documentation en format texte propriétaire, sur une large variété de systèmes d'exploitations [DOC15].

    11. yEd est un logiciel libre d'édition des graphes et de différents diagrammes (Flowchart, UML, BPMN...). Il est disponible sur le site http://www.yWorks.com/.

    12. L'éditeur de texte Notepad++ est disponible à l'adresse http://notepad-plus-plus.org/.

    13. Les formats des documents linéaires sont en majorité propriétaire et ne respectent pas forcément les normes et standards fixés par les organismes spécialisés (ISO - International Organization for Standardization - [ISO], W3C - World Wide Web Consortium - [W3C], IEEE - Institute of Electrical and Electronics Engineers - [IEE]...) ce qui limite leur interopérabilité.

    14. XML est un métalangage qui permet de structurer une très grande variété de contenus car son vocabulaire et sa grammaire peuvent être redéfinis.

    15. COLLADA signifie Collaborative Design Activity et a pour but d'établir un format de fichier d'échange basé sur XML pour les applications 3D interactives.

    1.2. Un exemple de CSCW : L'édition coopérative 13

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    publication de ceux ci; En effet, de tels documents peuvent être modifiés directement par un utilisateur utilisant des applications non spécialisées (un éditeur de texte par exemple), ce qui remet en cause leur intégrité [Bon98]. Le travail réalisé dans ce mémoire ne s'inté-resse qu'à l'édition coopérative des documents structurés.

    Exemple 5 Un exemple d'édition coopérative (partie 2/3)

    Une partie de la fiche personnelle de l'étudiant sollicitant une inscription en FS UDs peut être considérée comme un document structuré contenant entre autres les informations suivantes: informations d'identification personnelle (noms, sexe, nationalité, langue, adresse, numéro de CNI...), informations sur sa santé, informations d'identification des parents ou tuteurs, formation sollicitée (3 choix sont requis), profil scolaire (diplômes obtenus, années d'obtention, mention...). La figure 1.3 présente une fiche personnelle d'un étudiant (document XML réduit à quelques informations) conforme à une DTD présentée sur la même illustration.

    FIGURE 1.3 - Un exemple de document structuré XML contraint par une DTD.

    1.2. Un exemple de CSCW : L'édition coopérative 14

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    1.2.2. Les documents dans un système de workflow: La notation BPMN

    Les documents électroniques étant considérés comme des supports de communication et d'aide à la coordination, ils sont donc au centre de toute procédure d'entreprise. Les documents circulent à travers le système, de site en site, et sont édités au fur et à mesure par les différents acteurs lorsque ceux ci réalisent leurs activités. De tels systèmes sont appelés systèmes à flots de tâches. Il existe plusieurs méthodes de représentation des systèmes à flots de tâches : les statecharts [TT09], des diagrammes d'activité UML [LMLR08], les Réseaux de Pétri et/ou les Réseaux de Pétri à Objets [CBBG07], la notation BPMN [BPM]... La notation BPMN semble être la plus appropriée pour la définition des workflows et des procédures d'entreprise. C'est une notation graphique qui est dédiée à la modélisation de telles procédures; elle a comme objectif principal, la facilitation de la communication entre les différents acteurs engagés dans le développement et la maintenance des systèmes applicatifs orientés sur les processus de l'entreprise.

    La notation BPMN est un standard qui a été développé par la Business Process Management Initiative (BPMI) et qui est maintenu depuis 2005 par l'Object Management Group (OMG) 16 [BPM]. Le langage BPMN est très élaboré et directement exploitable par des moteurs d'exécution des processus [WfM]. Cependant, une toute petite fraction des fonctionnalités proposées par le standard BPMN est exploitée par les professionnels de la modélisation des procédures d'entreprise. Cet état des choses illustre la déconnexion qui existe entre les efforts de standardisation du Business Process Management (BPM) et les besoins réels des professionnels de ce domaine [MPvdA12].

    La représentation d'une procédure avec la notation BPMN est basée sur trois éléments fondamentaux [LMLR08] :

    -- La tâche : C'est la plus petite unité de décomposition hiérarchique d'une activité; une tâche représente une action qui va être réalisée par une personne ou une application. Il existe plusieurs types de tâches (tâche de service, tâche d'envoi, tâche utilisateur...) représentables avec la notation BPMN. Une tâche est représentée par un rectangle aux coins arrondis.

    -- Le branchement : Il représente la condition de routage entre les flux en entrée et les flux en sortie. Pour mieux définir le contrôle des flux, la notation BPMN fournit plusieurs types de passerelles (exclusive, inclusive, parallèle...) représentées par des losanges.

    -- L'évènement : Il représente un état particulier dans le processus (début, intermédiaire, fin). Les évènements sont représentés par des cercles.

    La notation BPMN fournit en plus, des éléments pour la représentation des données, des annotations, des sous-processus, des participants... Il est aussi possible d'utiliser différents types de diagrammes (orchestration, collaboration, chorégraphie, conversation) pour représenter les différentes perspectives d'un processus. Nous invitons le lecteur qui désire en savoir plus, à consulter les spécifications officielles [BPM] ou à suivre cette brève formation [INT] en modélisation des processus avec la notation BPMN.

    Exemple 6 Un exemple d'édition coopérative (partie 3/3)

    La figure 1.4 (page 16) est un diagramme d'orchestration BPMN [INT] illustrant le processus de sélection d'un étudiant désireux de s'inscrire dans l'une des filières de la FS UDs. En fait, la sélection est réalisée par l'administration (la scolarité et les trois départements représentants

    16. Une branche de la BPMI et une autre de l'OMG ont fusionné en 2005 pour former Business Modeling & Integration (BMI) Domain Task Force (DTF).

    1.2. Un exemple de CSCW : L'édition coopérative 15

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    les choix de l'étudiant). Suite à la réception d'un dossier de candidature (évènement déclencheur), le responsable de la scolarité (l'agent commis à cet effet) l'enregistre puis envoie des copies de la fiche d'inscription du candidat aux départements choisis par l'étudiant. Chaque département étudie le dossier puis décide de l'admissibilité du candidat (traitement en parallèle), porte la mention correspondante sur la fiche d'inscription de ce dernier, enregistre l'étudiant localement si ce n'est pas déjà fait puis renvoie la fiche à la scolarité. Lorsque la scolarité a reçu toutes les décisions des différents départements, elle opère le choix final et met à jour le dossier du candidat. Nous nous limitons à cette description très incomplète pour des besoins d'illustration.

    Le diagramme de la figure 1.4 - page 16 - (réalisé avec le logiciel Bizagi Modeler 17) illustre quelques possibilités offertes par la notation BPMN. On y retrouve les traitements séquentiels (représenté par la flèche), les traitements parallèles encore appelés décomposition de type 'et', les traitements alternatifs ou décomposition de type 'ou'. On peut aussi remarquer la représentation des participants (la scolarité et les départements) dans l'unité organisationnelle qu'est l'administration de la FS UDs. L'utilisation des annotations et autres artifacts font des diagrammes BPMN des outils intuitifs et réellement exploitables par tous les acteurs intervenant dans l'automatisation des procédures d'entreprise.

    1.2.3. Conflits dans les systèmes d'édition coopérative, méthodes de détection et approches de résolution

    Lorsque l'édition coopérative est appliquée dans un environnement distribué asynchrone, on peut envisager que chaque site possède des copies d'un même document. Ces copies (qu'on appelle répliques ou réplicats en accord avec [SS05]) peuvent être modifiées par les différents co-auteurs. Il arrive un moment où on voudrait obtenir un autre document de base intégrant les mises à jour portées sur les différentes répliques : il faut alors fusionner ces dernières. La fusion ou synchronisation des répliques d'un document peut être définie de manière informelle [TT09] comme une opération qui consiste à fusionner les mises à jour effectuées de façon désynchronisée sur ces répliques par rapport au document de base afin d'obtenir une nouvelle copie du document de base qui intègre éventuellement toutes les modifications des différentes répliques dans le cas où elles sont non conflictuelles, ou éventuellement des indications sur les sources de conflits.

    L'opération de fusion se déroule généralement en deux phases [TT09] : la phase de détection des mises à jour pendant laquelle on identifie dans les différentes répliques, les endroits qui ont été mis à jour depuis la dernière synchronisation, et la phase de réconciliation dans laquelle on combine les différentes mises à jour pour produire un nouveau document (sans conflits). Il existe plusieurs techniques de fusion dans la littérature. Nous pouvons citer les fusions two-way, three-way, textuelle, sémantique, syntaxique et structurelle. Ces techniques sont bien présentées et comparées dans [Men02]. Elles diffèrent principalement par leurs capacités à détecter et à résoudre les conflits.

    L'un des problèmes majeurs posés par l'opération de fusion est la gestion des conflits. Dans le cas de l'édition coopérative des documents, les conflits représentent les différentes parties pour lesquelles les répliques divergent. Les sources des conflits sont en général les mises à jour apportées à différentes répliques par différents co-auteurs. Toutefois, dans un contexte où l'édition n'est pas positive, 18 une seule mise à jour peut entraîner des conflits. On distingue principalement les conflits d'ordre syntaxique, sémantique ou structurel. Les

    17. Bizagi Modeler est disponible à l'adresse http://www.bizagi.com/.

    18. Dans une édition positive basée sur une réplication optimiste, les documents édités ne font que croître: il n'y a pas d'effacement possible dès qu'une synchronisation a été effectuée [SS05].

    1.2. Un exemple de CSCW : L'édition coopérative 16

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Administration de la Faculté des sciences de l'université de Dschang

    Département 3

    Département 2

    Département 1

    Scolarité

     
     
     

    I Ir Enregistrer le

    1J~1 dossier

    Reception L
    d'un dossier

    de

    candidature

     
     

    Traitement en parallèle par les départements.


    ·

     
     
     

    Z.

    Ô m

    n

     
     
     
     
     

    A

    a n

    [

    m O

     
     

    A

    Y 2_ n

    n

     
     

    3 a

    a n

    m

     
     
     
     

    3

    3

    4

    rir une Vérifier

    de la existence de la dé.

    he fiche

    'on

     
     
     
     
     

    Vérifier

    l'existence de la fiche

     
     

    Vérifier

    l'existence de la fiche

     
     

    Si une copie de la fiche existe au département alors ily a un doublon. On termine surune

    erreur.

    - 7/

     

    0O 0 a

     

    2 Q

    o

    o a

     

    â 7.

     

    â

     

    n.

    û9

     
     

    6

    r

    .

    6 Ç

    4.

     

    6

    \

     

    -

     

    O

    l l

     

    O

     

    \

     

    Ô

     

    d

    L,
    C

    m m

     

    ro

    d

    2. -
    - C

    m m

    i

     
     

    !.

    -
    m

    ~/

    O

    C i

     

    Illll

     
     
     
     
     
     
     
     
     

    Ille

    . 2û O F

    a n 3o o ro

     
     

    Fin de la séquence parallèle et synchronisation

     

    Y

    r

    Mettre a' ur le

    dossier du

    candidat 1

    f Fin

    FIGURE 1.4 - Un exemple de diagramme d'orchestration BPMN, illustrant le processus de sélection d'un étudiant dans une des filières de la FS UDs.

    1.2. Un exemple de CSCW : L'édition coopérative 17

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    méthodes de détection des conflits sont nombreuses dans la littérature. Nous présentons certaines dans cette section ainsi que quelques approches de résolution des conflits. Le lecteur intéressé est invité à consulter [Men02] pour en savoir plus.

    1.2.3.1. Les techniques de détection des conflits Les matrices de fusion [SLMD96, Fea89, MD94]

    Une piste intéressante pour la détection des conflits lors de la fusion est l'analyse et la comparaison des mises à jour qui ont été portées sur les différentes répliques. On peut ainsi répertorier toutes les combinaisons des opérations de mises à jour qui sont susceptibles d'entraîner une inconsistance. Les combinaisons ainsi détectées sont stockées dans une matrice de fusion ou table de conflits. La détection des conflits se fait dans ce cas par simple consultation des entrées de la matrice de fusion [SLMD96]. Une approche un peu plus générale [Fea89] basée sur les matrices de fusion consiste à ne plus stocker dans ces dernières les opérations mais plutôt les changements qu'elles induisent. De cette façon, il est plus facile d'introduire de nouvelles opérations sous la condition que celles ci n'occasionnent que des changements déjà répertoriés dans la matrice de fusion. On peut aussi stocker dans la matrice de fusion, à coté des potentiels conflits, les actions à réaliser pour résoudre les conflits [MD94]. Le problème principal posé par les matrices de fusion est l'espace mémoire qu'elles occupent lorsqu'il faut fusionner plus de deux répliques.

    Les ensembles de conflit [WK97]

    Les ensembles de conflit [WK97] peuvent être utilisés à la place des matrices de fusion. Ils contiendront ainsi les combinaisons d'opérations pouvant entraîner des conflits. Ici, les opérations sont fortement liées à la sémantique des éléments à fusionner. On construit un ensemble de conflit pour chaque type de conflit susceptible d'apparaître lors de la fusion. Il faut donc connaître ces types de conflit à l'avance et, l'ensemble constitué de ces types est statique vu qu'il ne varie pas tant que la sémantique des éléments à fusionner est la même. Une même opération peut intervenir dans plusieurs ensembles de conflit et deux opérations appartenant au même ensemble de conflit sont susceptibles de créer des conflits si on essaie de les fusionner.

    1.2.3.2. La résolution des conflits

    Après la détection des conflits, il faut pouvoir les résoudre. Les approches de résolution dépendent énormément du type de conflit qui a été détecté. Ces approches de résolution peuvent être complètement manuelles (appliquées par un Homme), interactives (les correctifs sont appliqués avec l'accord d'un Homme) ou complètement automatisées.

    Certains conflits proviennent juste du fait que l'opérateur de fusion soit non commutatif; l'ordre dans lequel l'opération de fusion est appliquée aux répliques devient alors crucial. La méthode de résolution est dans ce cas plutôt simple car il suffit de trouver le bon ordre pour l'application de l'opérateur de fusion [Men02].

    Une autre stratégie de résolution des situations de conflit consiste à calculer toutes les solutions valides et de les proposer immédiatement aux co-auteurs pour que ces derniers décident de la solution à appliquer. Bien entendu cette approche dite d'explosion [WK97] peut être difficile à mettre en oeuvre. En plus elle peut entraîner une explosion combinatoire (ensemble de solutions valides très grand). Une autre façon (appelée réconciliation [MD94]) de procéder serait de ne prendre en compte aucune des mises à jour menant à un

    1.3. Synthèse 18

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    conflit et, peut être de remplacer le noeud correspondant au conflit par un noeud neutre dans le document global obtenu : c'est cette approche que nous adoptons. De ce fait, les co-auteurs pourront rééditer ou choisir une édition valide déjà réalisée pour remplacer ces noeuds neutres. On pourrait même envisager le calcul de l'ensemble des solutions valides grâce à la stratégie d'explosion, et ainsi créer une stratégie hybride (appelée consolidation [MD94]).

    Les conflits peuvent être prévenus, réduits ou même évités si on fixe les bonnes pré-conditions à l'avance. Si on considère par exemple un cas d'édition dans lequel chaque co-auteur est chargé de rédiger une partie (un noeud) bien précise et distincte du document, alors les conflits seront énormément réduits voire inexistants. Dans un autre cas où plusieurs co-auteurs pourraient éditer un même noeud, on peut définir une hiérarchie entre ces co-auteurs et ainsi définir un ordre de priorité sur les différentes contributions; la pré-condition stipulant qu'en cas de conflit la contribution à retenir est celle qui a la plus haute priorité, permet de résoudre certains conflits.

    1.3. Synthèse

    Dans ce chapitre nous avons présenté la notion de travail coopératif et mis en exergue certaines de ses principales caractéristiques. Nous avons présenté les différentes caractéristiques des systèmes de CSCW. Nous avons aussi établi en accord avec la littérature que la coopération dans le cadre du CSCW peut avantageusement reposer sur l'échange des documents électroniques. De ce fait, un même document électronique peut être édité de manière concurrente par plusieurs co-auteurs qui agissent sur ses répliques. La mise à jour d'un document global s'obtient en fusionnant les mises à jour portées sur les différentes répliques. Cette opération peut être sujette à plusieurs conflits; leur nombre peut être considérablement réduit si des dispositions sont prises localement pour s'assurer, au préalable, de ce que la réplique à envoyer pour la fusion satisfait déjà à un certain nombre de pré-conditions. Dans le chapitre suivant, nous allons présenter une approche d'édition de documents structurés basée sur le concept de "vue".

    19

    Chapitre2

    L'édition coopérative des documents

    structurés

    Sommaire

    2.1 - Documents structurés, conformité et édition 19

    2.2 - Vues, projection et répliques partielles 26

    2.3 - Expansion des répliques partielles 27

    2.4 - Fusion des répliques partielles 31

    2.5 - Synthèse 32

    Les documents structurés contiennent des informations organisées suivant un modèle générique. Les nombreux avantages de ces documents en ont fait d'importants outils d'échange dans le monde informatique. Les applications distribuées s'appuient sur eux pour permettre aux différents acteurs de coopérer et de coordonner leurs actions. Ces documents sont donc édités de manière asynchrone par plusieurs personnes situées sur des sites géographiques potentiellement éloignés. L'édition coopérative des documents structurés nécessite que le procédé d'édition soit défini à l'avance. BADOUEL Eric et TCHOUPÉ TCHENDJI Maurice ont proposé une approche originale d'édition coopérative des documents structurés dans [BTT08, BTT07, TT09]. Étant donné que leur approche est la base des travaux que nous menons, ce chapitre est majoritairement consacré à la présentation de leurs travaux et il est organisé comme suit : nous commençons par donner une représentation formelle des documents structurés (sect. 2.1.1) et nous décrivons l'approche de BADOUEL et TCHOUPÉ (que nous adoptons) pour l'édition coopérative des documents structurés (sect. 2.1.3). Ensuite nous présentons les concepts utilisés pour l'édition coopérative des documents suivant cette approche : les notions de vue et de vue éditable (sect. 2.2.1), les notions de projection et de réplique partielle (sect. 2.2.2), les notions d'expansion (sect. 2.3) et enfin de fusion des mises à jour portées sur les répliques partielles (sect. 2.4).

    2.1. Documents structurés, conformité et édition

    Pour rappel, un document structuré est un document qui présente une structure régulière définie par un modèle générique. Il est usuel de représenter la structure abstraite d'un

    2.1. Documents structurés, conformité et édition 20

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    document structuré par un arbre et son modèle par une grammaire algébrique abstraite ; un document structuré valide est alors un arbre de dérivation pour cette grammaire et on dit que ce document est conforme à cette grammaire. Après avoir défini formellement les grammaires algébriques abstraites, nous représentons dans cette section les documents structurés valides puis nous décrivons une démarche d'édition coopérative de tels documents.

    2.1.1. Représentation d'un document structuré

    Nous nous intéressons uniquement à la structure des documents indépendamment de leurs contenus et des attributs qu'ils peuvent contenir. De ce fait, un document est valide s'il est conforme à une grammaire algébrique abstraite. Une telle grammaire définit la structure de ses instances (les documents qui lui sont conformes) au moyen des productions. Une production, généralement notée p : X0 -+ X1...Xn est assimilable dans ce contexte à une règle de structuration présentant comment le symbole X0 situé en partie gauche de la production se décompose en une séquence d'autres symboles X1 ...Xn situés dans sa partie droite. Plus formellement,

    Définition 7 Une grammaire algébrique abstraite est la donnée G = (S,P,A) d'un ensemble fini S de symboles grammaticaux ou sortes qui correspondent aux différentes catégories syntaxiques en jeu, d'un symbole grammatical A E S particulier, appelé axiome, et d'un ensemble fini P c_ S x S* de productions. Une production P = (XP(0),XP(1) ···XP(n)) est notée P : XP(0) -+ XP(1) ···XP(n) et |P| désigne la longueur de la partie droite de P.

    L'annexe B contient la définition d'un type Haskell [Has, HPHF99, GHC] pour les grammaires ainsi qu'un ensemble d'autres fonctions implémentant les opérations définies dans ce mémoire.

    Exemple 8 Une grammaire algébrique abstraite

    Gexpl = (S,P,A) avec S = {A,B,C} et ayant les productions suivantes :

    P1 : A -+ C B P3 : B -+ C A P5 : C -+ A C

    P2 : A -+ å P4 : B -+ B B P6 : C -+ C C

    P7 : C -+ å

    est un exemple de grammaire algébrique. Signalons qu'elle sera utilisée tout au long de ce manuscrit pour illustrer certains de nos propos.

    Un document structuré se présente sous la forme d'un arbre dont les noeuds sont associés à des catégories syntaxiques (symboles de la grammaire). Cette structure arborescente reflète la structure hiérarchique du document. Pour certains traitements sur les arbres (documents) il est nécessaire de désigner précisément un noeud particulier. Plusieurs techniques d'indexation existent parmi lesquelles celle dite de numérotation dynamique par niveau (Dynamic Level Numbering - DLN - en anglais) [BR04] basée sur des identificateurs à longueurs variables inspirés de la classification décimale de Dewey. Suivant ce système d'indexation, on peut définir un arbre comme suit :

    Définition 9 Un arbre dont les noeuds sont étiquetés dans un alphabet S est une fonction

    t : N* -+ S dont le domaine Dom(t) c_ N* est un ensemble clos par préfixe tel que pour tout

    u E Dom(t) l'ensemble {i E N | u · i E Dom(t)} est un intervalle d'entiers [1,··· ,n] f1N non vide (å E Dom(t)(racine)); l'entier n est l'arité du noeud d'adresse u. t(w) est la valeur (étiquette) du noeud de t d'adresse w. Un arbre tw, de racine le noeud d'adresse w E Dom(t) et de domaine

    2.1. Documents structurés, conformité et édition 21

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Dom(tw) = {u | w.u E Dom(t)} et tw(u) = t(w.u), est un sous-arbre de t si t1,··· ,tn sont des arbres et a E S, on note t = a[t1,...,tn] l'arbre t de domaine Dom(t) = {å} U {i · u | 1 < i < n, u E Dom(ti)} avec t(å) = a et t(i · u) = ti(u).

    L'arbre vide sera noté nil et next t = [t1,··· ,tn] est la liste des sous-arbres de l'arbre t = a[t1,...,tn].

    La figure 2.1 est la représentation graphique de l'arbre t définit sur l'alphabet {A,B,C}, dont une linéarisation peut être donnée par t = A[C[A[C[],B[C[],A[]]],C[]],B[C[C[],C[]],A[]]]. Les noeuds de t sont identifiés suivant la technique de numérotation dynamique par niveau.

    FIGURE 2.1 - Représentation graphique d'un arbre et indexation de ses éléments.

    2.1.2. Conformité d'un document structuré vis-à-vis de sa grammaire

    Soient une grammaire algébrique G et un arbre t (document) ; le document t est conforme à la grammaire G (on note t ? G) si chacune des étapes de décomposition hiérarchique de t obéit à une des productions de G. On dit dans ce cas que t est un arbre de dérivation pour la grammaire G. L'ensemble des arbres de dérivation pour la grammaire G en utilisant le symbole X comme axiome est noté Der(G,X) et est défini formellement comme suit :

    Définition 10 L'ensemble noté Der(G,X) des arbres de dérivation suivant la grammaire G associés au symbole grammatical X est constitué des arbres de la forme X[t1,··· ,tn] pour lesquels il existe une production P = (XP(0),XP(1) ···XP(n)) telle que X = XP(0), |P| = n et ti E Der(G,XP(i)) pour tout 1 < i < n.

    2.1.2.1. Vérification de la conformité d'un document : les AST

    Dans un arbre de dérivation, les noeuds sont étiquetés par des symboles grammaticaux. De la même manière on peut définir les arbres de syntaxe abstraite (Abstract Syntax Tree - AST -) qui sont des arbres dont les noeuds sont étiquetés par des productions de la grammaire.

    Définition 11 L'ensemble noté AST(G,X) des arbres de syntaxe abstraite suivant la grammaire G associés au symbole grammatical X est constitué des arbres de la forme P[t1,··· ,tn]

    2.1. Documents structurés, conformité et édition 22

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    oÙ P = (XP(0),XP(1) ···XP(n)) est une production telle que X = XP(0), |P| = n et ti ? AST(G,XP(i)) pour tout 1 = i = n.

    Les AST peuvent être utilisés comme preuve de la conformité d'un document. En effet, si pour un document t donné on peut trouver un AST u équivalent, alors le document en question est conforme à la grammaire. Ceci est garanti par le fait que les AST ont des noeuds étiquetés par des productions de la grammaire et que leur décomposition hiérarchique obéit à ces productions par définition (définition 11). On dit dans ce cas que u détermine t et on note u ` t ; la relation ` étant définie formellement par P[u1,··· ,un] ` X[t1,··· ,tm] si X = XP(0), n = m et ui `ti pour tout 1 = i = n. Étant donné que chaque production de la grammaire est caractérisée par la donnée conjointe de sa partie gauche et de sa partie droite, il existe une correspondance bijective entre l'ensemble des arbres de dérivation d'une grammaire et l'ensemble de ses arbres de syntaxe abstraite. Le passage d'un AST à un arbre de dérivation se fait juste par remplacement des productions dans l'AST par leurs symboles en partie gauche. La figure 2.2 présente un AST et l'arbre de dérivation équivalent sur la grammaire Gexpl.

    FIGURE 2.2 - Un AST et l'arbre de dérivation qu'il détermine.

    2.1.2.2. Vérification de la conformité d'un document : les automates d'arbre

    La conformité d'un arbre vis-à-vis d'une grammaire peut être vérifiée grâce à un auto-mate1 d'arbre descendant. En effet, quand on regarde les productions d'une grammaire, on peut remarquer que chaque sorte est associée à un ensemble de productions. On peut de ce point de vue, considérer une grammaire comme une application

    gram : symb ? [(prod, [symb])]

    qui associe à chaque sorte une liste de couples formés d'un nom de production et de la liste des sortes en partie droite de cette production. Une telle observation suggère qu'une grammaire peut être interprétée comme un automate d'arbre (descendant) utilisable pour la reconnaissance ou pour la génération de ses instances.

    1. Les automates d'arbres sont des outils formels qui ont plusieurs applications scientifiques. Le lecteur intéressé pourra consulter [CDG+08] dans lequel il trouvera des définitions formelles, des démonstrations et des applications possibles des automates d'arbre.

    2.1. Documents structurés, conformité et édition 23

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Définition 12 Un automate d'arbre (descendant) défini sur L est la donnée A = (L,Q,R,F,q0) d'un ensemble L de symboles; ses éléments sont les étiquettes des transitions de l'automate A, d'un ensemble Q d'états, d'un état particulier q0 ? Q appelé état initial, d'un ensemble F ? Q des états finals et d'un ensemble fini R ? Q × L × Q* de transitions.

    -- Un élément de R est noté q ? (a,[q1,··· ,qn]) : intuitivement, il s'agit de la liste des états [q1,··· ,qn] accessibles à partir d'un état q donné en franchissant une transition

    -- Si q ? (a1,[q1

    étiquetée a ; 1,··· ,q1 n1]),··· ,q ? (ak,[qk 1,··· ,qk nk]) désigne l'ensemble des transitions associées à l'état q, on note next q = [(a1,[q1 1,··· ,q1 n1]),··· ,(ak,[qk 1,··· ,qk nk])] la liste formée des couples (ai,[qi 1,··· ,qi ni]). Dans le cas où q est un état terminal (c-à-d. aucune transition n'est franchissable depuis l'état q), next q = [];

    -- Un état q ? Q appartient à F s'il contient une transition de la forme q ? (a,[]).

    On peut interpréter une grammaire G = (S,P,A) comme un automate d'arbre (descendant) [CDG+08] A = (L,Q,R,F,q0) en considérant que:

    1. q0 = A;

    2. L = P est le type des étiquettes des transitions de l'automate A ; 3. Q = S est le type des états et,

    4. q ? (a,[q1,··· ,qn]) est une transition de l'automate lorsque la paire (a,[q1,··· ,qn]) apparaît dans la liste (gram q)2 ;

    5. F = {N ? S, N ? E ? P}, c'est à dire l'ensemble des symboles possédant une E-production. On notera AG l'automate d'arbre dérivé à partir de G. Reconnaissance d'un arbre à partir de l'automate d'arbre

    Pour reconnaître un arbre à l'aide d'un automate d'arbre, à partir d'un état initial, il suffit :

    1. D'associer l'état initial à la racine de l'arbre;

    2. Si un noeud étiqueté X est associé à l'état q, alors la transition q ? (p,[q1,··· ,qn]), n = 0 avec p une X-production 3, est une transition de l'automate. Si ce noeud possède n successeurs non encore associés à des états, alors n > 0 et on associe les états de q1 jusqu'à qn à chacun de ces n successeurs;

    3. L'arbre est reconnu si on a réussi à associer un état à chacun des noeuds de l'arbre, et que les noeuds feuilles sont tous associés à des états finals.

    On note A ` t q le fait que l'automate d'arbre A accepte l'arbre t à partir de l'état initial q, et 2' (A,q) (langage d'arbre) l'ensemble des arbres acceptés par l'automate A à partir de l'état initial q. Ainsi, (A ` t I>q) ? (t ? 2' (A,q)). Les arbres (documents) acceptés par l'automate AG à partir d'un état q quelconque sont conformes à la grammaire G; le procédé de construction de l'automate AG et l'algorithme de reconnaissance nous le garantissent.

    2. Rappel : gram est l'application obtenue par abstraction de G et a pour type : gram : symb ? [(prod, [symb])].

    3. Une production ayant X en partie gauche.

    2.1. Documents structurés, conformité et édition 24

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Exemple 13 L'automate d'arbre 91Gexpl = (E,Q,R,q0) dérivé de la grammaire Gexpl est défini par E = / 31= {P1,P2,··· ,P7}, Q = S = {A,B,C}, F = {A,C}, q0 = A et ses transitions sont les

    suivantes :

    A -+ (P1,[C,B]) B -+ (P3,[C,A]) C -+ (P5,[A,C])

    A -+ (P2,[]) B -+ (P4,[B,B]) C -+ (P6,[C,C])

    C -+ (P7,[])

    La figure 2.3 illustre la procédure de vérification de la conformité d'un arbre vis-à-vis de la grammaire Gexpl grâce à l'automate 91Gexpl à partir de l'état q0 = A. Au final, le dit arbre est conforme (91Gexpl I- t L> A) car tous ses noeuds ont été associés à des états de l'automate, et ses feuilles associées à des états finals.

    FIGURE 2.3 - Illustration de la procédure de vérification de la conformité d'un arbre à partir d'un automate d'arbre.

    2.1.3. Une approche d'édition coopérative des documents structurés

    Les documents structurés, peuvent être édités de manière coopérative par plusieurs co-auteurs. On peut imaginer plusieurs approches pour réaliser une telle édition. Nous décrivons ici l'approche qui est utilisée dans ce mémoire.

    Initialement, le document t à éditer est dans un état précis (état initial) ; les différents co-auteurs qui sont situés sur des sites géographiques potentiellement éloignés, obtiennent une copie (une réplique) du document qu'ils éditeront localement. Pour des raisons de confidentialité (degré d'accréditation) un co-auteur (i) donné n'aura pas forcément accès à l'ensemble des symboles grammaticaux qui apparaissent dans l'arbre ; seul un sous-ensemble d'entre eux, d'un type donné, peut être jugé pertinent pour lui : c'est sa vue (v). La réplique qu'il devra donc éditer localement (sur son site) sera une partie du document initial : on parlera de réplique partielle et elle est notée tv. La réplique partielle sera obtenue par projection (x) du document initial en fonction de la vue du dit co-auteur (tv = xv(t)). Les co-auteurs éditeront alors de manière asynchrone les répliques partielles ; et les documents locaux obtenus seront appelés répliques partielles mises à jour

    (tmaj

    Vi ).

    2.1. Documents structurés, conformité et édition 25

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Nous nous intéressons uniquement à l'édition positive; les documents édités ne feront que grossir et le co-auteur ne pourra plus supprimer des parties du document une fois qu'une synchronisation aura été effectuée. Pour, à la fois, garantir cette propriété et pouvoir indiquer à un co-auteur l'endroit où il doit contribuer, les documents en cours d'édition seront représentés par des arbres contenant des bourgeons ou noeuds ouverts qui indiquent, dans un arbre, les seuls lieux où des éditions (mises à jour) sont possibles. Les bourgeons sont typés; un bourgeon de sorte X est un noeud feuille étiqueté X : il ne peut être édité (étendu en un sous-arbre) qu'en utilisant une X-production (production ayant

    X en membre gauche). Ainsi donc, un document structuré en cours d'édition et ayant la grammaire G = (S,P,A) pour modèle est un arbre de dérivation pour la grammaire étendue Gç = (S,P uSç,A) obtenue de G en ajoutant à l'ensemble P des productions et pour tout sorte X S, une nouvelle E-production Xç : X --+ E ; Sç = {Xç : X --+ E, X S}. Les autres noeuds du document seront dit clos et le document sera clos si tous ses noeuds sont clos (s'il ne possède aucun bourgeon).

    Lorsqu'un point de synchronisation4 sera atteint, on essayera de fusionner toutes les contributions tma j

    Vi des différents co-auteurs pour obtenir un document global unique tf 5. Pour garantir que la fusion se fasse toujours sans conflits on peut:

    1. Contrôler les éditions locales; pour cela on peut se servir d'une grammaire locale sur chaque site. Ces grammaires locales sont obtenues à partir de la grammaire globale (du document) et suivant les vues correspondantes. Un algorithme permettant d'obtenir de telles grammaires est proposé dans [TTTAD14];

    2. Considérer l'hypothèse selon laquelle une catégorie syntaxique ne peut être éditée que par un co-auteur précis (hypothèse d'édition disjointe) : on évite ainsi les divergences et donc les conflits lors de la synchronisation. Lever cette hypothèse et gérer les conflits est l'objet principal du travail réalisé dans ce document (nous le faisons dans le chapitre 3) mais nous considérons cette hypothèse dans ce chapitre.

    La figure 2.4 illustre grâce à un diagramme d'orchestration BPMN, cette approche d'édition coopérative comme procédure d'entreprise; sur le site 1 on réalise les opérations de (re)distribution et de fusion du document (global) conformément à un modèle G; sur les sites 2 et 3, on édite des répliques partielles conformément aux modèles G1 et G2 dérivés par projection du modèle global de documents G.

    Toutes les opérations de synchronisation et de re-distribution peuvent être réalisées sur l'un des sites dédié à cet effet (comme sur le site 1 de la figure 2.4). Dans ce cas, le système est dit centralisé et le site de synchronisation est appelé le serveur central. On peut cependant envisager un système dans lequel les synchronisations se feront en pair à pair et sur n'importe quel site d'édition; les synchronisations n'impliqueront donc plus forcément les contributions de tous les co-auteurs. Une telle approche s'adapte mieux aux procédures d'entreprise et au fait que le document soit le support de coopération dans ces procédures. Les idées maîtresses pour la mise sur pied d'un éditeur coopératif en pair à pair sont, en ce moment, élaborées et étudiées au Laboratoire d'Informatique Fondamentale et Appliquée (LIFA) par TCHOUPÉ T. Maurice et ses collaborateurs.

    Dans les sections qui vont suivre, nous allons définir formellement en accord avec [BTT08, BTT07, TT09] tous les concepts qui ont été brièvement décrits ici.

    4. Un point de synchronisation peut être défini statiquement ou déclenché par un co-auteur dès que certaines propriétés sont satisfaites.

    5. Il peut arriver que l'édition doive être poursuivie après la fusion (c'est le cas s'il existe encore des bourgeons dans le document fusionné) : on doit redistribuer à chacun des n co-auteurs une réplique (partielle) tVi de tf telle que tVi = ðVi(tf) pour la poursuite du processus d'édition.

    2.2. Vues, projection et répliques partielles 26

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    FIGURE 2.4 - Un diagramme d'orchestration BPMN pour le processus d'édition coopérative désynchronisée.

    2.2. Notion de vue, de projection et de réplique partielle

    La première étape dans le procédé d'édition coopérative présenté à la section 2.1.3 est la définition et l'assignation d'une vue à chaque co-auteur. Ensuite, il faut distribuer des copies du document global à tous les co-auteurs. Ces copies sont obtenues par projection du document global suivant les vues respectives de chaque co-auteur. Dans cette section, nous présentons les notions de vue et de projection d'un document structuré.

    2.2.1. Les vues d'un document structuré

    L'arbre de dérivation donnant la représentation (globale) d'un document structuré édité de façon coopérative, rend visible l'ensemble des symboles grammaticaux de la grammaire ayant participé à sa construction. Comme déjà mentionné à la section 2.1.3, pour des raisons de confidentialité (degré d'accréditation), un co-auteur manipulant un tel document n'aura pas accès nécessairement à l'ensemble de tous ces symboles grammaticaux; seul un sous-ensemble d'entre eux peut être jugé pertinent pour lui : c'est sa vue. Une vue V est donc un sous-ensemble de symboles grammaticaux (V ? S). Intuitivement, il s'agit des sortes visibles par un co-auteur dans la représentation globale (arbre de dérivation) du document considéré.

    Les sortes visibles par un co-auteur donné ne sont pas forcément éditables par ce dernier : elles peuvent juste être consultables ou accessibles en lecture. En revanche, les informations que ces sortes véhiculent peuvent guider le co-auteur dans l'édition d'autres sortes pour lesquelles il a les droits de lecture et d'écriture. Nous représentons par V (i)

    edit le

    sous-ensemble de symboles grammaticaux (V (i)

    edit ? Vi) visibles et éditables par le co-auteur situé sur le site i (nous l'appelons vue éditable du co-auteur situé sur le site i). Il est évident que dans un contexte d'édition où l'hypothèse d'édition disjointe est prise en compte, les vues éditables des différents co-auteurs doivent être mutuellement disjointes.

    2.3. Expansion des répliques partielles 27

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    2.2.2. Projection d'un document structuré

    Une réplique partielle d'un document t suivant une vue V, est une copie partielle de t obtenue en supprimant dans t tous les noeuds étiquetés par des symboles n'appartenant pas à V. Pratiquement, une réplique partielle est obtenue via une opération de projection notée ð. On note donc ðV (t) = tV le fait que tV soit une réplique partielle obtenue par projection de t suivant la vue V. Pour une vue V donnée, l'opération de projection efface des arbres de dérivation, les noeuds étiquetés par des symboles invisibles (n'appartenant pas à V) tout en conservant la structure de sous-arbre. Les résultats sont des listes d'arbres qui pourront effectivement contenir plusieurs éléments dans le cas où l'axiome est invisible.

    Les répliques partielles pourront être éditées par les co-auteurs (ils pourront éditer les bourgeons sur lesquels ils ont les droits de lecture et d'écriture); notons tVi = tma j

    Vi le fait que le document tma j

    Vi soit une mise à jour du document tVi, c'est à dire que tma j

    Vi est obtenu

    de tVi en remplaçant certains de ses bourgeons par des arbres.

    La figure 2.5 présente un document t conforme à la grammaire Gexpl ainsi que deux répliques partielles tv1 et tv2 obtenues respectivement par projections à partir des vues V1 = {A,B} et V2 = {A,C} et qui sont éditées respectivement sur les sites 1 et 2; le coauteur 1 (resp. le co-auteur 2) ne peut éditer que les bourgeons de type A (resp. C) (c'est à dire queV(1)

    edit = {A} et V edit (2) = {C}); les documents mis à jour sont respectivement tma j

    v1

    et tma j

    v2 .

    FIGURE 2.5 - Exemple de projections et de mises à jour effectuées sur un document.

    2.3. Notion de projection inverse ou d'expansion des répliques partielles

    Lorsque vient le moment de la synchronisation, il faut fusionner les différentes mises à jour des différents co-auteurs; ceci dans le but d'obtenir un document global conforme

    2.3. Expansion des répliques partielles 28

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    à la grammaire globale. Sachant que les documents à fusionner (répliques partielles mises à jour) ne sont pas forcément conformes à de la grammaire globale6 ; il faut au préalable, trouver des documents conformes au modèle global et pour lesquels ces répliques partielles sont des projections. La recherche de ces documents, connue comme étant le problème de la projection inverse ou expansion, est l'objet de cette section.

    2.3.1. Le problème de la projection inverse

    La projection inverse ou expansion d'une réplique partielle mise à jour tma '

    Vi relativement

    { }

    à une grammaire G = (S,P,A) donnée, c'est l'ensemble Tma ' tma '

    iS = iS ? G | ðVi(tma '

    iS ) = tma '

    Vi

    des documents conformes à G qui admettent tma '

    Vi comme réplique partielle suivant la vue

    Vi. Ces documents peuvent être en nombre infini; en effet si nous considérons la réplique partielle mise à jour tma '

    v1 obtenue en éditant sur le site 1 la réplique partielle tv1 (tv1 étant obtenue par projection du document t - conforme à la grammaire Gexpl - suivant la vue V1 = {A,B}) (figure 2.5), on peut trouver un nombre illimité de documents tma ' iS qui sont ses projections inverses (il suffit d'itérer sur la production C ? C C) comme l'illustre la figure 2.6.

    FIGURE 2.6 - Exemple de projections inverses d'une réplique partielle.

    Le calcul des expansions des répliques partielles mises à jour est primordial étant donné que ce sont les documents de ces expansions qui seront fusionnés pour déterminer les documents globaux intégrant toutes les mises à jour (dans le cas où il n'y a pas de conflits) des différents co-auteurs. L'expansion d'un document pouvant être infinie, il est souhaitable de ne pas chercher à calculer tous les documents qui la constituent. Par ailleurs, même si ces ensembles étaient finis, ce serait très coûteux de les générer vu que ce n'est qu'une infime proportion des documents qu'ils contiennent qui sera retenue à l'issue de la fusion. L'idée proposée dans [BTT08, BTT07, TT09] est donc d'implémenter les algorithmes d'expansion associés à chaque vue sous la forme de co-routines qui construisent

    6. Pour rappel, les répliques partielles ne sont pas forcément conformes au modèle grammatical global mais plutôt à des modèles grammaticaux locaux. Les modèles locaux peuvent être obtenus en récrivant les productions du modèle global; une solution (ne s'appliquant qu'à une certaine classe de grammaire) basée sur ce raisonnement a été proposé dans [TTTAD14].

    2.3. Expansion des répliques partielles 29

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    de façon paresseuse7 une représentation de leur espace de solution respectif; et par la suite, de faire collaborer ces co-routines pour générer les documents globaux recherchés. De ce fait, l'expansion d'une réplique partielle sera représentée par un automate d'arbre qui sera utilisé pour la génération de ses instances (les documents de l'expansion).

    2.3.2. Sérialisation d'un document structuré

    Pour des besoins de sérialisation, un arbre peut être linéarisé sous la forme d'un mot de Dyck à n lettres où n est la taille de l'alphabet étiquetant les noeuds de l'arbre. Le langage de Dyck à n lettres (Ón = {(i,)i | 1 i n}) c'est-à-dire le langage des parenthèses bien formées sur n lettres, est donné par la grammaire

    (Dyck) -p (primeDyck)*

    (primeDyck) -p (i (Dyck) )i 1 i n

    Un mot premier de Dyck code un arbre et un mot de Dyck une suite d'arbres, c'est à dire une forêt. On associe une paire de parenthèses à chaque symbole grammatical puis on effectue un parcours en profondeur de l'arbre à sérialiser comme illustré sur la figure 2.7 avec la réplique partielle mise à jour tma j

    v1 .

    FIGURE 2.7 - Linéarisation d'un arbre (tma j

    v1 ) : on a associé les symboles de Dyck '(1' et ')1' (resp. '(2' et ')2') au symbole grammatical A (resp. B).

    On peut restreindre l'association des paires de parenthèses à un sous-ensemble de symboles grammaticaux (une vue - V par exemple -). La linéarisation des documents sera partielle et ne représentera que les symboles visibles (ceux auxquels on a adjoint une paire de parenthèse) dans le document : on parlera de la trace visible du document en question. Ceci induit que des documents (t1 et t2 par exemple) différents peuvent avoir la même trace visible (t). Dans ce cas, leur trace visible commune n'est rien d'autre que la linéarisation de leurs projections suivant la vue considérée. On en déduit de ce fait que les documents (t1 et t2) en question appartiennent à une même expansion (celle de t).

    7. L'évaluation paresseuse ou évaluation par nécessité est une forme d'évaluation dans laquelle les éléments sont calculés uniquement quand leurs résultats sont nécessaires. Contrairement à l'évaluation immédiate, cette technique permet de réaliser des constructions à l'origine impossibles; comme la définition d'une suite infinie...[Has, HPHF99, GHC]

    2.3. Expansion des répliques partielles 30

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    2.3.3. Représentation de l'expansion d'une réplique partielle et

    exemple

    L'algorithme d'expansion va consister à associer un automate d'arbre à une vue. Cet automate permet à la fois de reconnaître tous les documents de l'expansion mais on peut aussi l'utiliser pour générer (de façon paresseuse) ces documents.

    Comme pour la conformité, l'automate de l'expansion sera construit à partir de la grammaire globale G. Cependant, la seule propriété connue des documents de l'expansion que cet automate devra générer est qu'ils ont tous la même trace visible t (la réplique partielle). C'est pourquoi, l'état initial de cet automate sera construit à partir de cette trace visible.

    Un exemple d'application

    Dans cet exemple, nous construisons un automate d'arbre 91 permettant de reconnaître et/ou de générer tous les documents (conformes à Gexpl) qui sont des expansions de la réplique partielle mise à jour tma '

    v1 ; nous construisons donc 91 à partir de v = {A,B} avec pour état initial l'arbre tma '

    v1 . Nous représentons des listes d'arbres (forêts) par leurs linéa-risations. Dans l'écriture de ces linéarisations, nous utilisons la parenthèse ouvrante '(' et fermante ')' pour représenter les symboles de Dyck associés au symbole visible A et le crochet ouvrant '[' et fermant ']' pour représenter les symboles de Dyck associés au symbole visible B. Chaque transition des automates associés aux répliques partielles suivant la vue {A,B} est conforme à l'un des schémas de transition suivants :

    (A,w1) -> (P1,[(C,u),(B,v)]) si w1 = u[v]

    (A,w2) -> (P2,[]) si w2 = å
    (B,w3) -> (P3,[(C,u),(A,v)]) si w3 = u(v) (B,w4) -> (P4,[(B,u),(B,v)]) si w4 = [u][v] (C,w5) -> (P5,[(A,u),(C,v)]) si w5 = (u)v (C,w6) -> (P6,[(C,u),(C,v)]) si w6 = uv

    (C,w7) -> (P7,[]) si w7 = å

    Ces schémas de règles sont obtenus à partir des productions de la grammaire et les couples (X,wi) sont des états dans lesquels X est un symbole grammatical et le motif wi est une forêt codée dans le langage de Dyck. Le premier schéma par exemple, stipule que les AST générés à partir de l'état (A,w1) sont ceux obtenus en utilisant la production P1 pour créer un arbre de la forme P1[t1,t2] ; t1 et t2 étant générés respectivement à partir des états (C,u) et (B,v) tel que w1 = u[v]. Dans une telle décomposition (w1 = u[v]), on peut déterminer u et v à partir de w1 par pattern matching (filtrage par motif) facilement et sans ambiguïté : on dit dans ce cas que le motif w1 est déterministe. Les schémas de transition dont les motifs sont non déterministes (le sixième schéma par exemple - w6 = uv -) sont en général responsables de la présence d'une infinité de documents admettant la même trace visible.

    Ayant associé les symboles de Dyck '(' et ')' (resp. '[' et ']') au symbole grammatical A (resp. B), la linéarisation de la réplique partielle mise à jour tma '

    v1 donne ((()[()])[()])
    (figure 2.7). A étant l'axiome de la grammaire et aussi un symbole visible (appartenant à la vue), l'état initial de l'automate .91 est q0 = (A,(()[()])[()]). En ne considérant que les états accessibles à partir de q0 et en appliquant les schémas de règles présentés précédemment, nous obtenons l'automate d'arbre suivant pour la réplique tma '

    v1 :

    2.4. Fusion des répliques partielles 31

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    q0

    ->

    (P1,[q1,q2])

     

    avec

    q1 = (C,(()[()])) et q2 = (B,())

    q1

    ->

    (P5,[q3,q4])

     

    avec

    q3 = (A,()[()]) et q4 = (C,å)

    q1

    ->

    (P6,[q4,q1]) |

    (P6,[q1,q4])

     
     

    q2

    ->

    (P3,[q4,q5])

     

    avec

    q5 = (A,å)

    q3

    ->

    (P1,[q6,q2])

     

    avec

    q6 = (C,())

    q4

    ->

    (P6,[q4,q4]) |

    (P7,[])

     
     

    q5

    ->

    (P2,[])

     
     
     

    q6

    ->

    (P5,[q5,q4])

     
     
     

    q6

    ->

    (P6,[q4,q6]) |

    (P6,[q6,q4])

     
     

    Il est aisé de vérifier que l'automate présenté ci-dessus, accepte les arbres de la figure

    2.6 qui sont des expansions de tmaj

    v1 .

    Génération des arbres à partir d'un automate

    Tout comme il est possible de générer des mots du langage accepté par un automate classique (automate sur les chaînes de caractères) à partir de ce dernier, il est possible de générer des arbres à partir d'un automate d'arbres. En effet, il suffit de partir de l'état initial vers les états finals en se laissant guider par les transitions de l'automate. Il existe tout de même le risque de tourner en rond (indéfiniment) lorsque les transitions de l'automate décrivent un cycle ; on passe alors plusieurs fois par un même état. Pour régler ce problème, il suffit de fixer le nombre maximum d'utilisation d'un état dans la génération. Sur ce principe, un générateur (dont le code Haskell est donné dans l'an-nexe B) a été proposé dans [BTT08, BTT07] ; ce dernier énumère les arbres les plus simples acceptés par un automate d'arbre, c'est à dire, les arbres tels que dans aucune branche, un état de l'automate n'est utilisé plus d'une fois pour la génération des noeuds de la branche. L'application de cette fonction de génération à l'automate fournit l'AST P1[P5[P1[P5[P2[],P7[]],P3[P7[],P2[]]],P7[]],P3[P7[],P2[]]] correspondant au second arbre de la figure 2.6.

    2.4. Fusion des répliques partielles mises à jour

    La dernière étape du procédé d'édition coopérative présenté à la section 2.1.3 est la fusion des mises à jour portées par les co-auteurs sur les différentes répliques partielles. Pour cela, on synchronise les expansions des différentes répliques mises à jour. Ces expansions étant représentées par des automates d'arbre qui leur ont été associés, leur synchronisation implique une synchronisation à base d'une opération (produit synchrone) de ces automates. Dans cette section, nous définissons le produit synchrone de plusieurs automates d'arbre puis nous montrons comment ce produit peut être utilisé pour réaliser la fusion des mises à jour portées sur les répliques partielles.

    2.4.1. Produit synchrone des automates d'arbre

    Définition 14 Produit synchrone de k automates

    Soient (1) = (E,Q(1),R(1),qo1)),. ., (k) = (Ó,Q(k),R(k),qak)) k automates d'arbre. Le produit synchrone de cesi k automates (1) ®··· ® (k) noté ®i (i), est l'automate (sc) = (Ó,Q,R,q0) défini comme suit :

    Ses états sont les vecteurs d'états : Q = Q(1) x ··· x Q(k) ;

    Son état initial est formé par le vecteur des états initiaux des différents automates : q0 = (q(1)

    0 ,···,q(k)

    0 );

    2.5. Synthèse 32

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    -- Ses transitions sont données par :

    ~ ~

    (q(1),...,q(k)) a ? (q(1)

    1 ,...,q(k) 1 ),...,(q(1)

    n ,...,q(k)

    n ) ?

    a

    q(i) ? (q(1i),...,qSii)) ?i, 1 = i = k)

    L'automate d'arbre produit permet de représenter l'intersection des langages d'arbre acceptés par les automates intervenants dans le calcul de ce produit ; il (l'automate produit) accepte donc les arbres (documents) qui sont reconnus par tous les automates qui permettent de le calculer. Plus formellement,

    (?k )
    i
    =191(i) ` t r (q1,··· ,qk)) ? (?i, 91(i) ` t r qi) donc 2' (?k i=191(i), (q1,··· ,qk)) = T2' (91(i), qi

    2.4.2. Fusion des répliques partielles

    Le but de la fusion des mises à jour portées sur les répliques partielles est celui de trouver un document tf conforme à la grammaire globale qui intègre toutes les contributions des différents co-auteurs. Pour chaque réplique partielle, on sait déjà représenter, à l'aide d'un automate, son expansion. Un arbre appartenant à l'expansion d'une réplique partielle est conforme à la grammaire globale et admet cette réplique comme trace visible (c'est à dire qu'il intègre tous les noeuds de cette réplique). Pour atteindre l'objectif de la fusion, il faut trouver des arbres qui appartiennent à toutes les expansions des différentes répliques partielles à fusionner : il faut donc calculer l'intersection de ces expansions. Comme ces expansions sont représentées par des automates d'arbre, leur intersection peut être représentée par un automate d'arbre qui est le produit synchrone de ces automates. On peut donc en déduire que, pour fusionner les mises à jour apportées à k répliques partielles tV1,··· ,tVk d'un document structuré t il faut :

    1. Associer un automate d'arbre (91(i)) à chaque réplique partielle mise à jour (tma j

    Vi , ? 1 =

    i =k);

    2. Calculer l'automate produit 91(SC) = ?i91(i) de ces automates;

    3. Les documents reconnus par 91(SC) sont des documents globaux qui intègrent toutes les mises à jour des différents co-auteurs.

    2.5. Synthèse

    L'édition coopérative des documents structurés peut être envisagée sous plusieurs angles. Nous avons présenté dans ce chapitre le procédé qui constitue la base de nos travaux (sect. 2.1.3). La mise en oeuvre de ce procédé d'édition nécessite la définition et la formalisation de certains outils et fonctions fondamentaux. C'est ainsi que nous avons présenté, en accord avec [BTT08, BTT07, TT09], les notions de vue et de vue éditable (sect. 2.2.1), de projection et de réplique partielle (sect. 2.2.2), d'expansion (sect. 2.3) et enfin de fusion des mises à jour (sect. 2.4). Comme dans [BTT08, BTT07, TT09] ces notions ont été présentées dans un contexte où les documents à fusionner sont tous complets et où l'hypothèse d'édition disjointe (une catégorie syntaxique ne peut être éditée que par au plus un coauteur) est considérée. Dans le chapitre 3 nous allons lever ces hypothèses et adapter les différents algorithmes pour pouvoir adresser les nouveaux problèmes qui surgiront.

    33

    Chapitre3

    Fusion consensuelle des mises à jour

    des répliques partielles

    Sommaire

    3.1 - Problématique de la réconciliation par consensus 34

    3.2 - Calcul du consensus 34

    3.3 - Synthèse 43

    La fusion des mises à jour portées sur les répliques partielles d'un document structuré est inévitable dans un processus d'édition coopérative asynchrone. Dans notre approche d'édition coopérative, elle consiste à trouver un document global qui intègre au mieux les contributions de chaque co-auteur, sachant que chaque co-auteur a édité sa réplique suivant un modèle grammatical local (dérivé du modèle global); le modèle local garantit la cohérence des mises à jour de la réplique partielle vis-à-vis du modèle global 1 et assure ainsi la faisabilité de la fusion. Pour différentes raisons, plusieurs co-auteurs peuvent avoir le droit d'éditer un même noeud de façon concurrente. Cette considération couplée à l'asynchronisme de l'édition induit la possibilité que des mises à jour soient incohérentes ou conflictuelles; il faut donc pouvoir détecter ces conflits lors de la fusion et y remédier si possible. L'algorithme de fusion proposé dans [BTT08, BTT07] ne permet pas de remédier à de tels conflits. Nous proposons dans ce chapitre une instrumentalisation de cet algorithme, afin de détecter et éliminer (résoudre) les conflits lors de la fusion. Pour cela, nous nous servons d'un automate d'arbre dit du consensus, construit en faisant le produit synchrone des automates (à états de sortie) associés aux différentes répliques partielles à fusionner.

    Ce chapitre est organisé comme suit : après avoir présenté le problème de la fusion consensuelle (sect. 3.1), nous définissons la notion d'automate d'arbre à états de sortie, et ensuite, nous proposons un algorithme (algorithme 1) pour la construction de l'automate du consensus (sect. 3.2).

    1. Un modèle local garantit la cohérence des mises à jour d'une réplique partielle ti vis-à-vis du modèle global.

    3.1. Problématique de la réconciliation par consensus 34

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    3.1. Problématique de la réconciliation par consensus

    Dans un processus d'édition coopérative asynchrone d'un document, on peut permettre pour plusieurs raisons, à différents co-auteurs d'éditer une même partie dudit document ; on peut le faire, pour avoir différentes versions de ces parties et ainsi, avoir la possibilité de choisir une version satisfaisant, au mieux, les critères d'édition fixés à l'avance. De ce fait, quand on atteint un point de synchronisation, on peut se retrouver avec des répliques non fusionnables dans leur entièreté car, contenant des mises à jour non compatibles 2 : il faut les réconcilier. On peut le faire en remettant en cause (annulation) certaines actions des éditions locales afin de lever les conflits et aboutir à une version globale cohérente dite de consensus.

    Les études portant sur la réconciliation des versions d'un document reposent sur des heuristiques [Men02] dans la mesure où il n'y a pas de solution générale à ce problème. Rappelons que dans notre cas, étant donné que toutes les actions d'édition sont réversibles 3 et qu'il est facile de localiser les conflits lors de la tentative de fusion des répliques partielles, nous disposons d'une méthode canonique pour éliminer les conflits : nous remplaçons lors de la fusion tout noeud (du document global) dont les répliques sont en conflit par un bourgeon. On élague donc au niveau des noeuds où un conflit apparaît, en remplaçant le sous arbre correspondant par un bourgeon du type approprié, indiquant que cette partie du document n'est pas encore éditée : les documents obtenus sont appelés les consensus. Ce sont les préfixes maximaux sans conflits de la fusion des documents issus des différentes expansions des diverses répliques partielles mises à jour.

    Le problème de la fusion consensuelle de n répliques partielles dont le modèle global est donné par une grammaire G = (S,P,A) peut donc s'énoncer comme suit :

    Problème de la fusion consensuelle : Étant donné k vues (Vi)1<i<k et k répliques partielles (tma j

    Vi )1<i<k, fusionner consensuellement la famille (tma j

    Vi )1<i<k consiste à rechercher les plus grands documents tmaj S? G satisfaisant :

    bi E 1,...,n \I ]ti ? G, ti ti= tmaj ðVi(ti) < tNI

    j

    dans laquelle, la relation ti= permet de lier deux documents non en conflit qui sont éventuellement des mises à jour l'un pour l'autre.

    3.2. Calcul du consensus

    La solution que nous proposons au problème de la fusion consensuelle découle d'une instrumentalisation de celle proposée pour l'expansion dans [BTT08, BTT07, TT09] et décrite précédemment (chap. 2 sect. 2.3). En effet, nous définissons un opérateur binaire

    commutatif noté pour synchroniser les automates d'arbre A(i) construits pour réaliser
    les différentes expansions afin de générer l'automate d'arbre de la fusion consensuelle. En notant A(sc) cet automate, les documents du consensus sont les arbres du langage engendré par l'automate A(sc) à partir d'un état initial construit à partir du tuple formé des états initiaux des automates A(i) : L (A(sc), (qtmaj)) = consensus{L (A(i), qtma j)}. A(sc) est

    Vi Vi

    obtenu en procédant de la façon suivante :

    2. C'est notamment le cas s'il existe au moins un noeud du document global accessible par plus d'un coauteur et édité par au moins deux d'entre eux en utilisant des productions différentes.

    3. Rappel : Les actions d'édition effectuées sur une réplique partielle peuvent être annulées tant qu'elles n'ont pas encore été intégrées dans le document global.

    1. 3.2. Calcul du consensus 35

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Pour chaque vue v, construire l'automate 91(i) qui réalisera l'expansion de la réplique

    partielle tma j

    Vi comme indiqué précédemment (chap. 2 sect. 2.3.3) : (91(i), qtmaj) =

    v

    TS

    j ;

    2. Au moyen de l'opérateur ?Ù, calculer l'automate générant le langage du consensus 91(sc) = ?Ùi 91(i) ;

    3. Générer les documents acceptés par 91(sc) : ce sont ceux du consensus.

    Avant de présenter l'algorithme du calcul du consensus, précisons en utilisant les notions introduites précédemment (chap. 2 section 2.1.1), les concepts de documents en conflit et de consensus entre plusieurs documents.

    3.2.1. Consensus entre plusieurs (deux) documents

    Soient t1,t2 : N* ? A deux arbres (documents) en conflit de domaines respectifs Dom(t1) et Dom(t2) : si on appelle type la fonction qui retourne le type 4 d'un noeud en se servant de son étiquette, on dira que t1 et t2 n'admettent pas de consensus, et on note t1 Yt2, si les types de leurs noeuds racines sont différents. C'est dire (t1 Yt2) ? (type(t1(E)) =6 type(t2(E))). On dira alors que t1 et t2 sont en conflit, et on note t1 y t2, quand ils admettent un consensus mais ne sont pas fusionnables dans leur entièreté. Intuitivement, deux documents t1 et t2 (non réduits à des bourgeons) ne sont pas entièrement fusionnables, s'il existe une adresse w ? Dom(t1) n Dom(t2) telle que le type du noeud n1 situé à l'adresse w dans t1 est différent de celui du noeud n2 situé à la même adresse dans t2. Plus formellement, t1 y t2 s'il existe une adresse w ? Dom(t1) n Dom(t2) telle que t1(w) = t2(w) et au moins un des noeuds n1i,1 = i = n situés aux adresses w.i dans t1 a un type différent de celui du noeud n2i (lorsqu'il existe) situé à la même adresse dans t2. C'est à dire

    (t1 y t2 avec t1(E) =6 XW, t2(E) =6 XW) ?

    (non (t1 Yt2)) et (?w.i ? Dom(t1) nDom(t2), t1(w) = t2(w), type(t1(w.i)) =6 type(t2(w.i)))

    Si t1 et t2 sont en conflit, l'arbre consensuel tc : N* ? A issu de t1 et t2 est tel que :

    Le domaine de tc est l'union des domaines des deux arbres auquel on soustrait les éléments appartenant aux domaines des sous-arbres issus des noeuds en conflit (on élague au niveau des noeuds en conflit).

    Quand un noeud n1 de t1 est en conflit avec un noeud n2 de t2, ils apparaissent dans l'arbre consensuel tc sous la forme d'un (unique) bourgeon.

    Ainsi, ?w ? Dom(tc) on a :

    tc(w) =

    {

    t1(w) si t1(w) = t2(w)

    t1(w) si t2(w) = XW

    t2(w) si t1(w) = XW

    t1(w) si w ?/ Dom(t2) et ?u, v ? N* tel que w = u.v, t2(u) = XW

    t2(w) si w ?/ Dom(t1) et ?u, v ? N* tel que w = u.v, t1(u) = XW

    XW si t1(w) =6 XW et t2(w) =6 XW et t1(w) =6 t2(w)

    La figure 3.1 (page 36) regroupe les étapes de la fusion consensuelle de deux documents t1 et t2 en un document tf. La fusion se fait par niveau hiérarchique du haut vers le bas. Chaque étape illustre certaines des alternatives contenues dans la formule ci-dessus ; les noeuds impliqués sont mis en évidence via des couleurs. Au niveau 3 par exemple, nous illustrons le traitement de deux noeuds en conflit (noeuds étiquetés C - en rouge -).

    4. Rappel : on note XW l'étiquette d'un bourgeon de type X ; et un noeud clos étiqueté A est de type A.

    3.2. Calcul du consensus 36

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    FIGURE 3.1 - Fusion consensuelle progressive de deux documents.

    3.2.2. Construction de l'automate du consensus

    La prise en compte des documents avec des bourgeons nécessite le réaménagement de certains modèles utilisés. Par exemple, dans ce qui suit, nous manipulerons les automates d'arbre avec états de sortie en lieu et place des automates d'arbre introduits dans la définition 12. Intuitivement, un état q d'un automate est qualifié d'état de sortie s'il ne lui est associé qu'une unique transition q ? (Xe,[]) permettant de reconnaître un arbre réduit à un bourgeon de type X ? L. Ainsi, un automate d'arbre à états de sortie J1 est un quintuplet (L,Q,R,q0,exit) où L,Q,R,q0 désignent les mêmes objets que ceux introduits dans la définition 12, et exit est un prédicat défini sur les états (exit: Q ? Bool). Tout état q de Q pour lequel exit q est Vrai est un état de sortie.

    Nous définissons un automate d'arbre à états de sortie par le type Haskell suivant:

    data Automata p q = Auto {exit::q -> Bool, next::q -> [(p, [q])]}

    dans lequel, le type générique (variable de type) p est le type des productions qui étiquettent les transitions et q est celui des états de l'automate. L'automate est défini ici au moyen de deux sélecteurs : exit qui est un prédicat sur les états ayant pour type Haskell

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    3.2. Calcul du consensus 37

    exit :: Automata p q -> q -> Bool, permet de déterminer si un état q d'un automate donné est un état de sortie. La fonction next qui implémente la fonction de transition, a pour type Haskell next :: Automata p q -> q -> [(p, [q])], et retourne la liste des états accessibles à partir d'un état q donné d'un automate.

    Comme dans [BTT08, TT09, BTT07], nous représentons une vue par un ensemble de prédicats sur les symboles de la grammaire. La fonction gram2autoview [BTT08, TT09, BTT07] (dont le code est donné dans l'annexe B) permet de construire un automate capable de reconnaître les documents globaux qui sont des expansions d'une réplique partielle suivant une vue donnée. Un état de l'automate généré par gram2autoview, est de la forme (Tag symb, ts) et permet de reconnaître (ou d'engendrer) l'ensemble des arbres de dérivation ayant symb pour racine et ts pour projection suivant une vue donnée. On dira qu'un tel état est de type symb. Le type Tag, permet de distinguer les états de sortie (lorsque la donnée est construite à l'aide de Open) des autres états (lorsqu'elle est construite au moyen de Close). Ainsi, le type Tag est défini comme suit :

    data Tag x = Close x | Open x deriving (Eq,Show)

    Dans la section 3.2.1 ci-dessus, nous avons dit que, "lorsque les types des noeuds racines de deux arbres sont différents, on dit qu'ils n'admettent pas de consensus". On peut, à partir de cet extrait et de la définition des automates, déduire que, "deux automates admettent un consensus (sont consensuels) si et seulement si leurs états initiaux sont du même type". En effet, si leurs états initiaux q10 de la forme (Tag symb1,ts1) et q20 de la forme (Tag symb2,ts2) sont de même type, alors symb1 == symb2, et ces états permettent de générer des arbres ayant comme racine un noeud de type "symb1". On a donc la fonction haveConsensus suivante, qui permet de déterminer si deux automates admettent un consensus à partir de deux états initiaux donnés; cette fonction utilise la fonction untag permettant de débarrasser un symbole de son "Tag" :

    1 haveConsensus :: Eq symb => (Tag symb, t) -> (Tag symb, t1) -> Bool

    2 haveConsensus state1@(tagsymb1, ts1) state2@(tagsymb2, ts2)=

    3 (untag tagsymb1) == (untag tagsymb2)

    4

    5 untag :: Tag x -> x

    6 untag (Open x) = x

    7 untag (Close x) =x

    Dans cette même section (sect. 3.2.1), nous avons aussi dit que, "quand deux noeuds sont en conflit, ils apparaissent dans l'arbre consensuel sous la forme d'un (unique) bourgeon". Du point de vue de la synchronisation d'automates, la notion de "noeuds en conflit" se traduit par la notion "d'états en conflit" (qui est précisée ci-dessous) et l'extrait précédent se traduit par "quand deux états sont en conflit, ils apparaissent dans l'automate du consensus sous la forme d'un (unique) état de sortie". Ainsi, si on considère deux familles de transitions

    1 1 1 1 1 nl n1 2 2 2 2 272 n2q

    [(a1,[q1,··· qm1]),...,(an1,[e ,···,qm2])] et q-- [(a[q···,qp1]),...,(an2,[ql ,···,qp2])]

    associées aux états q10 et q20 de deux automates d'arbre auto1 et auto2, on dira que les états q10 et q20 (qui ne sont pas des états de sortie) sont en conflit (et on note q10 y q20) s'il n'existe pas de transition partant de chacun d'eux et portant la même étiquette, c'est à dire qu'il n'existe aucune étiquette de transition a3 telle que (a3,[q31,...,q3n3]) appartient à [(a11,[q11,··· ,q1 m1]),...,(a1 n1,[qn1 1 ,··· ,qn1m2])] et (a3,[q41,...,q4n4]) appartient à la famille [(a2 1,[q2 1,···,q2 p1]),...,(a2 n2,[qn2 1 ,··· ,qn2p2])].

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

     

    3.2. Calcul du consensus

     

    38

    1

    autoconsens::(Eq a1, Eq a) =>(a -> a1) -> Automata a1 (Tag a, [t1])

     
     

    2

    -> Automata a1 (Tag a, [t]) -> Automata a1 ((Tag a, [t1]), (Tag a,

    [t]))

     

    3

    autoconsens symb2prod auto1 auto2 = Auto exit_ next_ where

     
     

    4

    exit_ (state1,state2) = case haveConsensus state1 state2 of

     
     

    5

    True -> (exit auto1 state1) && (exit auto2 state2)

     
     

    6

    False -> True

     
     

    7

     
     
     

    8

    next_ (state1,state2) = case haveConsensus state1 state2 of

     
     

    9

    False -> []

     
     

    10

    True -> case (exit1,exit2) of

     
     

    11

    (False,False) -> case (isInConflicts state1 state2) of

     
     

    12

    True -> [(symb2prod(typeState state1),[])]

     
     

    13

    False -> [(a1,zip states1 states2) |

     
     

    14

    (a1,states1) <- next auto1 state1,

     
     

    15

    (a2,states2) <- next auto2 state2,

     
     

    16

    a1==a2, (length states1)==(length states2)]

     
     

    17

     
     
     

    18

    (False,True) -> [(a, zip states1 (forwardSleepState states1))

    |

     

    19

    (a,states1) <- next auto1 state1]

     
     

    20

     
     
     

    21

    (True,False) -> [(a, zip (forwardSleepState states2) states2)

    |

     

    22

    (a,states2) <- next auto2 state2]

     
     

    23

     
     
     

    24

    (True,True) -> [(a1,[]) | (a1,[]) <- next auto1 state1,

     
     

    25

    (a2,[]) <- next auto2 state2, a1==a2]

     
     

    26

     
     
     

    27

    where

     
     

    28

    exit1 = exit auto1 state1

     
     

    29

    exit2 = exit auto2 state2

     
     

    30

    forwardSleepState states = map (\state -> (Open (typeState state),

    []))

    states

    31

    typeState state@(tagsymb, ts1) = (untag tagsymb)

     
     

    32

    isInConflicts state1@(tagsymb1, ts1) state2@(tagsymb2, ts2) =

     
     

    33

    null [(a1,zip states1 states2) |

     
     

    34

    (a1,states1) <- next auto1 state1,

     
     

    35

    (a2,states2) <- next auto2 state2,

     
     

    36

    a1==a2, (length states1)==(length states2)]

     
     

    algorithme 1 : algorithme de construction de l'automate du consensus

    L'automate synchronisé consensuelJ1(sc) = ?Ù i J1(i) dont le processus de construction (pour deux automates) est décrit par l'algorithme 1 (écrit en Haskell [Has]) ci-dessus, est un automate à états de sortie. Il est obtenu en considérant lors du calcul du produit synchrone des automates J1(i) que:

    1. un état q = (q1,--- ,qk) est un état de sortie si :

    a) les états composites qi n'admettent pas de consensus (algorithme 1 lignes 4 et 6) ou

    b) tous les états composites qi sont des états de sortie (algorithme 1 ligne 5).

    2. quand un automate J1(j) quelconque a atteint un état de sortie5 (algorithme 1 lignes 18, 21 et 24), il ne contribue plus au comportement mais, ne s'oppose pas à la

    5. Le noeud correspondant dans le document de la projection inverse est un bourgeon et traduit le fait que l'auteur correspondant ne l'a pas édité. Dans le cas où il serait partagé avec un autre co-auteur l'ayant édité dans sa réplique, c'est l'édition réalisée par ce dernier qui sera retenue lors de la fusion.

    3.2. Calcul du consensus 39

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    synchronisation des autres automates : on dit qu'il est endormi. Un état endormi sera propagé convenablement pour ne pas s'opposer à la synchronisation des autres automates (algorithme 1 lignes 18 (second paramètre de la fonction zip) et 21); pour cela, on se sert de la fonction forwardSleepState (algorithme 1 lignes 30 et 31) pour "fabriquer" des états endormis. En fait, forwardSleepState prend une liste d'états en entrée et produit, en sortie, une liste d'états de sortie dont les types sont ceux des états pris en arguments.

    Ainsi, pour k automates .91(i) = (Ó,Qi,Ri,q(i)

    0 ,exiti) 1 < i < k, associés à k répliques par-

    tielles, l'automate synchronisé consensuel .91(sc) = ®Ùi .91(i) est construit comme suit (algorithme 1) :

    1. Ses états sont des vecteurs d'états : Q = Q1 x ··· x Qk ;

    2. Son état initial est le vecteur formé des états initiaux des différents automates :

    (1) k

    q0 = (q0 ,···,q0 );

    3. Ses transitions pour un état q = (q(1),··· ,q(k)) quelconque, sont données par :

    a) Si les états composites de q sont non consensuels, alors q n'admet aucune transition (algorithme 1 lignes 8 et 9) ;

    b) Si les états composites de q admettent un consensus, alors trois cas de figure se présentent :

    i. Si aucun de ces états n'est de sortie et

    qu'ils sont en conflit, alors q admet une transition vers un état de sortie dont le type est le même que celui de ces états composites (algorithme 1 lignes 11 et 12) ;

    qu'ils ne sont pas en conflit, alors q génère des arbres dont le noeud racine est étiqueté par une production du type de ces états, et dont les fils sont générés par des états qui sont des couples formés à partir d'un état appartenant aux états suivants de chacun de ces états composites (algorithme 1 lignes 13 à 16) ;

    ii. Si certains de ces états sont des états de sortie (ils sont endormis), alors q génère des arbres dont le noeud racine est étiqueté par une production du type de ces états et appartenant aux suivants des états qui ne sont pas de sortie, et dont les fils sont générés par des états qui sont de la forme ((Tag symb, ts), (Open symb, [])), formés à partir d'états (de la forme (Tag symb, ts)) appartenant aux états suivants de l'état non de sortie (algorithme 1 lignes 18 à 22) ;

    iii. Si ces états sont tous des états de sortie (q est un état de sortie), alors q admet une transition vers un état de sortie de type, le type de ces états (algorithme 1 lignes 24 et 25).

    ®Ùi est donc une relaxation de la synchronisation d'automates que nous avons intro-

    duite dans la définition 14 et 2' (.91(sc), (qtmaj)) = consensus(2' (.91(i), qtmaj)). Il ne reste plus

    Vi Vi

    qu'à appliquer notre générateur à .91(sc) comme dans [BTT08] pour obtenir les documents les plus simples qu'il accepte, c'est à dire ceux du consensus.

    3.2.3. Illustration de l'algorithme de la fusion consensuelle

    Nous illustrons l'algorithme de fusion consensuelle avec la grammaire Gexpl de l'exemple 8. Nous associons des automates d'arbre .91(1) et .91(2) respectivement aux répliques par-

    tielles mises à jour tma j

    v1 et tma j

    v2 (figure 3.2.c et 3.2.e), puis nous construisons l'automate du

    3.2. Calcul du consensus 40

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    consensus 91(sc) = 91(1) 0 91(2) par application de la démarche décrite dans la section 3.2.2 et enfin nous présentons les documents les plus simples du consensus (figure 3.3 page 43).

    FIGURE 3.2 - Exemple de workflow d'une édition avec conflit et consensus correspondant.

    Les schémas de transition pour la vue {A,B}

    Une liste d'arbres (forêt) est représentée par la concaténation de leurs linéarisations. Nous utilisons la parenthèse ouvrante '(' et fermante ')' pour représenter les symboles de Dyck associés au symbole visible A et le crochet ouvrant '[' et fermant ']' pour représenter ceux associés au symbole visible B. Puisque les arbres manipulés peuvent contenir des bourgeons, ils est nécessaire de pouvoir linéariser ces derniers. Nous associons donc les symboles '(w' et ')w' (resp. '[w' et ']w') au bourgeon Aw (resp. Bw) de type A (resp. B). Chaque transition des automates associés aux répliques partielles suivant la vue {A,B} est conforme à l'un des schémas de règles suivants :

    (A,w1) -+ (P1,[(C,u),(B,v)]) si w1 = u[v]

    (A,w2) -+ (P2,[]) si w2 = E

    (A,w3) -+ (Aw,[]) si w3 = (w )w

    (B,w4) -+ (P3,[(C,u),(A,v)]) si w4 = u(v)

    (B,w5) -+ (P4,[(B,u),(B,v)]) si w5 = [u][v]

    (B,w6) -+ (Bw,[]) si w6 = [w]w

    (C,w7) -+ (P5,[(A,u),(C,v)]) si w7 = (u)v

    (C,w8) -+ (P6,[(C,u),(C,v)]) si w8 = uv =6 E

    (C,w9) -+ (Cw,[]) si w9 = E

    Ces schémas de règles [BTT08] sont obtenus à partir des productions de la grammaire. Les états (A,w3) avec w3 = (w )w, (B,w6) avec w6 = [w]w et (C,w9) avec w9 = E sont des états de sortie [BTT08]. La règle (C,w9) -+ (Cw,[]) liée à la production P7 stipule que l'AST

    3.2. Calcul du consensus 41

    généré à partir de l'état (C,w9) est réduit à un bourgeon de type C (C est le symbole situé en partie gauche de P7).

    Remarque 15 Nous ne représentons pas tout l'ensemble des schémas de règles dans cet exemple; seul le sous-ensemble utile pour la réconciliation des documents clos est représenté car les documents à réconcilier ici sont tous clos. L'ensemble des schémas de règles est totalement représenté dans l'annexe A.

    Construction de l'automate A(1) associé à tv1

    Ayant associé les symboles de Dyck '(' et ')' (resp. '[' et ']') au symbole grammatical A (resp. B), la linéarisation de la réplique partielle tmaj

    .

    v1 (fig. 3.2.c) donne (([[()()][()]])[()])

    Comme A est l'axiome de la grammaire et qu'il est visible, l'état initial de l'automate A(1) est q10 = (A,([[()()][()]])[()]). En ne considérant que les états accessibles à partir de q10 et en appliquant les schémas de règles présentés précédemment, nous obtenons l'automate d'arbre suivant pour la réplique tma j

    v1 (fig. 3.2.c) :

    q10

    q11

    q11

    q12

    q13

    q14

    q15

    q16

    q17

    q18

    q18

    -+

    -+

    -+ -+ -+ -+ -+ -+ -+ -+ -+

    (P1,[q11,q12])
    (P5,[q13,q14])

    (P6,[q1 4,q11]) |

    (P3,[q14,q15]) (P1,[q14,q16]) (Cw,[])

    (P2,[]) (P4,[q17,q12]) (P3,[q18,q15]) (P5,[q15,q14])

    (P6,[q18,q14]) |

    (P6,[q11,q14])

    (P6,[q14,q18])

    avec
    avec

    avec
    avec

    avec
    avec

    q11 = (C,([[()()][()]])) et q12 =

    (B,())

    q13 = (A,[[()()][()]]) et q14 =
    (C,e)

    q15 = (A,e)

    q16 = (B,[()()][()])

    q17 = (B,()()) q1 8= (C,())

    L'état q14 = (C,e) est le seul état de sortie de l'automate A(1). Il est aisé de vérifier que le document de la figure 3.2.f issu de la projection inverse de tv1maj appartient au langage accepté par l'automate A(1).

    Construction de l'automate A(2) associé à tv2

    En associant au symbole grammatical C (resp. A) les symboles de Dyck '[' et ']' (resp. '(' et ')'), en associant aussi au bourgeon Cw (resp. Aw) les symboles de Dyck '[w' et ']w' (resp. '(w' et ')w'), les schémas des transitions des automates associés aux répliques partielles suivant la vue {A,Cl sont les suivants :

    (A,w1) -+ (P1,[(C,u),(B,v)]) si w1 = [u]v

    (A,w2) -+ (P2,[])

    si w2 = e

    (A,w3) -+ (Aw,[]) si w3 = (w)w

    (B,w4) -+ (P3,[(C,u),(A,v)]) si w4 = [u](v)

    (B,w5) -+ (P4,[(B,u),(B,v)]) si w5 = uv =6 e

    (B,w6) -+ (Bw,[]) si w6 = e

    (C,w7) -+ (P5,[(A,u),(C,v)]) si w7 = (u)[v]

    (C,w8) -+ (P6,[(C,u),(C,v)]) si w8 = [u][v]

    (C,w9) -+ (P7,[]) si w9 = e

    (C,w10) -+(Cw,[]) si w10 = [w]w

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    3.2. Calcul du consensus 42

    Le mot de Dyck ([([][]()[]())[]][[][]]()) est la linéarisation de la réplique partielle tma j

    v2

    (fig. 3.2.e). L'état q20 = hA,[([][]()[]())[]][[][]]()i est donc l'état initial de l'automate 91(2) associé à cette réplique. Ses transitions sont :

    avec q21 = hC,([][]()[]())[]i et q22 = hB,[[][]]()i

    avec q23 = hA,[][]()[]()i et q24 = hC,åi avec q25 = hC,[][]i et q26 = hA,åi avec q27 = hB,[]()[]()i

    avec q28 = hB,åi, q29 = hB,[]i, q210 = hB,()[]()i, q211 = hB,[]()i, q212 =

    hB,[]()[]i et q2 13 = hB,()i

    q20

    q21

    q22

    q23

    q24

    q25

    q26

    q27

    q28

    q29

    -?

    -? -? -? -? -? -? -?

    -?

    -?

    (P1,[q2 1,q22])

    (P5,[q23,q24]) (P3,[q25,q26]) (P1,[q24,q27]) (P7,[])

    (P6,[q24,q24]) (P2,[])

    (P4,[q28,q27]) | (P4,[q29,q210]) |

    (P4,[q2 11,q211]) | (P4,[q212,q213]) |
    (P4,[q27,q28])

    (Bù,[])

    (P4,[q2 8,q29]) | (P4,[q29,q28])

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    q210

    q211

    q212

    q213

    q214

    -?

    -?

    -?

    -?

    -?

    (P4,[q28,q210]) (P4,[q214,q213]) (P3,[q2 4,q26]) (P4,[q28,q212]) (P4,[q2 11,q29]) (P4,[q28,q213]) (P4,[q2 8,q214]) (P4,[q214,q28])

    | (P4,[q213,q211])

    | (P4,[q210,q28])

    | (P4,[q29,q2 14])

    | (P4,[q212,q28]) | (P4,[q2 13,q28])

    | (P4,[q2 13,q29])

    |

    |

    |

    avec

    q214 = hB,()[]i

    L'état q28 est le seul état de sortie de l'automate 91(2). Construction de l'automate du consensus 91(sc)

    Par application du produit synchrone de plusieurs automates d'arbres décrit dans la section 3.2.2 aux automates 91(1) et 91(2), l'automate du consensus 91(sc) = 91(1) ?Ù 91(2) a pour état initial q0 = (q10,q20). 91(1) possède une transition de q10 vers [q11,q12] étiquetée P1. De même, 91(2) possède une transition de q20 vers [q21,q22] étiquetée P1. On a donc dans 91(sc) une transition étiquetée P1 permettant d'accéder aux états [q1 = (q11,q21),q2 = (q12,q22)] à partir de l'état initial q0 = (q10,q20). Suivant ce principe, on construit l'automate consensuel suivant :

    q0

    q1

    q2

    q3

    q4

    q5

    q6

    -? -? -? -? -? -?

    -?

    (P1,[q1,q2]) (P5,[q3,q4]) (P3,[q5,q6]) (P1,[q4,q7]) (P7,[]) (P6,[q8,q8])

    (P2,[])

    q0 = (q10,q20)

    avec q1 = (q1 1,q21) et q2 = (q1 2,q22)

    avec q3 = (q13,q23) et q4 = (q14,q24)

    avec q5 = (q14,q25) et q6 = (q15,q26)

    avec q7 = (q16,q27)

    avec q8 = (qs1,q24) et qs1

    hOpen C,[]i

    =

    3.3. Synthèse 43

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    q7 -+ (P4,[q9,q10]) | (P4,[q11,q12]) | (P4,[q13,q14]) | (P4,[q15,q16]) | (P4,[q17,q18])

    avec q9 = (q17,q28), q10 = (q12,q27), q11 = (q17,q29), q12 = (q12,q210), q13 = (q17,q211), q14 = (q12,q211), q15 = (q17,q212), q16 = (q12,q213), q17 = (q17,q27) et q18 = (q12,q28)

    q8 -+ (P7,[])

    q9 -+ (P3,[q19,q20]) avec q19 = (q18,qs1) et q20 = (q15,qs2),

    qs2 = (Open A,[])

    q13 -+ (P3,[q21,q6]) avec q21 = (q1 8,q2 4)

    q14 -+ (P3,[q4,q6])

    q18 -+ (P3,[q22,q20]) avec q22 = (q14,qs1)

    q19 -+

    (P5,[q20,q22]) | (P6,[q19,q22]) | (P6,[q22,q19])

    q20 -+ (P2,[])

    q10 -+

    (Ba),[]), q11 -+ (Ba),[]), q12 -+ (Ba),[]), q15 -+ (Ba),[]), q16 -+ (Ba),[]),

    q17 -+ (Ba),[]), q21 -+ (Ca),[]), q22 -+ (Ca),[])

    Les états {q10,q11,q12,q15,q16,q17,q21,q22} sont les états de sortie de l'automate .(sc). Ce sont des états dont les états composites sont soit en conflit (par exemple q10 = (q12,q7) et q12 y q27), soit sont tous des états de sortie (par exemple q22 = (q14,qs1)).

    L'utilisation de la fonction de génération des AST (avec bourgeons) les plus simples d'un langage d'arbre à partir de son automate [BTT08, BTT07, TT09] sur l'automate .(sc), produit quatre AST dont les arbres de dérivations (les consensus) sont schématisés sur la figure 3.3.

    FIGURE 3.3 - Arbres consensuels générés à partir de l'automate .(sc).

    3.3. Synthèse

    Nous avons présenté dans ce chapitre une approche de réconciliation dite par consensus, des répliques partielles d'un document soumis à un processus d'édition coopérative asynchrone. L'approche proposée s'appuie sur une relaxation du produit synchrone d'auto-mates d'arbre pour construire un automate pouvant générer les documents du consensus. Les algorithmes présentés ici ont été implémentés en haskell [Has, GHC, HPHF99] et expérimentés sur bien des exemples (dont celui présenté à la section 3.2.3 et celui présenté

    3.3. Synthèse 44

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    dans l'annexe6 A) avec des résultats probants. Nous nous investissons actuellement à la production des preuves mathématiques (formelles) des différents algorithmes proposés. Dans le chapitre suivant, nous présentons un prototype d'éditeur, qui permettrait d'expé-rimenter, via une interface graphique, les algorithmes proposés dans un environnement véritablement distribué.

    6. Nous présentons dans cette annexe un exemple d'application de notre algorithme à un workflow d'édi-tion coopérative sans conflit.

    45

    Chapitre4

    Un prototype d'éditeur coopératif

    désynchronisé (TinyCE v2)

    Sommaire

    4.1 - Architecture et fonctionnement de TinyCE v2 46

    4.2 - Le matériel de construction de TinyCE v2 52

    4.3 - Mise en oeuvre d'un workflow d'édition sous TinyCE v2 53

    4.4 - Synthèse 54

    Les travaux que nous menons, visent essentiellement l'automatisation des procédures d'entreprises et des travaux coopératifs reposant sur l'édition coopérative des documents structurés. Ainsi, notre dénouement ne saurait être purement théorique; il doit aussi être technologique et donc pratique. À cet effet, nous avons entrepris de construire un outil de conception et de mise en oeuvre des CSCW basés sur l'édition coopérative des documents structurés. Nous poursuivons ainsi un objectif énoncé dans [TT09] et démarré avec le prototype TinyCE1 (prononcer"tennesse") [TT10]; d'ailleurs l'outil que nous mettons en oeuvre se nomme TinyCE v22 (que nous prononçons"taï-ni-ci-i version 2" 3) en hommage au prototype précédent. Un tel outil se devant d'être fiable, robuste, efficace, extensible et sécurisé, il est primordial de le concevoir minutieusement tout en reposant sur des outils (langages, bibliothèques, API - Application Programming Interface -, frameworks...) existants et présentant les caractéristiques recherchées. Nous présentons donc dans ce chapitre, les idées maîtresses pour la construction de TinyCE v2.

    TinyCE v2 est un éditeur permettant l'édition graphique et coopérative de la structure abstraite (arbre de dérivation) des documents structurés. Il s'utilise en réseau suivant un modèle client-serveur. Son interface utilisateur offre à l'usager des facilités pour l'édition de ses vues suivant les grammaires qui lui sont associées, l'édition et la validation d'une réplique partielle. Bien plus, cette interface lui offre aussi des fonctionnalités lui permettant d'expérimenter les concepts de projection, d'expansion et de fusion consensuelle étudiés dans ce mémoire.

    1. TinyCE pour "a Tiny Cooperative Editor" ou "a Tiny Collaborative Editor" [TT09] (prononcer "tennesse").

    2. TinyCE v2 signifie "a Tiny Cooperative Editor version 2" (prononcer "taï-ni-ci-i version 2").

    3. Nous avons choisi une nouvelle prononciation parce que nous ne parvenions pas à nous adapter à l'ancienne; la nouvelle prononciation est celle qui nous revenait à chaque fois qu'il fallait évoquer TinyCE.

    4.1. Architecture et fonctionnement de TinyCE v2 46

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    FIGURE 4.1 - Le logo de TinyCE v2.

    Nous allons tout d'abord présenter l'architecture générale et le fonctionnement de Ti-nyCE v2 (sect. 4.1); puis nous présenterons les outils utilisés pour sa confection (sect. 4.2) et enfin nous déroulerons, à base de notre outil, un des exemples de workflows d'édition manipulés dans ce mémoire (sect. 4.3).

    4.1. Architecture et fonctionnement de TinyCE v2

    L'architecture de TinyCE v2 implémente, en langage Java, le design pattern MVC (Model View Controller ou Modèle Vue Contrôleur en français) qui est une référence en matière de patron de conception (architectural). Dans cette architecture, les vues affichent des résultats et récupèrent des entrées (données et commandes) qu'elles transmettent aux modèles à travers les contrôleurs (qui les valident); les modèles réalisent les traitements (parsing, stockage, communication...) puis notifient les vues pour rafraîchissement. Sous TinyCE v2, le modèle, la vue et le contrôleur sont organisés comme suit:

    -- Le modèle est la pièce maîtresse réalisant le plus gros du travail. Il repose sur trois principaux éléments : des parseurs, un communicateur et un "interpréteur Haskell" né de la fertilisation croisée du langage purement orienté objet Java et du langage purement fonctionnel Haskell (sect. 4.1.1);

    · Les parseurs (Parsers) servent à encoder/décoder les données pour qu'elles soient soit sauvegardées à la XML, soit communiquées à une autre entité (distante ou non) ou encore interprétées;

    · Le communicateur (RemoteCommunicator) sert d'interface de communication entre des entités distantes. C'est grâce à cette entité que le modèle d'un client quelconque pourra communiquer avec le modèle d'un serveur par exemple;

    · L'interpréteur Haskell (HaskellRunner) permet d'exécuter des commandes Haskell. En effet, nous avons réalisé une autre approche de la fertilisation croisée des langages Java et Haskell [TT10]. Ainsi, TinyCE v2 est doté d'un moteur (engine) écrit en Haskell réunissant toutes les fonctions nécessaires pour la représentation des documents et la fusion consensuelle de ceux-ci.

    -- La vue donne une représentation graphique des documents et des commandes dans le but de permettre une interaction conviviale entre TinyCE v2 et ses utilisateurs. Elle dispose donc de parseurs pouvant réaliser la correspondance entre les données reçues et les données à afficher. Sous TinyCE v2, la vue présente les mêmes fonctionnalités qu'on soit en mode client ou en mode serveur (il n'existe qu'une seule vue). En effet, dans une édition centralisée, le site serveur réalise les opérations de synchronisation et de (re)distribution en plus des actions réalisées par les clients (éditions...); mais dans une version pair à pair, les opérations de synchronisation

    4.1. Architecture et fonctionnement de TinyCE v2 47

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    et de (re)distribution peuvent être réalisées sur n'importe quel site. Le mode client-serveur est donc un cas particulier du mode pair à pair. TinyCE v2 est conçu pour pouvoir supporter (dans le futur) des éditions en pair à pair; ce qui explique nos choix. La vue est entièrement codée en langage Java et se sert de quelques bibliothèques que nous présenterons dans la suite de ce chapitre (sect. 4.2);

    -- Le contrôleur quant à lui, est chargé d'établir le pont entre la vue et le modèle. La figure 4.2 (page 47) résume l'architecture de TinyCE v2 ci-dessus présentée.

    FIGURE 4.2 - L'architecture de TinyCE v2.

    4.1.1. Fertilisation croisée Haskell-Java

    Tout comme TinyCE, TinyCE v2 est programmé en utilisant deux langages de programmation : Haskell (pour le moteur) et Java (pour le reste). L'utilisation de ce couple de langages permet de tirer le meilleur de chacun d'entre eux. Nous exploitons Java pour la facilité qu'il offre pour la mise en oeuvre des interfaces graphiques ainsi que pour tirer profit des avantages offerts par les langages à objets (robustesse, modularité...). Du langage Haskell nous tirons profit de son grand pouvoir d'abstraction, de son mode d'évaluation (paresseuse), de la modularité... Afin de faire coopérer en parfaite synergie ce couple de langages, nous exploitons la possibilité d'appeler un code exécutable à l'intérieur de programmes Java (la même chose est possible à partir du langage Haskell). En effet, nous démarrons un interpréteur Haskell (GHCi - the Glasgow Haskell Compiler interactive -) à partir de Java, puis nous lui passons au fur et à mesure les commandes à exécuter et nous récupérons en sortie les éventuels résultats et/ou erreurs. Nous présentons sommairement ci-dessous cette démarche.

    Implémentation du moteur Haskell

    L'implémentation GHC [GHC] de Haskell n'est pas qu'un compilateur. On peut donc y créer des fonctions (programmes) et les faire exécuter (interpréter) en mode interactif

    4.1. Architecture et fonctionnement de TinyCE v2 48

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    grâce à son module GHCi. Un programme Haskell sous GHC est un fichier, bien conçu, d'extension.hs semblable à celui ci-dessous enregistré par exemple dans un fichier dénommé helloGHC.hs :

    1 module HelloGHC where

    2 sayHello name = "Bonjour "++name

    Pour exécuter ce programme en mode interactif, il suffit de charger le module avec la commande :load ou son raccourci :l puis d'appeler la fonction sayHello de la manière suivante (où xxx est l'argument de l'appel) :

    1 :load "helloGHC.hs"

    2 sayHello xxx

    Exécution d'un code Haskell dans Java

    Java permet de lancer un code exécutable (quelconque) à partir d'un code java, et donc, de lancer l'interpréteur GHCi de GHC. Pour exécuter un programme en Java on peut se servir de la classe ILanguageRunner définie comme suit:

    1 import java.io.*;

    2

    3 public class ILanguageRunner{

    4 protected Process process = null;

    5 protected String language;

    6 protected String command;

    7 public ILanguageRunner(String language, String command){

    8 this.language = language;

    9 this.command = command;

    10 }

    11 public void startExecProcess() throws IOException{

    12 ProcessBuilder processBuilder = new ProcessBuilder(command);

    13 process = processBuilder.start();

    14 }

    15 public void killExecProcess(){

    16 if(process != null)

    17 process.destroy();

    18 }

    19 public void setExecCode(String code) throws IOException {

    20 OutputStream stdin = process.getOutputStream();

    21 OutputStreamWriter stdinWriter = new OutputStreamWriter(stdin);

    22 try{

    23 stdinWriter.write(code);

    24 }finally{

    25 try{stdinWriter.close();}catch(IOException e){}

    26 try{stdin.close();}catch(IOException e){}

    27 }

    28 }

    29 public void getExecErrors() throws IOException{

    30 InputStream stdout = process.getErrorStream();

    31 InputStreamReader stdoutReader = new InputStreamReader(stdout);

    32 BufferedReader stdoutBuffer = new BufferedReader (stdoutReader);

    33 StringBuffer errorBuffer = null;

    34 try{

    35 String line = null;

    36 while((line = stdoutBuffer.readLine()) != null){

    4.1. Architecture et fonctionnement de TinyCE v2 49

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    37 if (errorBuffer == null)

    38 errorBuffer = new StringBuffer();

    39 errorBuffer.append(line);

    40 }

    41 }finally{

    42 try{stdoutBuffer.close();}catch(IOException e){}

    43 try{stdoutReader.close();}catch(IOException e){}

    44 try{stdout.close();}catch(IOException e){}

    45 }

    46 if(errorBuffer != null)

    47 throw new IOException(errorBuffer.toString());

    48 }

    49 public String getExecResult() throws IOException{

    50 InputStream stdout = process.getInputStream();

    51 InputStreamReader stdoutReader = new InputStreamReader(stdout);

    52 BufferedReader stdoutBuffer = new BufferedReader(stdoutReader);

    53 StringBuffer resultBuffer = null;

    54 try{

    55 String line = null;

    56 while((line = stdoutBuffer.readLine()) != null){

    57 if (resultBuffer == null)

    58 resultBuffer = new StringBuffer();

    59 resultBuffer.append(line);

    60 }

    61 }finally{

    62 try{stdoutBuffer.close();}catch(IOException e){}

    63 try{stdoutReader.close();}catch(IOException e){}

    64 try{stdout.close();}catch(IOException e){}

    65 }

    66 if(resultBuffer != null)

    67 return resultBuffer.toString();

    68 return null;

    69 }

    70 public String getCommand(){

    71 return command;

    72 }

    73 public void setCommand(String command){

    74 this.command = command;

    75 }

    76 public String getLanguage(){

    77 return language;

    78 }

    79 public void setLanguage(String language){

    80 this.language = language;

    81 }

    82 public String executeCode(String code) throws IOException{

    83 startExecProcess();

    84 setExecCode(code);

    85 getExecErrors();

    86 String result = getExecResult();

    87 killExecProcess();

    88 return result;

    89 }

    90 }

    Dans cette classe,

    4.1. Architecture et fonctionnement de TinyCE v2 50

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    -- les attributs process, language et command (lignes 2, 3 et 4) représentent respectivement le processus Java permettant de lancer l'exécutable, le langage courant4 et le chemin d'accès à l'exécutable;

    -- la méthode startExecProcess (lignes 9 à 12) construit le processus Java à partir de la commande courante. La méthode killExecProcess (lignes 13 à 16) détruit le processus lorsque celui-ci existe;

    -- la méthode setExecCode (lignes 17 à 26) permet d'écrire sur l'entrée standard de l'interpréteur le code à exécuter (cela correspond au passage des arguments au programme exécuté);

    -- les méthodes getExecErrors (lignes 27 à 46) et getExecResult (lignes 47 à 67) permettent respectivement de récupérer les éventuelles erreurs survenues lors de l'exécution du code définit par setExecCode (les erreurs sont renvoyées sous forme d'exception Java) et de récupérer les éventuels résultats de l'exécution dudit code;

    -- enfin, la méthode executeCode (lignes 80 à 87) exécute un code quelconque. Elle démarre un processus, définit le code, récupère les erreurs s'il y en a, sinon elle récupère le résultat puis détruit le processus.

    Une utilisation de la classe ILanguageRunner ci-dessus, pour l'exécution du code Haskell en mode interactif par GHCi peut se faire à travers la classe HaskellRunner qui hérite de ILanguageRunner et dont le code est donné ci-dessous :

    1 import java.io.IOException;

    2

    3 public final class HaskellRunner extends ILanguageRunner{

    4 public HaskellRunner(){

    5 super("Haskell", "ghci");

    6 }

    7 @Override

    8 public String getExecResult() throws IOException{

    9 String execResult = super.getExecResult(), tmpString;

    10 if(execResult == null)

    11 return null;

    12 String[] tab = execResult.split("Prelude> ");

    13 if(tab.length == 2)

    14 tab = tab[1].split("\\*[a-zA-Z0-9_]{1,}>");

    15 StringBuilder goodResult = new StringBuilder();

    16 for(int i = 1; i < tab.length - 1; i++){

    17 tmpString = tab[i].trim();

    18 if(!tmpString.isEmpty()){

    19 goodResult.append(tmpString);

    20 goodResult.append("\n");

    21 }

    22 }

    23 return goodResult.toString();

    24 }

    25 @Override

    26 public void setCommand(String command){}

    27 @Override

    28 public void setLanguage(String language){}

    29 }

    4. Notons que ce code est taillé pour l'exécution des interpréteurs interactifs de tous types et non pas seulement pour l'exécution de GHCi.

    4.1. Architecture et fonctionnement de TinyCE v2 51

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Dans cette classe, on a fixé le nom de la commande à ghci (ceci implique que le chemin d'accès du répertoire contenant le programme GHCi doit être inscrit dans la variable d'environnement path) et celui du langage à Haskell (ces deux valeurs ne peuvent plus être changées : les redéfinitions des méthodes setCommand et setLanguage associées au fait que la classe HaskellRunner ne puisse pas être dérivée5 nous le garantissent.). On a redéfini la méthode getExecResult pour mieux formater le résultat en le débarrassant des chaînes superflues ajoutées par GHCi.

    On peut donc désormais, exécuter notre moteur Haskell grâce au code suivant:

    1

    2

    3

    4

    import java.io.IOException;

    public class HelloTinyCE {

    public static void main(String[] args){

     

    5

     
     

    HaskellRunner runner = new HaskellRunner();

     

    6

     
     

    String nom = "\"Ange Frank et Chris Maxime\"";

     

    7

     
     

    String commande = ":load helloGHC.hs\nsayHello " + nom;

     

    8

     
     

    try{

     

    9

     
     

    String resultat = runner.executeCode(commande);

     

    10

     
     

    System.out.println("Le résultat de l'exécution est : "

    +

    11

     
     

    resultat);

     

    12

     
     

    }catch(IOException ex){

     

    13

     
     

    System.err.println("Des erreurs sont survenues lors de"

    +

    14

     
     

    " l'exécution des commandes.");

     

    15

     
     

    }

     

    16

     

    }

     
     

    17

    }

     
     
     

    L'exécution de ce code fournit le résultat suivant:

    1 Le résultat de l'exécution est : "Bonjour Ange Frank et Chris Maxime"

    Si on remplace le code de la ligne 7 par le code String commande = " :load helloGHC.hs \nsayHello"; alors le résultat obtenu est désormais le suivant:

    1 Des erreurs sont survenues lors de l'exécution des commandes.

    C'est donc une version de la classe HaskellRunner qui joue le rôle"d'interpréteur Haskell" au sein de TinyCE v2. Elle permet une communication bidirectionnelle entre le modèle de TinyCE v2 (codé en Java) et Haskell suivant un protocole basé sur du texte (chaînes de caractères bien formées suivant un codage à la XML) que nous avons mis en oeuvre. L'approche que nous employons diffère nettement de celle présentée dans [TT10]. Les principales différences entre ces approches sont quasiment les mêmes qui animent les débats portant sur les langages interprétés et les langages compilés; notre approche étant assimilée aux langages interprétés et celle de [TT10] étant assimilée aux langages compilés. En effet pour que notre approche fonctionne, il faut toujours que le site sur lequel TinyCE v2 s'exécute soit muni d'un interpréteur Haskell en plus de la machine virtuelle Java. En plus, le code du moteur Haskell sera toujours visible par les utilisateurs de Ti-nyCE v2 ce qui constitue un risque en matière de sécurité. Néanmoins cette approche présente l'avantage d'être portable (car il existe des interpréteurs Haskell pour toutes les plateformes), d'offrir la facilité de mise à jour du moteur Haskell et surtout la possibilité d'exploiter toute la puissance qu'offre le langage Haskell. De plus, sous TinyCE v2, le moteur Haskell n'est nécessaire que pour le fonctionnement en mode serveur; c'est à dire

    5. Ceci à cause de l'utilisation du modificateur final.

    4.2. Le matériel de construction de TinyCE v2 52

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    qu'il ne sert qu'à faire de la synchronisation et de la (re)distribution. Même les parseurs ont tous été écrits en Java. Ainsi, dans une utilisation purement centralisée de TinyCE v2, seul le serveur aura besoin d'un interpréteur Haskell; sachant que les routines de vérification de la conformité des répliques partielles mises à jour vis à vis de leurs modèles respectifs, peuvent être écrites ou générées en Java (à partir du couple d'outils (f)lex et yacc/bison6 ou encore grâce à Xtext 7).

    4.1.2. Interaction client-serveur

    Durant les échanges entre plusieurs machines distantes à travers TinyCE v2, les opérations de synchronisation et de (re)distribution sont réalisées sur l'une des machines : c'est le serveur. Les autres machines sont des postes clients et donc, ils ne servent qu'à l'édi-tion des répliques partielles. Mais il n'y a pas de TinyCE v2 Client et de TinyCE v2 Server; ces deux entités sont intégrées dans TinyCE v2. N'importe quel site peut donc être client puis serveur : cela dépend des échanges effectués (via le communicateur). Cette faculté, permet d'ouvrir le chemin au développement des échanges en pair à pair.

    Le communicateur est mis en oeuvre avec la technologie RMI (Remote Method Invocation). Pour l'aspect sécurité, les informations échangées sont cryptées, avec une clé et un vecteur d'initialisation partagés, grâce à l'algorithme AES (Advanced Encryption Standard) combiné au mode d'opération CBC (Cipher Block Chaining). Les informations reçues sont décryptées avec la même clé et le même vecteur d'initialisation. Le mode de cryptographie est donc symétrique, la clé et le vecteur d'initialisation étant inscrits en dur dans le code source de TinyCE v2; ce qui constitue un risque de sécurité (reverse engineering). Pour réduire la taille de ce risque, TinyCE v2 crypte chaque workflow. Ainsi, chaque workflow possède une clé et un vecteur d'initialisation partagés par ses participants (sites) et permettant de sécuriser ce dernier; ces outils de chiffrement sont renouvelés à chaque synchronisation. Néanmoins cette stratégie n'est pas infaillible vu que les outils de chiffrement des workflows sont eux mêmes cryptés avec les outils de chiffrement généraux de TinyCE v2. Il serait donc judicieux d'envisager d'autres moyens plus sûrs pour protéger les informations circulant entre les utilisateurs de TinyCE v2. Le chiffrement des clés partagées grâce à un algorithme de cryptographie à clé publique (asymétrique) pourrait être une bonne piste.

    4.2. Le matériel de construction de TinyCE v2

    Comme nous l'avons déjà révélé, TinyCE v2 est construit à partir de deux langages: Java et Haskell. La version de Java qui a été utilisée pour cette construction est Java 7 (avec le JDK - Java Development Kit - 1.7); et la version de GHC est la plateforme dénommée HaskellPlatform-2014.2.0.0. Pour les communications en réseau nous avons utilisé l'API RMI.

    Les sauvegardes et les analyses des fichiers XML ont été réalisées avec l'API DOM (Document Object Model) et le framework DOM4J (Document Object Model for Java). Avec DOM4J, nous avons utilisé un parseur de type SAX (Simple API for XML) et la technologie XPath (pour manipuler les données XML).

    6. L'outil yacc/bison est un produit GNU (GNU's Not UNIX) qui permet la construction d'un analyseurs syntaxiques à partir des grammaires. Combiné à l'outil (f)lex (qui permet la construction d'analyseurs lexicaux), il peut permettre la construction d'un réel compilateur.

    7. Xtext est un framework de développement des langages, utilisé comme plug-in pour l'IDE eclipse et permettant de créer des DSL (Domain-Specific Language).

    4.3. Mise en oeuvre d'un workflow d'édition sous TinyCE v2 53

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Les éléments des workflows (grammaires, vues, documents, acteurs...) ont été sauvegardé sous le format JSON (JavaScript Object Notation). Nous avons utilisé la bibliothèque open source Gson, développée par Google, pour sérialiser nos données dans leur représentation JSON et pour désérialiser ces données à partir de leur représentation JSON.

    Les données stockées, tout comme celles échangées, ont été cryptées puis décryptées grâce à l'API JCE (Java Cryptography Extension).

    L'interface graphique a été complètement développée grâce à l'API Swing. Pour la représentation graphique des documents (sous forme d'arbres) avec Swing, nous avons utilisé la version Java de la bibliothèque mxGraph. Cette version est dénommée JGraphX8. Nous avons de ce fait, réussi le pari d'utiliser de bons outils gratuits et open source pour la plupart. De bons outils qui nous ont conduit à la création d'un logiciel disponible pour Windows et pour Linux (ce sont les plateformes sur lesquelles nous avons réalisé nos tests).

    4.3. Mise en oeuvre d'un workow d'édition sous TinyCE v2

    Pour cette présentation, nous disposons de deux postes (un poste client-serveur (poste 1) et un poste client (poste 2)) pouvant communiquer via une connexion réseau. L'utilisa-tion de TinyCE v2 pour la mise en oeuvre d'un workflow d'édition, peut être la suivante:

    Sur le poste 1 (en mode serveur)

    1. Authentification et création d'un nouveau workflow d'édition : pour créer un nouveau workflow, on peut se servir du menu'Fichier/Nouveau/Workflow' ou du bouton 'Créer un nouveau workflow' (dont l'icône porte le symbole'+' sur un fond circulaire de couleur orange) de la barre d'outils.

    Pour la création du workflow, on précise:

    2. Le nom du workflow : il permet de générer un identifiant pour ledit workflow;

    3. Le serveur de synchronisation : il s'agit de l'adresse du poste qui sera chargé des (re)distributions et des synchronisations;

    4. La grammaire : on saisit les productions de la grammaire conformément au modèle9 accepté par TinyCE v2, puis on choisit l'axiome de cette grammaire;

    5. Les vues : il s'agit d'entrer les noms des différentes vues et les symboles appartenant à ces vues;

    6. Les différents acteurs/co-auteurs : on précise pour chaque co-auteur, ses paramètres d'authentification (login et mot de passe), son site d'édition (facultatif), la vue qui lui est associée...

    7. Le document initial : un document initial est généré à partir de la grammaire; mais l'utilisateur a la possibilité de proposer un autre document initial, qui sera validé par TinyCE v2.

    Pour enregistrer le workflow ainsi crée, il suffit de cliquer sur le bouton'Terminer'. Il est utile de noter qu'un workflow peut être crée à partir d'un modèle (template) existant.

    8. La bibliothèque mxGraph était précédemment dénommée JGraph et ne proposait que la représentation des graphes en Java avec Swing. À partir de la version 6, les éditeurs ont proposé des versions de ladite bibliothèque pour plusieurs autres langages (JavaScript,...). Le nom mxGraph a donc été adopté pour désigner l'ensemble de ces versions et JGraphX a été adopté pour désigner JGraph 6 (la version Java de mxGraph).

    9. Ce modèle est donné dans l'utilitaire d'aide de TinyCE v2.

    4.4. Synthèse 54

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Sur les postes 1 et 2 (en mode client)

    1. Authentification : le co-auteur concerné, fournit ses paramètres d'authentification;

    2. Recherche des workflows d'édition : pour cela, il faut se rendre dans l'onglet "workflows distants", puis entrer l'adresse du serveur de synchronisation dans la zone de texte prévue à cet effet et enfin cliquer sur le bouton"Actualiser" (dont l'icône est une loupe).

    3. Connexion au workflow : le co-auteur doit se connecter au workflow, pour obtenir, par projection suivant sa vue, une copie locale de ce dernier (copie locale de la grammaire et du document). Pour se connecter à un workflow distant, il suffit de sélectionner ledit workflow, puis de cliquer sur le bouton "Se connecter au workflow";

    4. Édition en local du document: les workflows locaux sont listés dans l'onglet "Workflows locaux". Pour éditer en local le document d'un tel workflow, il suffit de sélectionner ce dernier puis de cliquer sur le bouton "Éditer ce workflow". TinyCE v2 dispose d'un éditeur permettant de modifier les documents et de les sauvegarder;

    5. Synchroniser: après l'édition de sa réplique partielle, le co-auteur peut déclencher un processus de synchronisation en cliquant sur le bouton "Synchroniser". Les autres participants à ce workflow seront alors notifiés et invités à envoyer leurs répliques pour compléter le processus de synchronisation. Une fois que toutes les répliques parviennent au serveur de synchronisation, TinyCE v2 réalise la fusion consensuelle et propose, en mode interactif, le choix du consensus lorsqu'il y en a plusieurs. Le document résultant est redistribué pour la suite de l'édition.

    Les captures d'écran suivantes (page 55), illustrent la mise en oeuvre du workflow d'édition présenté au chapitre 3 (sect. ??), sous TinyCE v2 :

    4.4. Synthèse

    Nous avons présenté, dans ce chapitre, un prototype d'éditeur coopératif asynchrone dénommé TinyCE v2. Ce prototype a servi à réaliser nos expérimentations; mais l'objectif de sa conception est bien plus grand. C'est d'ailleurs ce qui explique tous nos choix (méthodologie et outils). En effet, comme pour le logiciel TinyCE [TT10], nous avons choisi de développer TinyCE v2 au moyen de deux langages, exploitant ainsi le meilleur compromis entre ces derniers pour construire une application possédant les qualités attendues et définies par le génie logiciel. Le langage Java nous a principalement servi dans la construction de l'IHM (Interface Homme Machine) et le langage Haskell nous a servi dans le développement d'une grande partie du module métier de TinyCE v2. L'extension des fonctionnalités de TinyCE v2 est actuellement en cours; le but étant celui de fournir un réel éditeur coopératif et un environnement de conception et d'implantation des workflows basés sur l'édition coopérative des documents structurés.

    4.4. Synthèse 55

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    FIGURE 4.3 - Utilisation de TinyCE v2 en mode serveur (poste 1) : création du workflow ExempleChapitre3 avec 3 acteurs (Maxim10 (propriétaire ayant une vue globale), Auteur1 (associé à la vue V1 = {A,B}) et Auteur2 (associé à la vue V2 = {A,C})).

    FIGURE 4.4 - Utilisation de TinyCE v2 par le co-auteur Auteur1 : authentification et connexion au workflow ExempleChapitre3.

    4.4. Synthèse 56

    FIGURE 4.5 - Modèle local et réplique partielle obtenus par le co-auteurAuteur1, à partir du modèle et du document initial du workflow ExempleChapitre3.

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    FIGURE 4.6 - Édition de sa réplique partielle par Auteur1, conformément au modèle local reçu.

    4.4. Synthèse 57

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    FIGURE 4.7 - Consensus obtenu après synchronisation des mises à jour apportées sur leurs répliques partielles respectives, par les co-auteurs Auteur1 et Auteur2.

    58

    Conclusion générale

    Sommaire

    La problématique étudiée et les choix méthodologiques 58

    Analyse critique des résultats obtenus 59

    Quelques perspectives 60

    Le bilan que nous faisons de notre travail est organisé comme suit : tout d'abord, nous rappelons la problématique étudiée et les choix méthodologiques opérés dans le développement de nos solutions. Ensuite, nous indiquons les résultats obtenus et les limites de ceux-ci avant de proposer un ensemble de pistes d'extension de ce travail.

    La problématique étudiée et les choix méthodologiques

    Nous avons étudié le problème de la réconciliation des répliques partielles d'un document structuré soumis à un processus d'édition coopérative asynchrone. En effet, dans un tel processus basé sur les concepts de 'vues' [BTT08, BTT07, TT09], chaque co-auteur (site d'édition) est associé à une'vue'; des répliques partielles, obtenues par projection du document global suivant les différentes vues, sont distribuées aux différents co-auteurs; chaque co-auteur édite donc sa réplique partielle conformément à un modèle local. Les répliques partielles mises à jour sont ensuite synchronisées pour fournir un document global mis à jour. Il peut arriver que plusieurs co-auteurs, ayant tous accès à une partie précise du document, l'éditent de manière concurrente; ce qui pourrait entraîner des conflits lors de la synchronisation des répliques partielles mises à jour. Il faut donc proposer un algorithme de synchronisation capable de détecter les conflits et d'y remédier (en annulant les actions d'édition les engendrant par exemple).

    Nous avons considéré les mêmes hypothèses et opéré les mêmes choix méthodologiques que ceux opérés dans [BTT08, BTT07, TT09], pour pouvoir apporter une solution (basée sur l'algorithme de fusion proposé dans ces travaux) au problème de la réconciliation des répliques partielles d'un document structuré. Ces hypothèses ont été principalement: l'édition positive et la séparation complète entre la structure logique du document et ses présentations concrètes; et les choix méthodologiques ont été : la modélisation des documents comme des arbres de syntaxe abstraite pour une grammaire algébrique, la considération d'une vue comme un sous-ensemble de symboles grammaticaux et l'utilisa-tion du code Haskell pour l'écriture de nos algorithmes. Ces considérations nous ont mené

    Analyse critique des résultats obtenus 59

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    à des solutions algorithmiques là où on ne pouvait espérer obtenir de solution dans le cas général 10.

    Analyse critique des résultats obtenus

    Sachant que nous avons modélisé les documents en cours d'édition sous forme d'arbres contenant des bourgeons, et que nous avons considéré qu'une réplique partielle (forêt) d'un document t étiqueté par des symboles grammaticaux S est obtenue par projection (ðV ) de t suivant une vue V E S (sous-ensemble de symboles grammaticaux), à cette étape du travail les résultats qu'on a pu obtenir sont les suivants:

    Réconciliation des mises à jour des répliques partielles

    Au problème de la réconciliation des vues partielles d'un document structuré qui

    s'énonce comme suit : étant donné k vues (Vi)1<i<k et k répliques partielles (tma j

    Vi )1<i<k,

    fusionner consensuellement la famille (tma j

    Vi )1<i<k consiste à rechercher les plus grands

    documents tma j

    S ? G satisfaisant:

    / ~
    Vi E 1,...,n ?ti ? G, ti = tma j

    S , ðVi(ti) < tma j

    Vi

    , nous avons proposé une solution. En effet, nous avons proposé un algorithme construisant un automate d'arbre qui permet de générer de tels documents.

    TinyCE v2

    Nous avons remodelé le projet TinyCE [TT10] pour fournir un autre prototype d'édi-teur coopératif désynchronisé tout aussi embryonnaire mais qui intègre la gestion des conflits; bien plus, notre prototype peut être autant la base du développement d'une plateforme expérimentale de conception et de simulation d'applications de travail coopératif basées sur l'échange de documents structurés, que la base d'un réel éditeur coopératif (pair à pair ou non) de tels documents.

    Une communication liée à ce travail

    Le travail contenu dans ce mémoire a donné lieu à une communication co-rédigée par TCHOUPÉ TCHENDJI MAURICE et nous (ZEKENG NDADJI MILLIAM MAXIME). Ladite communication est intitulée"Réconciliation par consensus des mises à jour des répliques partielles d'un document structuré", elle comporte treize pages et sera (au moment où nous rédigeons ceci) présentée lors de la treizième édition du Colloque Africain sur la Recherche en Informatique (CARI'2016); le colloque se tiendra à Tunis (Tunisie), du 11 au 14 octobre 2016.

    Quelques critiques relatives, à la fois, à la preuve formelle des algorithmes proposés et au modèle grammatical choisit, peuvent être portées à ce travail:

    Pas de preuves mathématiques de nos algorithmes

    Bien que les algorithmes proposés aient été testé sur des exemples significatifs avec des résultats positifs, la preuve de leur exactitude reste à établir. Cette preuve pourra

    10. Pour rappel, les études portant sur la réconciliation des versions d'un document reposent sur des heuristiques [Men02].

    Quelques perspectives 60

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    certainement être établie; car nos algorithmes reposent sur des objets mathématiques (non inventés dans ce travail) dont les propriétés mathématiques ont déjà été démontrées dans d'autres travaux.

    Grammaires généralisées

    Dans des documents XML il est usuel de manipuler des noeuds ayant un nombre non borné de successeurs; par exemple, pour représenter une liste, en général non ordonnée, d'éléments d'une même catégorie : employés d'une entreprise, livres d'une bibliothèque, hôtels d'un système de réservation... Il faudrait de ce point de vue utiliser des grammaires algébriques généralisées dans lesquelles les parties droites des productions sont des expressions régulières : ce que nous n'avons pas fait. Toutefois, une piste d'utilisation de telles grammaires, pouvant s'adapter à notre cas, est donnée dans [TT09]; et maintenant que nous avons une meilleure compréhension du sujet, il nous sera plus aisé de le faire.

    Implémentation du système coopératif

    Les travaux que nous menons doivent pouvoir nous mener à des outils facilitant la conception des systèmes coopératifs basés sur l'édition des documents structurés. Nous en sommes encore bien loin. Bien que notre prototype soit l'ébauche d'une telle plateforme, nous l'utilisons pour démontrer les algorithmes introduits dans ce travail. Néanmoins, avec les différentes approches considérées (gestion des conflits, fusion en pair à pair...) on peut espérer pouvoir bientôt lui donner l'orientation qui est à son origine.

    Quelques perspectives

    Ce travail porte bien son qualificatif de mémoire vu que, bien qu'il présente quelques résultats, il n'est que l'ébauche d'un ensemble de travaux bien plus grands et bien plus consistants, qui pourraient faire l'objet d'études dans un cadre bien plus important (une thèse de doctorat par exemple). Nous listons ici, quelques uns de ces possibles travaux:

    Extension aux grammaires généralisées

    Étendre le travail aux grammaires algébriques généralisées pour prendre en compte les DTD qu'on rencontre usuellement dans la pratique.

    Preuves mathématiques et évaluation

    Présenter les preuves mathématiques de la validité des algorithmes proposés ainsi qu'une étude de leur complexité.

    TinyCE v2 sous forme de plug-in

    On pourrait, outre un logiciel autonome, construire une version de TinyCE v2 sous forme de plug-in (extension) pour des IDE (Integrated Development Environment) tels que Eclipse 11 ou NetBeans 12, permettant ainsi l'édition coopérative efficace des documents structurés.

    11. Eclipse est disponible à l'adresse http://www.eclipse.org

    12. NetBeans est disponible à l'adresse http://www.netbeans.org

    61

    Bibliographie

    [Abi97] S. Abiteboul. Querying semistructured data. In proceedings of the Interna-

    tional Conference on Database Theory, pages 1-18, January 1997.

    [Ask94] U. Asklund. Identifying conflicts during structural merge. In proceedings of

    Nordic Workshop on Programming Environment Research (NWPER'94), Nordic Workshop on Programming Environment Research, Lund, Sweden, pages 231-242, June 1994.

    [Bon98] Stéphane Bonhomme. Transformation de documents structurés, une combi-

    naison des approches explicite et automatique. PhD thesis, Université Joseph Fourier - Grenoble I, Décembre 1998.

    [BPM] Business Process Modeling Notation (BPMN) 2.0 : (OMG 2011) 538 p. Dis-

    ponible à l'adresse http://www.omg.org/spec/BPMN/2.0.

    [BPSM+06] Tim Bray, Jean Paoli, C. M. Sperberg-McQueen, Eve Maler, François Yer-geau, and John Cowan. W3C recommendation : Extensible markup language (xml) 1.1 (second edition), 2006. http://www.w3.org/TR/2006/ REC-xml11-20060816/.

    [BR04] Timo Böhme and Erhard Rahm. Supporting Efficient Streaming and Inser-

    tion of XML Data in RDBMS. In proceedings International Workshop Data Integration over the Web (DIWeb), pages 70-81, 2004.

    [BTT07] Eric Badouel and Maurice T. Tchoupé. Projection et cohérence de vues dans

    les grammaires algébriques. Electronic Journal of ARIMA (African Revue in Informatics and Mathematics Applied), 8 :18-48, 2007.

    [BTT08] Eric Badouel and Maurice T. Tchoupé. Merging hierarchically structured

    documents in workflow systems. In proceedings of the Ninth Workshop on Coalgebraic Methods in Computer Science (CMCS 2008), Budapest. Electronic Notes in Theoretical Computer Science, 203(5) :3-24, 2008.

    [CBBG07] Mohamed Amine Chaâbane, Lotfi Bouzguenda, Rafik Bouaziz, and Faiez

    Gargouri. Spécification des processus workflows évolutifs versionnés. Sche-dae, 2007. prépublication numéro 11, (fascicule numéro 2, p. 21-29).

    [CDG+08] H. Comon, M. Dauchet, R. Gilleron, D. Lugiez, F. Jacquemard, C. Löding,

    S. Tison, and M. Tommasi. Tree Automata Techniques and Applications (TATA). Draft, Available at http://www.grappa.univ-lille3.fr/tata/, November 2008.

    [CG08] V. Curcin and M. Ghanem. Scientific workflow systems - can one size fit

    all? In proceedings of the 2008 IEEE, CIBEC'08, 2008.

    4.4. Synthèse 62

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    [COL] Collaborative Design Activity. http://www.khronos.org/collada/.

    [CSGM] Chawathe, Sudarshan, and Hector Garcia-Molina. Meaningful change de-

    tection in structured data. ACM SIGMOD International Conference on Management of Data, ACM Press, pages 26-37.

    [CSR+] Chawathe, Sudarshan, Anand Rajaraman, Hector Garcia-Molina, and Jen-

    nifer Widom. Change detection in hierarchical structured information. ACM SIGMOD International Conference on Management of Data, ACM Press, pages 493-504.

    [DG02] Schahram Dustdar and Harald Gall. Towards a Software Architecture

    for Distributed and Mobile Collaborative Systems. In proceedings of the 26 th Annual International Computer Software and Applications Conference (COMPSAC'02 : IEEE Computer Society), 2002.

    [DOC15] Doc (informatique), Juillet 2015. Disponible à https://fr.wikipedia.

    org/wiki/Doc_(informatique). Visité le 15 Janvier 2016.

    [Fea89] Martin S. Feather. Detecting Interference when Merging Specification Evo-

    lutions. In Proceedings Fifth International Workshop Software Specification and Design, pages 169-176, 1989.

    [GHC] The Glasgow Haskell Compiler: GHC. Available at http://www.haskell.

    org/ghc/.

    [GHS95] Diimitrios Georgakopoulos, Mark Hornick, and Amit Sheth. An Overview of

    Workflow Management: From Process Modeling to Workflow Automation Infrastructure. Distributed and Parallel Databases, 3 :119-153, 1995.

    [Gir14] Suzanne Girard. Coopération et collaboration au travail, quelle est la

    différence? Formation, Août 2014. disponible à l'adresse http:// conseilsrhcoaching.com/cooperer-et-collaborer-article/.

    [Gru94] Jonathan Grudin. CSCW : History and Focus. IEEE Computer, 27(5) :19-26,

    1994.

    [Has] Haskell : A purely functional language. http://www.haskell.org/.

    [Heu03] Jean Heutte. Apprentissage collaboratif : vers l'intelligence collective...,

    Septembre 2003. Bloc notes de Jean Heutte..., disponible à l'adresse http: // jean.heutte.free.fr/spip.php?article55.

    [HPHF99] Paul Hudak, John Peterson, and Joseph H. Fasel. A gentle introduction to

    haskell 98, October 1999.

    [IEE] Institute of Electrical and Electronics Engineers. http://www.ieee.org/.

    [Imi06] Abdessamad Imine. Conception Formelle d'algorithmes de Réplication Opti-

    miste Vers l'édition Collaborative dans les Réseaux Pair-à-Pair. PhD thesis, Université Henri Poincaré - Nancy 1, Décembre 2006.

    [INT] Introduction au BPMN 2.0. Disponible à l'adresse http:

    // introductionbpmn2.0.voila.net/co/IntroductionauBPMN2_0.html visitée le 14 Mars 2015.

    4.4. Synthèse 63

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    [ISO] International Organization for Standardization. http://www.iso.org/.

    [JHE03] Andriessen J. H. E. Working with Groupware. Understanding and Evalua-

    ting Collaboration Technology. Springer, 2003.

    [Joh88] R. Johansen. Groupware : Computer support for business teams. New York:

    The Free Press, 1988.

    [KAA93] Extase K. A. Akpotsui. Transformation de types dans les systèmes d'édition de

    documents structurés. PhD thesis, Institut National Polytechnique de Grenoble - INPG, Octobre 1993.

    [LF02] Robin La Fontaine. Merging xml files : A new approach providing intelligent

    merge of xml data sets. In proceedings of XML Europe, Berlin, Germany, 2002.

    [Lin04] Tancred Lindholm. A three-way merge for xml documents. In proceedings of

    the 2004 ACM Symposium on Document Engineering, pages 1-10, October 2004.

    [LMLR08] Yuan Lin, Isabelle Mougenot, and Thérèse Libourel Rouge. Un nouveau

    langage de workflow pour les sciences expérimentales. INFORSID'08 : Atelier ERTSI Evolution, Réutilisation et Traçabilité des Systèmes d'Information, Fontainebleau, France, pages 1-15, May 2008.

    [Man01] Gerald W. Manger. A generic algorithm for merging sgml/xml instances. In

    proceedings of XML Europe, Berlin, Germany, 2001.

    [MD94] Jonathan P. Munson and Prasun Dewan. A Flexible Object Merging Fra-

    mework. In Proceedings ACM Conference Computer Supported Collaborative Work, pages 231-241, 1994.

    [Men02] Tom Mens. A state-of-the-art survey on software merging. IEEE Transactions

    on Software Engineering, 28(5) :449-462, 2002.

    [MGa08] Danièle Morvan, Françoise Gérardin, and al. Le Robert de poche. La société

    Dictionnaires Le Robert, 2008.

    [MPvdA12] Wil M. P. van der Aalst. Business Process Management : A Comprehensive Survey. ISRN Software Engineering (Hindawi Publishing Corporation), 2013, September 2012.

    [Pan99] Theodore (Ted) Panitz. Collaborative versus cooperative learning : A com-

    parison of the two concepts which will help us understand the underlying nature of interactive learning. Educational Resources Information Center (ERIC), December 1999. 13p.

    [PMG+07] V.M.R. Penichet, I. Marin, J.A. Gallud, M.D. Lozano, and R. Tesoriero. A

    Classification Method for CSCW Systems. Electronic Notes in Theoretical Computer Science, 168 :237-247, 2007.

    [Sar05] Anita Sarma. A survey of collaborative tools in software development. Tech-

    nical report, Institute for Software Research; Donald Bren School of Information and Computer Sciences; University of California, Irvine, March 2005.

    4.4. Synthèse 64

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    [SB92] Kjeld Schmidt and Liam Bannon. Taking CSCW seriously supporting articu-

    lation work. Kluwer Academic Publishers, Computer Supported Cooperative Work (CSCW), 1 :7-40, July 1992.

    [SLMD96] Patrick Steyaert, Carine Lucas, Kim Mens, and Theo D'Hondt. Reuse

    Contracts : Managing the Evolution of Reusable Assets. In Proceedings OOPSLA'96 ACM SIGPLAN N otice, volume 31, pages 268-286, 1996.

    [SS05] Yasushi Saito and Marc Shapiro. Optimistic replication. ACM Computing

    Surveys, 5(3) :1-44, 2005.

    [TT9] Maurice T. Tchoupé. Une approche grammaticale pour la fusion des réplicats
    partiels d'un document structuré: application à l'édition coopérative asynchrone. Software Engineering.
    PhD thesis, Université de Rennes 1 (France), Université de Yaoundé 1 (Cameroun), Août 2009.

    [TT10] Maurice Tchoupé T. Fertilisation croisée d'un langage fonctionnel et d'un
    langage objet : application à la mise en oeuvre d'un prototype d'éditeur coopératif asynchrone. CARI 2010 - YAMOUSSOUKRO, pages 541-549, 2010.

    [TTTA12] Maurice T. Tchoupé and Marcellin T. Atemkeng. Un modèle de documents

    stable par projections pour la communication dans les systèmes workflow hiérarchiques : Application à l'édition coopérative asynchrone. ARIMA, 1, 2012.

    [TTTAD14] Maurice T. Tchoupé, Marcellin T. Atemkeng, and Rodrigue Djeumen. Un modèle de documents stable par projections pour l'édition coopérative asynchrone. CARI 2014 Proceedings, 1 :325-332, 2014.

    [W3C] The World Wide Web Consortium. http://www.w3.org/.

    [WfM] The Workflow Management Coalition. Disponible à l'adresse http://www.

    wfmc.org/standards/docs/Glossary_French.PDF.

    [WK97] Edwards W. Keith. Flexible Conflict Detection and Management In Collabo-

    rative Applications. In proceedings Symposium User Interface Software and Technology, 1997.

    [YS00] Jeonghee Yi and Neel Sundaresan. A classifier for semi-structured docu-

    ments. IBM Almaden Research Center, 2000.

    65

    AnnexeA

    Un autre exemple complet de fusion

    consensuelle

    Dans cette annexe, nous illustrons notre algorithme de réconciliation (chap. 3 sect. 3.2) sur le workflow d'édition coopérative présenté comme exemple dans le chapitre 2 (figure 2.5 page 27). Pour rappel le document t conforme à la grammaire Gexpl est projeté suivant les vues V1 = {A,B} et V2 = {A,C} pour engendrer les forêts (répliques partielles) tv1 et tv2. Ces répliques partielles sont éditées respectivement sur les sites 1 et 2 ; le coauteur 1 (resp. le co-auteur 2) ne peut éditer que les bourgeons de type A (resp. C) (c'est à dire que V (1)

    edit = {A} et Vedit(2) = {C}) ; les documents mis à jour sont respectivement tma j

    v1 et

    tma j

    v2 . Nous allons donc fusionner tma j

    v1 et tma j

    v2 grâce à notre algorithme. Le but recherché ici est celui de montrer que notre algorithme prend en compte les documents non clos (tma j

    v2 )

    et aussi qu'il peut s'appliquer lorsque la fusion n'engendre pas de conflits.

    Les schémas des règles de transition

    Rappelons que les schémas des transitions (complétés pour prendre en compte les documents non clos) de l'automate permettant de représenter les expansions des répliques partielles suivant la vue V1 = {A,B} lorsqu'on associe les symboles de Dyck '(' et ')' (resp. '[' et ']') au symbole visible A (resp. B) et qu'on associe les symboles '(W' et ')W' (resp. '[W' et ']W') au bourgeon AW (resp. BW) de type A (resp. B), sont les suivants :

    hA,w1i -? (P1,[hC,ui,hB,vi]) si w1 = u[v]

    hA,w2i -? (P1,[hC,ui,hB,w11i]) si w2 = uw11 avec w11 = [W]W

    hA,w3i -? (P2,[]) si w3 = E

    hA,w4i -? (AW,[]) si w4 = (W )W

    hB,w5i -? (P3,[hC,ui,hA,vi]) si w5 = u(v)

    hB,w6i -? (P3,[hC,ui,hA,w4i]) si w6 = uw4

    hB,w7i -? (P4,[hB,ui,hB,vi]) si w7 = [u][v]

    hB,w8i -? (P4,[hB,w11i,hB,vi]) si w8 = w11[v]

    hB,w9i -? (P4,[hB,ui,hB,w11i]) si w9 = [u]w11

    hB,w10i -? (P4,[hB,w11i,hB,w11i]) si w10 = w11w11

    hB,w11i -? (BW,[]) si w11 = [W]W

    hC,w12i -? (P5,[hA,ui,hC,vi]) si w12 = (u)v

    hC,w13i -? (P5,[hA,w4i,hC,vi]) si w13 = w4v

    hC,w14i -? (P6,[hC,ui,hC,vi]) si w14 = uv =6 E

    hC,w15i -? (CW,[]) si w15 = E

    Les automates 91(1) et 91(2) 66

    De même, en associant au symbole grammatical C (resp. A) les symboles de Dyck '[' et ']' (resp. '(' et ')'), en associant aussi au bourgeon CW (resp. AW) les symboles de Dyck '[W' et ']W' (resp. '(W' et ')W'), les schémas des transitions (complets) des automates associés aux répliques partielles suivant la vue V2 = {A,C} sont les suivants :

    (A,w1) -+ (P1,[(C,u),(B,v)]) si w1 = [u]v

    (A,w2) -+ (P1,[(C,w20),(B,v)]) si w2 = w20v avec w20 = [W ]W

    (A,w3) -+ (P2,[]) si w3 = E

    (A,w4) -+ (AW,[]) si w4 = (W )W

    (B,w5) -+ (P3,[(C,u),(A,v)]) si w5 = [u](v)

    (B,w6) -+ (P3,[(C,w20),(A,v)]) si w6 = w20(v)

    (B,w7) -+ (P3,[(C,u),(A,w4)]) si w7 = [u]w4

    (B,w8) -+ (P3,[(C,w20),(A,w4)]) si w8 = w20w4

    (B,w9) -+ (P4,[(B,u),(B,v)]) si w9 = uv =6E

    (B,w10) -+ (BW,[]) si w10 = E

    (C,w11) -+ (P5,[(A,u),(C,v)]) si w11 = (u)[v]

    (C,w12) -+ (P5,[(A,w4),(C,v)]) si w12 = w4[v]

    (C,w13) -+ (P5,[(A,u),(C,w20)]) si w13 = (u)w20

    (C,w14) -+ (P5,[(A,w4),(C,w20)]) si w14 = w4w20

    (C,w15) -+ (P6,[(C,u),(C,v)]) si w15 = [u][v]

    (C,w16) -+ (P6,[(C,w20),(C,v)]) si w16 = w20[v]

    (C,w17) -+ (P6,[(C,u),(C,w20)]) si w17 = [u]w20

    (C,w18) -+ (P6,[(C,w20),(C,w20)]) si w18 = w20w20

    (C,w19) -+ (P7,[]) si w19 = E

    (C,w20) -+ (CW,[]) si w20 = [W]W

    Les automates 91(1) et 91(2)

    Construction de l'automate 91(1) associé à tma j

    v1

    La trace visible des documents de l'expansion de tma j

    v1 est ((()[()])[()]); A étant l'axiome de la grammaire et aussi un symbole visible (appartenant à la vue), l'état initial de l'auto-mate 91(1) est q10 = (A,(()[()])[()]). En ne considérant que les états accessibles à partir de q10 et en appliquant les schémas de règles présentés précédemment, nous obtenons l'automate d'arbre suivant pour la réplique tma j

    q10

    q11
    q11

    q12

    q13

    q14

    q15

    q16
    q16

    -+ -+ -+ -+ -+ -+ -+ -+ -+

    (P1,[q11,q12]) (P5,[q13,q14]) (P6,[q14,q11]) (P3,[q14,q15]) (P1,[q16,q12]) (CW,[]) (P2,[]) (P5,[q15,q14]) (P6,[q14,q16])

    | (P6,[q11,q14])

    | (P6,[q1 6,q14])

    avec
    avec

    avec
    avec

    v1 :

    q11 = (C,(()[()])) et q12 = (B,())

    q13 = (A,()[()]) et q14 = (C,E)

    q1 5 = (A,E) q16 = (C,())

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    L'état q14 est le seul état de sortie de cet automate.

    L'automate consensuel Asc 67

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Construction de l'automate A(2) associé à tmaj

    v2

    Ayant associé au symbole grammatical C (resp. A) les symboles de Dyck '[' et ']' (resp. '(' et ')'), la linéarisation de la réplique partielle tma j

    v2 (fig. 2.5) donne le mot de

    Dyck ([(ù )ù[]][[][]]()). L'automate A(2) associé à cette réplique a donc pour état initial q20 = hA,[(ù)ù[]][[][]]()i et pour transitions :

    q20

    q21

    q22
    q22

    q23

    q24

    q25

    q26

    q27

    q28

    q29

    -?

    -?

    -?

    -?

    -? -? -? -? -? -? -?

    (P1,[q2 1,q22])

    (P5,[q23,q24]) (P3,[q25,q26]) (P4,[q27,q22]) (P4,[q22,q27]) (Aù,[]) (P7,[]) (P6,[q24,q24]) (P2,[]) (Bù,[]) (P4,[q27,q28]) | (P4,[q27,q29]) |

    | (P4,[q28,q29])

    (P4,[q28,q27]) (P4,[q29,q27])

    |

    avec

    avec avec avec

    q21 = hC,(ù)ù[]i et

    q22 = hB,[[][]]()i

    q23 = hA,(ù)ùi et q24 = hC,åi q25 = hC,[][]i et q26 = hA,åi

    q27 = hB,åi, q28 = hB,[[][]]i et
    q29 = hB,()i

    Les états q23 et q27 sont les seuls états de sortie de cet automate.

    L'automate consensuel Asc

    En appliquant notre algorithme de calcul du produit synchrone de plusieurs automates d'arbre aux automates A(1) et A(2), on obtient l'automate du consensus A(sc) = A(1)?Ù A(2) ayant pour état initial q0 = (q10,q20) et dont les transitions sont les suivantes :

    q0

    q1

    q2

    q3

    q4

    q5

    q6

    q7

    q7

    q8

    q9

    q10

    q11

    -? -? -? -?

    -? -? -? -?

    -? -? -? -? -?

    (P1,[q1,q2]) (P5,[q3,q4]) (P3,[q5,q6]) (P1,[q7,q8])

    (P7,[]) (P6,[q9,q9]) (P2,[]) (P5,[q10,q11])

    (P6,[q11,q7]) | (P3,[q11,q10]) (P7,[]) (P2,[]) (Cù,[])

    (P6,[q7,q11])

    avec avec avec avec

    avec
    avec

    q0 = (q1 0,q2 0)

    q1 = (q1 1,q21) et q2 = (q1 2,q22) q3 = (q13,q23) et q4 = (q14,q24) q5 = (q14,q25) et q6 = (q1 5,q26)

    q7 = (q16,qs1), qs1 =
    hOpen C,[]i et q8 = (q1 2,qs2), qs2 = hOpen B,[]i

    q9 = (qs1,q24)

    q10 = (q15,qs3), qs3 =

    hOpen A,[]i et q11 = (q14,qs1)

    l'état q11 de A(sc) = A(1) A(2) est un état de sortie ; en effet, les états qui le composent (q14 et qs1) sont tous des états de sortie. L'absence d'états de sortie dont les états composites

    L'automate consensuel Asc 68

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    soient en conflit est une preuve de l'absence des conflits dans le workflow étudié ici. Notre générateur fournit un seul arbre (figure A.1) à partir de l'automate A(sc).

    FIGURE A.1 - AST et arbre de dérivation généré à partir de l'automate consensuel A(sc).

    69

    AnnexeB

    Quelques fonctions Haskell pour le

    calcul des consensus

    Dans cette annexe, nous décrivons quelques fonctions et types Haskell permettant de représenter des documents structurés et d'effectuer la fusion consensuelle de ces derniers. Afin de mieux appréhender les notions présentées ici, une connaissance du langage Haskell (que le lecteur ne trouvera pas ici) est requise. Nous sommes persuadés que les références suivantes seront d'excellents compagnons et/ou guides pour le lecteur désireux de découvrir et/ou d'en apprendre plus sur l'univers de la programmation fonctionnelle avec Haskell: [Has, GHC, HPHF99].

    Représentation des grammaires et des vues

    Une grammaire est constituée d'un ensemble de symboles et d'un ensemble de productions. Nous représentons une grammaire par le type Gram suivant:

    1 data Gram prod symb = Gram {prods::[prod],

    2 symbols::[symb],

    3 lhs::prod -> symb,

    4 rhs::prod -> [symb]}

    La fonction lhs (resp. rhs) prend en argument une grammaire G et une production p de G puis retourne le symbole en partie gauche ( resp. la liste des symboles en partie droite) de p. À partir de ce type, on peut construire la grammaire Gexpl (chap 2 exemple 8) grâce au code Haskell suivant:

    1

    2

    3

    4

    data Prod = P1 | P2 | P3 | P4 | P5

    deriving (Eq, Show)

    data Symb = A | B | C deriving (Eq,

    | P6 |

    Show)

    P7 | Aomega

    |

    Bomega

    |

    Comega

    5

    gram :: Gram Prod Symb

     
     
     
     
     
     
     
     

    6

    gram = Gram lprod lsymb lhs_ rhs_

     
     
     
     
     
     
     
     

    7

    where

     
     
     
     
     
     
     
     

    8

    lprod = [P1, P2, P3, P4, P5,

    P6, P7]

     
     
     
     
     
     
     

    9

    lsymb = [A, B, C]

     
     
     
     
     
     
     
     

    10

    lhs_ p = case p of

     
     
     
     
     
     
     
     

    11

    P1 -> A; P2 -> A; P3 ->

    B; P4

    -> B; P5

    ->

    C;

    P6

    ->

    C;

    P7 -> C

    12

    rhs_ p = case p of

     
     
     
     
     
     
     
     

    13

    P1 -> [C, B]; P2 -> [];

    P3 ->

    [C, A];

    P4

    ->

    [B,

    B];

     
     

    14

    P5 -> [A, C]; P6 -> [C,

    C]; P7

    -> []

     
     
     
     
     
     

    Représentation des documents ou arbres 70

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Les productions Aomega, Bomega et Comega ont été introduites pour pouvoir désigner les bourgeons de types respectifs A, B et C.

    Comme dans [BTT08, TT09, BTT07], nous représentons une vue par un ensemble de prédicats sur les symboles de la grammaire. Ainsi, les vues V1 = {A,B} et V2 = {A,C}, définies sur la grammaire Gexpl, peuvent être déclarées de la manière suivante :

    1 viewAB :: Symb -> Bool

    2 viewAB symb = case symb of

    3 A->True

    4 B->True

    5 C -> False

    6

    7 viewAC :: Symb -> Bool

    8 viewAC symb = case symb of

    9 A->True

    10 B -> False

    11 C -> True

    Représentation des documents ou arbres

    Conformément à notre approche, un AST est soit un bourgeon (BUD) soit un noeud (NODE) étiqueté par une production et possédant plusieurs AST comme fils. Le type Haskell correspondant est le suivant:

    1 data AST a = BUD | NODE {node_label::a, unNODE::[AST a]} deriving Eq

    Dans la même lancée, un arbre de dérivation dont les étiquettes des noeuds sont de type a peut être représenté par le type Haskell suivant:

    1 data BTree a = BTree {value::a, sons::Maybe [BTree a]} deriving Eq

    Un arbre de dérivation est donc un noeud étiqueté par value possédant peut être (Maybe) des fils (sous-arbres) rangés dans une liste (sons); lorsqu'il en possède (sons est construite grâce au constructeur de données Just), il est un noeud clos. Dans le cas contraire (sons est construite plutôt grâce à Nothing), l'arbre est réduit à un bourgeon. Nous pouvons par exemple coder les états initiaux des automates (1) (replicatAB) et

    (2) (replicatAC), de l'exemple du chapitre 3 (sect. ??), grâce au code Haskell suivant:

    1 replicatAB = [BTree A (Just [BTree B (Just [BTree B (Just [BTree A (Just []),

    2 BTree A (Just [])]), BTree B (Just [BTree A (Just [])])])]),

    3 BTree B (Just [BTree A (Just [])])]

    4

    5 replicatAC = [BTree C (Just [BTree A (Just [BTree C (Just []),BTree C (Just []),

    6 BTree A (Just []), BTree C (Just []), BTree A (Just [])]), BTree C

    7 (Just [])]), BTree C (Just [BTree C (Just []), BTree C (Just [])]),

    8 BTree A (Just [])]

    La fonction projection dont le code est le suivant, permet de projeter un document quelconque suivant une vue donnée. Elle retourne donc une forêt (liste d'arbres) représentant la réplique partielle du dit document pour la vue considérée.

    1 projection :: (symb -> Bool) -> BTree symb -> [BTree symb]

    2 projection view t@(BTree a Nothing) = if view a then [t] else []

    3 projection view t@(BTree a (Just xs)) = if view a then [BTree a (Just sons_)]

    Génération des documents 71

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    4 else sons_

    5 where

    6 sons_ = concat (map (projection view) xs)

    Calcul de l'automate associé à une vue

    Rappelons que, nous définissons un automate d'arbre à états de sortie par le type Automata suivant:

    1 data Automata p q = Auto {exit::q -> Bool, next::q -> [(p, [q])]}

    Le type générique p est le type des productions qui étiquettent les transitions et q est le type des états de l'automate.

    L'adaptation de la fonction gram2autoview [BTT08, TT09, BTT07] suivante, permet de construire un automate à états de sortie capable de reconnaître les documents globaux qui sont des expansions d'une réplique partielle suivant une vue donnée.

    1 gram2autoview :: Eq t => Gram a t -> (t -> a) -> (t -> Bool)

    2 -> Automata a (Tag t, [BTree t])

    3 gram2autoview gram symb2prod view = Auto exit next

    4 where

    5 exit (Open symb,[]) = True

    6 exit _ = False

    7

    8 next (Open symb,_) = [(symb2prod symb,[])]

    9 next (Close symb,ts) = [(p, zipWith trans (rhs gram p) tss) |

    10 p <- prods gram, symb == lhs gram p,

    11 tss <- match_ view (rhs gram p) ts]

    12

    13 trans symb (Close ts) = (Close symb, ts)

    14 trans symb (Open ts) = (Open symb, ts)

    15

    16 match_ :: (Eq symb)=> (symb -> Bool)->[symb]->[BTree symb]->[[Tag [BTree symb]]]

    17 match_ view [] ts = if null ts then [[]] else []

    18 match_ view (symb:symbs) ts = [(ts1:tss)| (ts1,ts2) <- matchone_ view symb ts,

    19 tss <- match_ view symbs ts2]

    20

    21 matchone_ :: (Eq symb) => (symb -> Bool) -> symb -> [BTree symb]

    22 -> [(Tag [BTree symb],[BTree symb])]

    23 matchone_ view symb ts =

    24 if view symb

    25 then if null ts then []

    26 else case (head ts) of

    27 (BTree symb' Nothing) -> if symb==symb'

    28 then [(Open [], tail ts)]

    29 else []

    30 (BTree symb' (Just ts')) -> if symb==symb'

    31 then [(Close ts', tail ts)]

    32 else []

    33 else [(Open [], ts)]++

    34 [(Close (take n ts),drop n ts) | n <- [1..(length ts)]]

    Génération des documents 72

    Mémoire - ZEKENG NDADJI Milliam Maxime LIFA

    Génération des documents

    Nous définissons notre générateur par la fonction Haskell suivante qui prend un automate A et un état q quelconque en paramètre et retourne la liste des AST les plus simples du langage accepté par A à partir de q :

    1 enum :: (Eq b) => Automata a b -> b -> [AST a]

    2 enum auto init = enum_ [ ] init

    3 where

    4 enum path state | elem state path = []

    5 | otherwise = (if((exit auto state) && (null (next auto state)))

    6 then [BUD]

    7 else []) ++ [NODE elet list_tree |

    8 (elet, states) <- next auto state,

    9 list_tree <- dist (map (enum_ (state : path)) states)]

    Le combinateur dist 1 fabrique un ensemble L2 de listes à partir d'un ensemble L1 de listes tel que chaque liste de L2 contient un élément de chaque liste de L1.

    Grâce à toutes ces fonctions, il est donc possible de calculer l'ensemble des préfixes maximums sans conflits les plus simples issus de la fusion de plusieurs (deux) répliques partielles. Dans cette optique, on peut se servir d'un code comme celui ci (ce code est valide pour l'exemple présenté dans le chapitre 3 (sect. ??)) :

    1 docconsensus = enum auto initstate where

    2 initstate = ((Close A, replicatAB2), (Close A, replicatA))

    3 autoview1 = gram2autoview gram symb2BudProd viewAB

    4 autoview2 = gram2autoview gram symb2BudProd viewAC

    5 auto = autoconsens symb2BudProd autoview1 autoview2

    Dans ce code, initstate est l'état initial à partir duquel la génération se fait. Il est, comme prévu, un vecteur composé des états initiaux des automates qui sont fusionnés. L'automate autoview1 (resp. autoview2) est l'automate associé à la réplique partielle suivant la vue viewAB (resp. viewAC). La fonction symb2BudProd permet de transformer un symbole en une production étiquetant un bourgeon de type ce symbole. Son code, pour cet exemple, est le suivant:

    1 symb2BudProd symb = case symb of

    2 A -> Aomega

    3 B -> Bomega

    4 C -> Comega

    L'automate auto est le produit consensuel de autoview1 et autoview2. Les documents consensuels les plus simples sont ainsi énumérés par la fonction enum et l'ensemble résultant est désigné par docconsensus.

    1. dist est défini par pattern matching comme suit:

    dist: : [[a]] ? [[a]]

    dist [ ] = [[ ]]

    dist (xs : xss) = [y : ys | y f- xs, ys f- dist xss]






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Il existe une chose plus puissante que toutes les armées du monde, c'est une idée dont l'heure est venue"   Victor Hugo