2.7. Normalized Paths (Chemins normalisés)
2.7. Normalized Paths (Chemins normalisés)
Un chemin normalisé (Normalized Path) est une représentation unique de l'emplacement d'un nœud dans une valeur qui identifie de manière unique le nœud dans la valeur. Plus précisément, un chemin normalisé est une requête JSONPath à syntaxe restreinte (définie ci-dessous), par ex. $['book'][3], qui, appliquée à la valeur, aboutit à une nodelist constituée uniquement du nœud identifié par le chemin normalisé. Note : Un chemin normalisé représente l'identité d'un nœud dans une valeur spécifique. Il existe précisément un chemin normalisé identifiant un nœud particulier dans une valeur.
Une nodelist peut être représentée de façon compacte en JSON comme un tableau de chaînes, où les chaînes sont des chemins normalisés.
Les chemins normalisés fournissent un format prévisible qui simplifie les tests et le post-traitement des nodelists, par ex. pour supprimer les nœuds dupliqués. Les chemins normalisés sont utilisés dans ce document comme chemins de résultat dans les exemples.
Les chemins normalisés utilisent la notation entre crochets canonique, plutôt que la notation point.
Des quotes simples délimitent les noms de membres dans les chemins normalisés. Cela réduit le nombre de caractères à échapper lorsque les chemins normalisés apparaissent dans des chaînes délimitées par des guillemets doubles, par ex. dans des textes JSON.
Certains caractères sont échappés dans les chemins normalisés d'une seule et unique manière ; tous les autres caractères ne sont pas échappés.
Note : Les chemins normalisés sont des requêtes singulières, mais toutes
les requêtes singulières ne sont pas des chemins normalisés. Par exemple,
$[-3] est une requête singulière mais n'est pas un chemin normalisé.
L'équivalent en chemin normalisé de $[-3] aurait un indice égal à la
longueur du tableau moins 3. (La longueur du tableau doit être d'au
moins 3 si $[-3] doit identifier un nœud.)
normalized-path = root-identifier *(normal-index-segment)
normal-index-segment = "[" normal-selector "]"
normal-selector = normal-name-selector / normal-index-selector
normal-name-selector = %x27 *normal-single-quoted %x27 ; 'string'
normal-single-quoted = normal-unescaped /
ESC normal-escapable
normal-unescaped =
%x20-26 /
%x28-5B /
%x5D-D7FF /
%xE000-10FFFF
normal-escapable = %x62 /
%x66 /
%x6E /
%x72 /
%x74 /
"'" /
"\" /
(%x75 normal-hexchar)
normal-hexchar = "0" "0"
(
("0" %x30-37) /
("0" %x62) /
("0" %x65-66) /
("1" normal-HEXDIG)
)
normal-HEXDIG = DIGIT / %x61-66
normal-index-selector = "0" / (DIGIT1 *DIGIT)
Comme il ne peut y avoir qu'un seul chemin normalisé identifiant un nœud donné, la syntaxe stipule quels caractères sont échappés et lesquels ne le sont pas. Ainsi la définition de normal-hexchar est conçue pour l'échappement hexadécimal de caractères qui ne sont pas aisément imprimables, par exemple U+000B LINE TABULATION, mais pour lesquels aucun échappement JSON standard, tel que \n, n'est disponible.
2.7.1. Examples (Exemples)
| Chemin | Chemin normalisé | Commentaire |
|---|---|---|
| $.a | $['a'] | Valeur d'objet |
| $[1] | $[1] | Indice de tableau |
| $[-3] | $[2] | Indice de tableau négatif pour |
| un tableau de longueur 5 | ||
| $.a.b[1:2] | $['a']['b'][1] | Structure imbriquée |
| $["\u000B"] | $['\u000b'] | Échappement Unicode |
| $["\u0061"] | $['a'] | Caractère Unicode |
Tableau 18 : Exemples de chemins normalisés