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 :
This is a new child
]]>
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 ). 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).