La X di JSON – prima parte

jlogo.jpgFunziona sempre così.
Dopo solo un paio di anni, anche quello che sembrava un grande amore comincia a mostrare le sue crepe. Come se non bastasse, anche gli amici non stanno dalla tua parte: “Ma sei sicuro di quello che stai facendo? Non avrai preso la strada sbagliata anche stavolta?” “Non è vero, io in questo rapporto ci credo, nessuno potra mai separarci!”
Quel ‘nessuno’ purtroppo ora c’è, ed ha un nome: JSON, un nuovo formato basato su javascript che in questi giorni comincia a farsi strada nel mondo della descrizione e lo scambio dei dati ponendosi come alternativa al caro vecchio XML.
Prima di proporre a quest’ultimo una pausa di riflessione che segnerebbe una fine sicura, vorrei scandagliare meglio il mio cuore in cerca – se non della risposta – di almeno di un consiglio su come prendere con sicurezza delle decisioni importanti per il nostro futuro, a cui non voglio smettere di credere.

Cos’è XML in poche righe

XML è un metalinguaggio (un Linguaggio che descrive altri linguaggi) di Markup (che utilizza dei marcatori, dei tag) personalizzabile, ovvero estensibile (in inglese eXtensible), basato su testo che può essere utilizzato per strutturare dei dati indicandone il proprio significato.
Facendo un esempio, per descrivere un particolare dato “film” ci è permessa l’invenzione di una struttura di questo genere:

<film genere="surrealista">
   <titolo>Il fantasma della libertà</titolo>
   <cast>   
       <regista>Luis Buñuel</regista>
       <attore>Jean-Claude Brialy</attore> 
       <attore>Adolfo Celi</attore> 
   </cast> 
   <anno>1974</anno>
   <casadiproduzione/>
</film>

Il documento contiene un elemento radice (di nome film) completo di un attributo (di nome genere) che assieme a quattro elementi figli (di cui uno a sua volta contiene altri tre elementi figlio) crea una particolare gerarchia. Tutti gli elementi ed attributi devono rispondere ad alcune regole generali – come la giusta corrispondenza di tag di apertura e chiusura, l’utilizzo di una sintassi speciale nei tag vuoti, i valori degli attributi racchiusi tra virgolette etc. – ovvero rendere il documento XML well-formed (ben formato). Il documento stesso deve essere anche valid (valido) ovvero seguire delle regole relative alla struttura logica (quanti e quali tag usare, in che posizione etc.) definite nei documenti DTD (Document Type Definition) oppure nei più recenti Schemi XML.
Gli attributi sono molto importanti per estentendere il significato (o meglio la semantica) di un particolare tag. Ne è un esempio l’XHTML, un linguaggio basato su XML i cui elementi non rappresentano altro che una serie di istruzioni per il rendering nella pagina (possiamo quindi considerarlo un HTML well-formed con alcune restrinzioni sul DTD) e quindi è importante utilizzare degli attributi che ne indichino anche la semantica del dato che si sta racchiudendo.

Notazione ad oggetti e JSON

Come descrive il suo acronimo Javascript Object Notation, JSON trae invece la sua linfa vitale dagli oggetti javascript.
Gli oggetti sono delle strutture costituite da delle coppie di elementi nome/valore. Possono essere utilizzati in due modi: 1) si crea l’oggetto tramite l’operatore new e si inizializzano delle proprietà relative i cui nomi seguono il nome dell’oggetto dopo un punto, oppure sono contenuti tra parentesi quadre dopo il nome dell’oggetto.

var oggetto = new Object();
oggetto.nome = "Tavolo";
oggetto[materiale] = "Legno";

2) si crea l’oggetto assegnandogli, tra due parentesi graffe, una serie di coppie nome/valore (che sono divisi da dei due punti) intervallate da una virgola.

var oggetto = {
     nome: "Tavolo",
     materiale: "Legno",
     caratteristiche: {
         larghezza: 58,
         colore: "verde"
    }
}

La seconda sintassi, presente anche in altri linguaggi, è detta “Object Literal” e risulta molto utile per ordinare in gruppi indipendenti alcune variabili e funzioni che lavorano in cooperazione. (Esempi a proposito sono segnalati nei post di Dustin Diaz e Chris Heilmann sull’argomento).
Nel 2002 il developer Douglas Crockford ha pensato di utilizzare la notazione letterale come un formato per lo scambio di dati definendo una particolare sintassi in questa pagina introduttiva (qui la traduzione in italiano).
Come potete osservare nei vari schemi, gli elementi principali della sintassi JSON sono:

  • Oggetti: una serie non ordinata di nomi/valori separati da una virgola e racchiusi da due parentesi graffe.
  • Array: una raccolta ordinata (racchiusa tra due parentesi quadre) di valori separati da una virgola
  • Valore: una stringa tra virgolette, o un numero, o vero o falso o nullo, o un oggetto o un array. Queste strutture possono essere annidate.
  • Stringa: una raccolta di zero o più caratteri Unicode, tra virgolette, usando la barra rovesciata. Un carattere è rappresentato come una singola stringa di caratteri

In questa pagina ci sono alcuni raffronti tra alcune strutture dati scritte in formato JSON ed il corrispondente formato XML.
Proverò a fare lo stesso con l’esempio XML del paragrafo sopra:

{"film" : {
   "genere" : "surrealista",
   "titolo" : "Il fantasma della libertà",
   "cast" : {
   "regista" : "Luis Buñuel",
   "attore" : ["Jean-Claude Brialy" ,"Adolfo Celi"], 
    },
    "anno" : "1974" ,
   "casadiproduzione" : null
 }
}

Se la mia traduzione è esatta, questa dovrebbe comportare:

  • L’elemento radice (in questo casofilm) diventa un oggetto racchiuso tra parentesi graffe
  • Ogni elemento figlio dell’elemento radice e di ogni altro elemento diventa una coppia nome/valore
  • Gli attributi (qui c’è solo genere) diventano una coppia nome/valore quasi come rappresentasse il primo figlio di un elemento
  • Due elementi con lo stesso nome, (in questo caso attore), vengono racchiusi in un array

Il ‘dovrebbe’ d’introduzione è d’obbligo, perchè sul sito ufficiale non ho visto nessuna indicazione precisa che regoli la struttura di un documento come in un DTD o in uno schema.
In teoria, si potrebbero creare degli strumenti (basta già un debugger javascript?) per giudicare che un documento JSON sia ben formato, ma non che sia valido.

Nella seconda parte (domani? sabato? prossimamente) vedremo più nello specifico le differenze tra i due contendenti e l’integrazione con AJAX; nella terza invece l’utilizzo con feed (del.icio.us) e API (Yahoo).

Comments are closed.


Archivio categorie

Here's the months' archive. The time is now, remember.