Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 20 sur 20
  1. #1
    Responsable Développement Web

    Avatar de Bovino
    Homme Profil pro Didier Mouronval
    Développeur Web
    Inscrit en
    juin 2008
    Messages
    21 255
    Détails du profil
    Informations personnelles :
    Nom : Homme Didier Mouronval
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2008
    Messages : 21 255
    Points : 83 109
    Points
    83 109

    Par défaut Outils sur les différences entre deux fichiers XML

    je recherche actuellement des outils permettant de générer un fichier "delta" qui référencient toutes les différences entre 2 fichiers XML.

    J'ai trouvé plusieurs outils, propriétaire ou Open Source, mais il est difficile de se faire un rapide aperçu de leurs possibilités...

    Peut-etre que certains d'entre vous ont déjà utilisé ce type d'outil et peuvent m'éclairer à ce sujet.

    Merci

  2. #2
    Expert Confirmé Sénior
    Avatar de GrandFather
    Inscrit en
    mai 2004
    Messages
    4 566
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : mai 2004
    Messages : 4 566
    Points : 6 509
    Points
    6 509

    Par défaut

    Bonjour,

    c'est un domaine assez ardu, faisant encore l'objet de recherches. Ce document te fait un panel (hélas en anglais) des algorithmes disponibles et de certaines implémentations : http://www.deltaxml.com/pdf/is2004.pdf.

    J'ai testé personnellement VMTools, qui semble fonctionner correctement, mais qui ne convient pas à toutes les applications, notamment la comparaison de gros fichiers (> 1 Mo).
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  3. #3
    Membre du Club
    Inscrit en
    février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 88
    Points : 53
    Points
    53

    Par défaut

    Effectivement ça semble assez ardu comme domaine, j'ai lu pas mal de doc provenant de thèses ou mémoires...

    merci pour le lien

    est-ce que quelqu'un utilise ou a testé DeltaXML ou Versim?

  4. #4
    Membre du Club
    Inscrit en
    février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 88
    Points : 53
    Points
    53

    Par défaut

    J'ai trouvé un outil Open Source JXyDiff qui est une version en java de XyDiff et qui après quelques ptits tests semble bien fonctionner, je laisse donc le lien pour ceux que ça intéresse :

    http://potiron.loria.fr/projects/jxydiff

    Cet outils prend en compte 7 opérations différentes :

    - suppression d'un noeud
    - ajout d'un noeud
    - mise à jour d'un noeud
    - déplacement d'un noeud
    - suppression d'un attribut
    - ajout d'un attribut
    - mise à jour d'un attribut

  5. #5
    Membre chevronné Avatar de luta
    Inscrit en
    novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : novembre 2003
    Messages : 1 038
    Points : 693
    Points
    693

    Par défaut

    une classe microsoft xmlDiff (en .NET) est dispo gratuitement sur le net...maintenant il faut l implémenter et personnelement je n ai strictement rien compris à la doc fournie

  6. #6
    Invité de passage
    Inscrit en
    avril 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 2
    Points : 2
    Points
    2

    Par défaut

    Des liens vers d autres outils sont disponibles à cette URL
    http://potiron.loria.fr/projects/jxydiff/related
    Afin de faire évoluer cette version de JXyDiff j aurai besoin que vous me laissiez vos commentaires sur JXyDiff sur le forum
    http://potiron.loria.fr/projects/jxydiff/forum
    et rapport de bugs sur
    http://potiron.loria.fr/projects/jxydiff/bugtracker

  7. #7
    Membre du Club
    Inscrit en
    février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 88
    Points : 53
    Points
    53

    Par défaut

    Citation Envoyé par tanix57
    Afin de faire évoluer cette version de JXyDiff j aurai besoin que vous me laissiez vos commentaires sur JXyDiff sur le forum
    http://potiron.loria.fr/projects/jxydiff/forum
    il n'est pas possible de laisser de message sur le forum, les droits d'accés sont insuffisants, même en se créant un compte, voici le message retourné:
    Insufficient permissions

    You have not the required [Forum: POST] permission at URI /projects/jxydiff/forum/8d2bc0c57f00000101a3fd86356ccd59



  8. #8
    Membre du Club
    Inscrit en
    février 2005
    Messages
    88
    Détails du profil
    Informations forums :
    Inscription : février 2005
    Messages : 88
    Points : 53
    Points
    53

    Par défaut

    Comme le forum de JXyDiff n'est pas accessible, je pose mes remarques sur cet outil ici, ça peut servir à d'autres :

    Parmi les différents outils de différenciation entre fichiers XML, c'est l'outil qui semble le plus intéressant de ceux que j'ai testés.

    DeltaXML semble également un outil très intéressant mais il a les inconvénients d'être propriétaire et son format de sortie (le "delta" qui représente les différences) ne correspondait pas vraiment à ce que je recherchais...

    Les autres outils que j'ai testé était largement moins intéressant pour les raisons suivantes :

    - pas intégrable dans une application (ce que je souhaite faire)
    - pas ou trop peu de documentation, de mises à jour, etc.
    - limitation sur la taille des fichiers
    - certains projets ont l'air à l'abandon

    Mon choix se porte donc sur JXyDiff car c'est celui qui semble le plus abouti par rapport aux autres (avec DeltaXML). Cependant quelques options pourraient être apportées afin d'améliorer cet excellent outil :

    - pouvoir spécifier si l'ordre des éléments enfants est important (gestion des "move" très couteuse, et donc très surperflu lorsque garder l'ordre des noeuds n'est pas nécessaire (ce qui est mon cas))

    - pouvoir ignorer les commentaires, les whitespaces, les namespaces, etc.

    Il ne me semble pas que ces options soient implémentées, tanix pourra peut-etre nous en dire plus...

  9. #9
    Expert Confirmé Sénior
    Avatar de GrandFather
    Inscrit en
    mai 2004
    Messages
    4 566
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : mai 2004
    Messages : 4 566
    Points : 6 509
    Points
    6 509

    Par défaut

    Le seul outil que j'ai trouvé apte à comparer dans des temps raisonnables de gros fichiers XML (> 7 Mo) complexes est XMLDiff de alphaWorks (IBM).

    Les seuls défauts que je lui ai trouvés :
    • Moins efficace en terme de détection des modifications (le delta n'est pas minimum)
    • Le delta n'est pas un format XML valide (mais est facilement retraitable pour l'être, avec des expressions régulières)
    • Pas de l'Open Source, licence d'utilisation restreinte
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  10. #10
    Expert Confirmé Sénior
    Avatar de GrandFather
    Inscrit en
    mai 2004
    Messages
    4 566
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : mai 2004
    Messages : 4 566
    Points : 6 509
    Points
    6 509

    Par défaut

    Citation Envoyé par GrandFather
    Les seuls défauts que je lui ai trouvés :
    J'en ajouterai un, très génant celui-là, la version console de l'outil a des bugs que n'a pas la version GUI...
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  11. #11
    Membre du Club
    Inscrit en
    août 2005
    Messages
    126
    Détails du profil
    Informations forums :
    Inscription : août 2005
    Messages : 126
    Points : 40
    Points
    40

    Par défaut

    Beyond compare 2
    Gère la comparaison, fusion manuelle de deux fichiers, quelque soit le format (je dis ca car je compare aussi bien des fichier vb6 que des xml avec).

  12. #12
    Invité de passage
    Inscrit en
    avril 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : avril 2006
    Messages : 2
    Points : 2
    Points
    2

    Par défaut JXyDiff

    En ce qui concerne les fonctionnalités éventuelles voici les remarques que j'aurai à faire:
    - Ignorer commentaire, whitespace, etc en fait l'application comporte son propre parser. Par conséquent il suffit de modifier le fichier de grammaire XML nommé xml.g de le recompiler et on a la possibilité d'ignorer par exemple les withespace ou autre chose. En fait ces propriétés sont gérés car on m avait demandé de traiter la grammaire compléte. Mais l'avantage d'avoir son propre parser dans cette version Java, et que l on peut imaginer par exemple une tout autre grammaire d'un autre langage et calculer également les différences. Finalement on pourrai l'étendre à d autres langage que le XML l important est la représentation arbrescente.

    - Effectivement l'opération MOVe peut être couteuse mais elle est très utile, dans la version C++, il y avait une optimisation pour pouvoir éviter certaines phases et de ce fait la rendre plus rapide. J avais repris cette optimisation puis finalement retirer. Mon avis est plutot que de choisir entre MOVE ou pas MOVE, il faudrait intégrer cette fonctionnalité pour optimiser l opération.

  13. #13
    GentooGeek
    Invité(e)

    Par défaut

    Si je puis me permettre mes deux sous de commentaires, je dirais que, pour moi, la solution du pauvre (avec des outils Open Source uniquement) serait de
    1. Formater les fichiers XML (pretty-print)
    2. Comparer avec diff en mode texte.
    Bien sûr cette méthode a quelques inconvénients, par exemple lorsqu'un noeud est inséré dans l'arbre de cette manière
    Code :
    1
    2
    3
    <root>
        <node1/>
    </root>
    Code :
    1
    2
    3
    4
    5
    <root>
        <node2>
            <node1/>
        </node2>
    </root>
    Avec un diff texte, les espaces supplémentaires de node1 feront augmenter la taille du fichier résultat. Mais diff a une option pour ignorer les différences dans le nombre d'espaces (option -b ou --ignore-space-changes). Car, après tout, XML c'est du texte.

    Bien sûr on n'a pas un diff optimisé pour XML mais c'est mieux que rien. De plus, s'il est possible de formater chaque ligne (pour les éléments de type texte par exemple) pour qu'elle ne dépasse pas un certain nombre de caractères (et ça, c'est possible avec les outils GNU), on peut aussi limiter la taille des diff, par exemple, en ce qui concerne les BLOB ou bien les blocs de texte long.

    Il faudra, bien entendu, pour qu'un fichier patch puisse être utilisé, travailler sur les versions formatées de fichiers XML, par sur leur version d'origine.

  14. #14
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut et .NET

    bon alors en gros on peut dire qu'il y en a 2 qui sont utilisable pour des gros fichiers (500Mo) : xmldiff du Framework .NET et DeltaXML (java)
    Jxydiff étant le produit d'une recherche universitaire et placé sur un site non entretenu

    xmldiff du framework .NET semble très intéressant , mais est-ce-que ça marche pour de gros volume ?

    DeltaXML vient de me répondre qu'ils faisait dans leur environnement 400Mo en 5 minutes,...

    qu'en pensez vous ?

    Comparaison de fichiers XML

    Microsoft .NET Framework XMLDiff class (http://msdn.microsoft.com/library/de...ml/xmldiff.asp)
    open Source
    Class développée en .NET (.NET Framework 1.1 )
    dernière mise à jour : 2002

    exemple d’utilisation :
    Code :
    1
    2
    3
    XmlDiff.Compare( XmlReader original, XmlReader compareWith,bool isFragment, XmlTextWriter diffOutput).
     
    XmlDiff.Options = XmlDiffOptions.IgnorePI |XmlDiffOptions.IgnoreChildOrder;

    Delta XML Core ( http://deltaxml.com )
    peut être intégré dans une application java
    ils sont réactifs
    tests sur de gros fichiers (400Mb = environ 5 minutes)
    http://www.deltaxml.com/dxml/library...#dsy68_metrics

    --------------------------------------------------------------------------------------------

    JXyDiff (http://potiron.loria.fr/projects/jxydiff)
    OpenSource / écrit en Java / parser XML intégré
    dernière mise à jour : 02/2006 (site peut réactif)
    exemple d’utilisation :
    Code :
    java -jar jxydiff.jar test1.xml test2.xml delta.xml


    XML Diff d’IBM (http://www.alphaworks.ibm.com/tech/xmldiffmerge)
    dernière mise à jour : 2001

    Python xmldiff (http://www.logilab.org/projects/xmldiff/)
    version 0.6.3 année : 2003

  15. #15
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut Microsoft xmldiff

    Et bien xmldiff de microsoft marche très bien !

    XML Notepad 2006 l'utilise pour comparer des fichiers xml
    (ici : http://www.microsoft.com/france/msdn...epad-2006.mspx)


    View compare XML files

    maintenant comment faire pour créer un fichier xml de 500Mo ?

  16. #16
    GentooGeek
    Invité(e)

    Par défaut

    Citation Envoyé par Philos15
    ...
    maintenant comment faire pour créer un fichier xml de 500Mo ?
    C'est une hérésie que de vouloir créer des fichiers XML de cette taille... Si c'est pour obtenir de tels volumes, XML est-il vraiment le choix le plus subtil?...

  17. #17
    Invité de passage
    Inscrit en
    octobre 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : octobre 2004
    Messages : 28
    Points : 2
    Points
    2

    Par défaut

    il s'agit de flux en mode batch transmis entre le front et le bck office d'une grande compagnie : des tonnes d'infos transitent tous les soirs et doivent être incorporées dans le Back

    Ils ont comme souvent deux environements , un de prob et un de pré prod pour vérifier que la modifications et évolutions de front ne font pas régresser le flux :

    il faut donc comparer chaque jour les flux qui arrivent en préprod de ceux arrivant en prod pour vérifier qu'il n'y a pas d'écart et donc ça implique la comparaison de fichiers xml très volumineux (il y a aussi des fichiers txt et csv,... )

    voilà,...

  18. #18
    GentooGeek
    Invité(e)

    Par défaut

    Disons que XML est approprié aux transferts de données entre deux plateformes et que XML est intéressant pour l'humain car il peut en lire le contenu. Etant donné des flux de cette taille, la lisibilité n'a plus d'intérêt - la relecture d'un tel volume prendrait... un temps considérable; de plus si cela se produit chaque soir...

    La lisibilité n'étant plus un critère de premier choix, tout se limite maintenant, bien que je ne connaisse pas les détails de cette mise en oeuvre, à comparer des volumes de données, qui pourraient tout aussi bien être compactés, d'où un trafic binaire (c-à-d réduit) plutôt que texte (volumineux).

  19. #19
    Nouveau Membre du Club
    Inscrit en
    janvier 2003
    Messages
    180
    Détails du profil
    Informations forums :
    Inscription : janvier 2003
    Messages : 180
    Points : 30
    Points
    30

    Par défaut erreur d'execution avec jxydiff

    Bonjour,
    j'essaye d'utiliser jxydiff pour comparer 2 de fichiers, et voici l'erreur que j'obtiens :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    E:\webvpn\jxydiff>java -jar jxydiff.jar Abonneobs.xml Abonneobs2.xml toto.xml
    Exception in thread "main" java.lang.UnsupportedClassVersionError: fr/loria/ecoo/so6/xml/xydiff/Main
     (Unsupported major.minor version 48.0)
            at java.lang.ClassLoader.defineClass0(Native Method)
            at java.lang.ClassLoader.defineClass(Unknown Source)
            at java.security.SecureClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.defineClass(Unknown Source)
            at java.net.URLClassLoader.access$100(Unknown Source)
            at java.net.URLClassLoader$1.run(Unknown Source)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClass(Unknown Source)
            at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    quelqu'un peut il m'aider ?
    merci d'avance !
    Pascale38

  20. #20
    Invité de passage
    Inscrit en
    décembre 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : décembre 2006
    Messages : 3
    Points : 3
    Points
    3

    Par défaut

    J'en ai fais un en Perl : Ligne de commande : ici

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •