2. Processing Merge Patch Documents (Traitement des documents de correctif de fusion)
2. Processing Merge Patch Documents (Traitement des documents de correctif de fusion)
Les documents de correctif de fusion JSON décrivent, par exemple, un ensemble de modifications à apporter à une ressource cible. Les destinataires des documents de correctif de fusion sont responsables de la comparaison du correctif de fusion avec le contenu actuel de la ressource cible pour déterminer l'ensemble spécifique d'opérations de modification à appliquer à la cible.
Pour appliquer le document de correctif de fusion à une ressource cible, le système réalise l'effet de la fonction suivante, décrite en pseudocode. Pour cette description, la fonction est appelée MergePatch, et elle prend deux arguments: le document de ressource cible et le document de correctif de fusion. L'argument Target peut être n'importe quelle valeur JSON ou undefined. L'argument Patch peut être n'importe quelle valeur JSON.
define MergePatch(Target, Patch):
if Patch is an Object:
if Target is not an Object:
Target = {} # Ignore the contents and set it to an empty Object
for each Name/Value pair in Patch:
if Value is null:
if Name exists in Target:
remove the Name/Value pair from Target
else:
Target[Name] = MergePatch(Target[Name], Value)
return Target
else:
return Patch
Il y a quelques points à noter concernant la fonction. Si le correctif est autre chose qu'un objet, le résultat sera toujours de remplacer la cible entière par le correctif entier. De plus, il n'est pas possible de corriger une partie d'une cible qui n'est pas un objet, comme remplacer seulement certaines valeurs dans un tableau.
L'opération MergePatch est définie pour fonctionner au niveau des éléments de données, et non au niveau de la représentation textuelle. On ne s'attend pas à ce que l'opération MergePatch préserve les caractéristiques au niveau de la représentation textuelle telles que les espaces blancs, l'ordre des membres, la précision des nombres au-delà de ce qui est disponible dans l'implémentation de la cible, etc. De plus, même si l'implémentation cible autorise plusieurs paires nom/valeur avec le même nom, le résultat de l'opération MergePatch sur de tels objets n'est pas défini.