Aller au contenu principal

4. Evaluation (Évaluation)

4. Evaluation (Évaluation)

L'évaluation d'un JSON Pointer commence par une référence à la valeur racine (root value) d'un document JSON et se termine par une référence à une valeur dans le document. Chaque jeton de référence (reference token) dans le JSON Pointer est évalué séquentiellement.

L'évaluation de chaque jeton de référence commence par le décodage de toute séquence de caractères échappés (escaped character sequence). Cela s'effectue en transformant d'abord toute occurrence de la séquence '~1' en '/', puis en transformant toute occurrence de la séquence '0' en ''. En effectuant les substitutions dans cet ordre, une implémentation évite l'erreur de transformer '~01' d'abord en '~1' puis en '/', ce qui serait incorrect (la chaîne '~01' devient correctement '~1' après transformation).

Le jeton de référence modifie ensuite la valeur référencée selon le schéma suivant:

  • Si la valeur actuellement référencée est un objet JSON (object), la nouvelle valeur référencée est le membre d'objet (object member) avec le nom identifié par le jeton de référence. Le nom du membre (member name) est égal au jeton si et seulement si il a le même nombre de caractères Unicode que le jeton et que leurs points de code (code points) sont égaux octet par octet. Aucune normalisation de caractères Unicode (character normalization) n'est effectuée. Si un nom de membre référencé n'est pas unique dans un objet, le membre référencé est indéfini et l'évaluation échoue (voir ci-dessous).

  • Si la valeur actuellement référencée est un tableau JSON (array), le jeton de référence DOIT contenir soit:

    • des caractères composés de chiffres (digits) (voir ABNF ci-dessous; notez que les zéros en tête ne sont pas autorisés) qui représentent une valeur entière non signée en base 10, faisant de la nouvelle valeur référencée l'élément du tableau avec l'index de base zéro (zero-based index) identifié par le jeton, soit
    • exactement le caractère unique "-", faisant de la nouvelle valeur référencée le membre (inexistant) après le dernier élément du tableau.

La syntaxe ABNF pour les indices de tableau est:

array-index = %x30 / ( %x31-39 *(%x30-39) )
; "0", or digits without a leading "0"

Les implémentations évalueront chaque jeton de référence par rapport au contenu du document et déclencheront une condition d'erreur (error condition) si elles ne parviennent pas à résoudre une valeur concrète (concrete value) pour l'un des jetons de référence du JSON Pointer. Par exemple, si un tableau est référencé avec un jeton non numérique, une condition d'erreur sera déclenchée. Voir Section 7 pour plus de détails.

Notez que l'utilisation du caractère "-" pour indexer un tableau entraînera toujours une telle condition d'erreur car, par définition, il fait référence à un élément de tableau inexistant. Ainsi, les applications de JSON Pointer doivent spécifier comment ce caractère doit être traité pour qu'il soit utile.

Toute condition d'erreur pour laquelle une action spécifique n'est pas définie par l'application JSON Pointer entraîne la terminaison de l'évaluation.