Passa al contenuto principale

4. Evaluation (Valutazione)

4. Evaluation (Valutazione)

La valutazione di un JSON Pointer inizia con un riferimento al valore radice (root value) di un documento JSON e si completa con un riferimento a un valore all'interno del documento. Ogni token di riferimento (reference token) nel JSON Pointer viene valutato in sequenza.

La valutazione di ogni token di riferimento inizia decodificando qualsiasi sequenza di caratteri con escape (escaped character sequence). Questo viene eseguito trasformando prima tutte le occorrenze della sequenza '~1' in '/', e poi trasformando tutte le occorrenze della sequenza '0' in ''. Eseguendo le sostituzioni in questo ordine, un'implementazione evita l'errore di trasformare '~01' prima in '~1' e poi in '/', che sarebbe scorretto (la stringa '~01' diventa correttamente '~1' dopo la trasformazione).

Il token di riferimento modifica quindi quale valore viene riferito secondo il seguente schema:

  • Se il valore attualmente riferito è un oggetto JSON (object), il nuovo valore riferito è il membro dell'oggetto (object member) con il nome identificato dal token di riferimento. Il nome del membro (member name) è uguale al token se e solo se ha lo stesso numero di caratteri Unicode del token e i loro punti di codice (code points) sono uguali byte per byte. Non viene eseguita alcuna normalizzazione dei caratteri Unicode (character normalization). Se un nome di membro riferito non è univoco in un oggetto, il membro riferito è indefinito e la valutazione fallisce (vedi sotto).

  • Se il valore attualmente riferito è un array JSON (array), il token di riferimento DEVE contenere:

    • caratteri composti da cifre (digits) (vedere ABNF sotto; notare che gli zeri iniziali non sono consentiti) che rappresentano un valore intero senza segno in base 10, rendendo il nuovo valore riferito l'elemento dell'array con l'indice a base zero (zero-based index) identificato dal token, oppure
    • esattamente il singolo carattere "-", rendendo il nuovo valore riferito il membro (inesistente) dopo l'ultimo elemento dell'array.

La sintassi ABNF per gli indici degli array è:

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

Le implementazioni valuteranno ogni token di riferimento rispetto al contenuto del documento e solleveranno una condizione di errore (error condition) se non riescono a risolvere un valore concreto (concrete value) per uno qualsiasi dei token di riferimento del JSON Pointer. Ad esempio, se un array viene riferito con un token non numerico, verrà sollevata una condizione di errore. Vedere Section 7 per i dettagli.

Si noti che l'uso del carattere "-" per indicizzare un array comporterà sempre una tale condizione di errore perché per definizione si riferisce a un elemento dell'array inesistente. Pertanto, le applicazioni di JSON Pointer devono specificare come deve essere gestito quel carattere, affinché sia utile.

Qualsiasi condizione di errore per la quale un'azione specifica non è definita dall'applicazione JSON Pointer comporta la terminazione della valutazione.