Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Mon livre « Cyberstructure »

Ève

Langages de patch pour XML

Première rédaction de cet article le 19 février 2006


Lorsqu'on veut mettre à jour un gros document XML, il serait très intéressant de pouvoir ne transmettre que la différence avec l'ancien document, le patch. Cela permettrait également de mieux documenter la différence entre les deux fichiers. Mais il n'existe pas de langage standard pour exprimer ces patches. Il y a plusieurs propositions concurrentes.

Un exemple tiré d'une des propositions, XML-patch, vaut mieux qu'un long discours :


   <add sel="doc"><bar id="ert4773">This is a new child</bar></add>
   <remove sel="doc/foo[@a='1']"/>

Le patch ci-dessus crée un nouvel élément "bar" et détruit un élément "foo". Comme toutes les propositions de langage de patch, celle-ci utilise XPath pour désigner l'endroit où se font les changements.

Les propositions existantes sont :

  • REX, qui vient du consortium W3C et qui est bien plus qu'un langage de patch puisqu'il s'agit d'un moyen de décrire des évenements DOM distants.
  • Xquery Update, également du W3C, et qui est une extension de XQuery, qui avait été prévu pour étendre XPath.
  • XUpdate, de XML:DB, qui semble aujourd'hui abandonné (la dernière version date de 2000).
  • DUL (décrit dans l'Internet-draft draft-mouat-xml-patch-00.txt).
  • XML-patch (décrit dans le RFC 5261). C'est celui que je trouve le plus simple et le plus proche du cahier des charges "un langage de patch".

(Avec un autre langage de données, JSON, Rob Sayre a proposé un format de patch sympathique.)

Une fois qu'on aurait un tel langage, il suffirait de modifier un des programmes de calculs de différence entre fichiers XML (comme Python xmldiff).

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)