2.7. Normalized Paths (Percorsi normalizzati)
2.7. Normalized Paths (Percorsi normalizzati)
Un Normalized Path è una rappresentazione univoca della posizione di un nodo in un valore che identifica univocamente il nodo nel valore. In particolare, un Normalized Path è un'interrogazione JSONPath con sintassi ristretta (definita sotto), ad esempio $['book'][3], che applicata al valore produce una nodelist costituita solo dal nodo identificato dal Normalized Path. Nota: un Normalized Path rappresenta l'identità di un nodo in un valore specifico. Vi è precisamente un Normalized Path che identifica qualsiasi particolare nodo in un valore.
Una nodelist può essere rappresentata in modo compatto in JSON come array di stringhe, dove le stringhe sono Normalized Paths.
I Normalized Paths forniscono un formato prevedibile che semplifica test e post-elaborazione delle nodelist, ad esempio per rimuovere nodi duplicati. I Normalized Paths sono usati in questo documento come percorsi risultato negli esempi.
I Normalized Paths usano la notazione canonica con parentesi quadre, piuttosto che la notazione a punto.
Le virgolette singole sono usate nei Normalized Paths per delimitare i nomi di membro stringa. Ciò riduce il numero di caratteri che necessitano escape quando i Normalized Paths compaiono in stringhe delimitate da virgolette doppie, ad esempio in testi JSON.
Certi caratteri sono escapati nei Normalized Paths in un solo modo; tutti gli altri caratteri non sono escapati.
Nota: i Normalized Paths sono singular query, ma non tutte le
singular query sono Normalized Paths. Ad esempio, $[-3] è una
singular query ma non è un Normalized Path. Il Normalized Path
equivalente a $[-3] avrebbe un indice uguale alla lunghezza dell'array
meno 3. (La lunghezza dell'array deve essere almeno 3 se $[-3]
deve identificare un nodo.)
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 = ; omit %x0-1F control codes
%x20-26 /
; omit 0x27 '
%x28-5B /
; omit 0x5C \
%x5D-D7FF /
; skip surrogate code points
%xE000-10FFFF
normal-escapable = %x62 / ; b BS backspace U+0008
%x66 / ; f FF form feed U+000C
%x6E / ; n LF line feed U+000A
%x72 / ; r CR carriage return U+000D
%x74 / ; t HT horizontal tab U+0009
"'" / ; ' apostrophe U+0027
"\" / ; \ backslash (reverse solidus) U+005C
(%x75 normal-hexchar)
; certain values u00xx U+00XX
normal-hexchar = "0" "0"
(
("0" %x30-37) / ; "00"-"07"
; omit U+0008-U+000A BS HT LF
("0" %x62) / ; "0b"
; omit U+000C-U+000D FF CR
("0" %x65-66) / ; "0e"-"0f"
("1" normal-HEXDIG)
)
normal-HEXDIG = DIGIT / %x61-66 ; "0"-"9", "a"-"f"
normal-index-selector = "0" / (DIGIT1 *DIGIT)
; non-negative decimal integer
Poiché può esserci solo un Normalized Path che identifica un dato nodo, la sintassi stabilisce quali caratteri sono escapati e quali no. Così la definizione di normal-hexchar è progettata per l'escape esadecimale di caratteri che non sono stampabili in modo semplice, ad esempio U+000B LINE TABULATION, per i quali non è disponibile uno standard JSON escape come \n.
2.7.1. Examples (Esempi)
| Percorso | Normalized Path | Commento |
|---|---|---|
| $.a | $['a'] | Valore di oggetto |
| $[1] | $[1] | Indice di array |
| $[-3] | $[2] | Indice di array negativo per |
| un array di lunghezza 5 | ||
| $.a.b[1:2] | $['a']['b'][1] | Struttura annidata |
| $["\u000B"] | $['\u000b'] | Escape Unicode |
| $["\u0061"] | $['a'] | Carattere Unicode |
Tabella 18: Esempi di Normalized Path