Précédent   Forum du club des développeurs et IT Pro > Autres langages > XML/XSL et SOAP
XML/XSL et SOAP Forum d'entraide sur XML et SOAP. Avant de poster -> FAQ XML, Sources XML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/04/2006, 17h07   #1
Bovino
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 18 554
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 42
Localisation : France, Gironde (Aquitaine)

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

Informations forums :
Inscription : juin 2008
Messages : 18 554
Points : 66 529
Points : 66 529
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
Bovino est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2006, 17h20   #2
GrandFather
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 541
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : mai 2004
Messages : 4 541
Points : 6 432
Points : 6 432
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2006, 17h35   #3
pistache42
Membre du Club
 
Inscription : février 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 88
Points : 53
Points : 53
Envoyer un message via MSN à pistache42
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?
pistache42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/04/2006, 17h27   #4
pistache42
Membre du Club
 
Inscription : février 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 88
Points : 53
Points : 53
Envoyer un message via MSN à pistache42
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
pistache42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/04/2006, 18h24   #5
luta
Membre chevronné
 
Avatar de luta
 
Inscription : novembre 2003
Messages : 1 038
Détails du profil
Informations forums :
Inscription : novembre 2003
Messages : 1 038
Points : 693
Points : 693
Envoyer un message via MSN à luta
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
luta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/04/2006, 18h00   #6
tanix57
Invité de passage
 
Inscription : avril 2006
Messages : 2
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 2
Points : 2
Points : 2
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
tanix57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/04/2006, 09h25   #7
pistache42
Membre du Club
 
Inscription : février 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 88
Points : 53
Points : 53
Envoyer un message via MSN à pistache42
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


pistache42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2006, 17h44   #8
pistache42
Membre du Club
 
Inscription : février 2005
Messages : 88
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 88
Points : 53
Points : 53
Envoyer un message via MSN à pistache42
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...
pistache42 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2006, 17h57   #9
GrandFather
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 541
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : mai 2004
Messages : 4 541
Points : 6 432
Points : 6 432
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/04/2006, 11h21   #10
GrandFather
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 541
Détails du profil
Informations personnelles :
Âge : 43

Informations forums :
Inscription : mai 2004
Messages : 4 541
Points : 6 432
Points : 6 432
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
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2006, 14h40   #11
shaftJackson
Nouveau Membre du Club
 
Inscription : août 2005
Messages : 124
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 124
Points : 35
Points : 35
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).
shaftJackson est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2006, 22h10   #12
tanix57
Invité de passage
 
Inscription : 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.
tanix57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2006, 13h01   #13
GentooGeek
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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.
  Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2006, 16h00   #14
Philos15
Invité de passage
 
Inscription : 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
Philos15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/10/2006, 16h18   #15
Philos15
Invité de passage
 
Inscription : 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 ?
Philos15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 09h10   #16
GentooGeek
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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?...
  Envoyer un message privé Réponse avec citation 00
Vieux 17/10/2006, 10h42   #17
Philos15
Invité de passage
 
Inscription : octobre 2004
Messages : 28
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 28
Points : 2
Points : 2
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à,...
Philos15 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 00h26   #18
GentooGeek
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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).
  Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 11h54   #19
Pascale38
Nouveau Membre du Club
 
Inscription : janvier 2003
Messages : 160
Détails du profil
Informations forums :
Inscription : janvier 2003
Messages : 160
Points : 27
Points : 27
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
Pascale38 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2008, 15h21   #20
gabrouze
Invité de passage
 
Inscription : décembre 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 3
Points : 3
Points : 3
Envoyer un message via Skype™ à gabrouze
J'en ai fais un en Perl : Ligne de commande : ici
gabrouze est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h53.


 
 
 
 
Partenaires

Hébergement Web