"Come va?"

"Fantastico. Non posso lamentarmi. Oggi Bilaabo mi ha parlato di JavaScript. Non tutto, ovviamente, ma più di un po'. Certo, non ho ancora scritto nulla in JS, ma non credo che sarebbe difficile."

"Ed Ellie mi ha parlato della serializzazione JSON. E tu hai spiegato il framework Jackson e come impostare la 'deserializzazione polimorfica' usando le annotazioni."

"Assolutamente no! Adesso sei intelligente, Amigo! Un vero stallone!"

"E poi qualche!"

"OK. Mettiamoci al lavoro. Oggi abbiamo un nuovo, interessante argomento: XML. "

XML, serializzazione in XML - 1

"L'XML è uno standard per rappresentare i dati che possono essere facilmente letti dagli esseri umani e ancora più facilmente dai programmi. Ecco un esempio di file XML:"

XML
<data>
<owner first="Adam" last="Shelton">
<address>London</address>
</owner>
<cat name="Missy" age="15"/>
</data>

"Il fondamento di XML sono i tag. Un tag è una parola tra parentesi angolari (segni di maggiore e minore di). Ci sono tag di apertura e di chiusura. Ogni tag di apertura ha esattamente un tag di chiusura corrispondente. I tag di apertura possono avere attributi. "

"I tag possono essere nidificati all'interno di un tag, creando così un albero degli elementi. Il tag di livello superiore è chiamato radice: ha tag figli, che a loro volta hanno i propri tag figli."

"Ecco alcuni esempi:"

Etichetta Descrizione
< dati > Tag di dati di apertura
</ dati > Etichetta dati di chiusura
nome gatto = " Missy " età = " 15 "> Un tag con attributi. I valori degli attributi sono racchiusi tra virgolette
<data>
<owner>
<cat name = "Missy"/>
</owner>
</data>
Tag nidificati.
< nome gatto = "Missy" età = "15"  /> Un tag a chiusura automatica.
Tali tag non necessitano di tag di chiusura.
E non possono avere tag figlio.
<info>
Qualsiasi tipo di informazione può andare qui
</info>
Un tag può contenere dati di testo
<info>
Qualsiasi tipo
<data xxx = "yyy">
</data>
di informazioni
<data 2xxx = "yyy"/>
può andare qui
</info>
Un tag può contenere dati di testo inframmezzati da altri tag.

"Sembra facile. Che tipo di tag ci sono?"

"Qualsiasi tipo. Non ci sono tag riservati. XML è un linguaggio per descrivere qualsiasi dato. Le persone escogitano i tag che soddisfano le loro esigenze e si accordano su come usarli."

"Essenzialmente, XML è un modo per scrivere dati come un albero di elementi che un computer può comprendere".

"Penso di aver capito ora. A proposito, ho una domanda."

"JSON viene utilizzato per inviare dati da un browser a un server, ma dove viene utilizzato XML?"

"Negli stessi luoghi in cui viene utilizzato JSON: per l'archiviazione e l'invio di dati."

"Va bene, continuiamo."

"Immagina di avere un file XML condiviso che memorizza i dati per un programma scritto da venti persone. Ciascuno di loro presenta i propri tag e iniziano rapidamente a interferire tra loro."

"Per garantire che i tag siano unici, sono stati inventati i prefissi. Ecco come appaiono:"

Tag Descrizione
< animale :gatto> Una medaglietta per gatti con il prefisso dell'animale
< animale :gatto>
</ animale: gatto>
< zoo :gatto>
</ zoo :gatto>
Due medagliette per gatti con prefissi diversi.
< animale : gatto  zoo : nome = "MX"> Una medaglietta per gatti con il prefisso dell'animale . Un attributo name con il prefisso zoo .

"I prefissi sono anche chiamati spazi dei nomi. Se li chiamiamo spazi dei nomi, l'ultima descrizione nella tabella diventa 'Un tag gatto con lo spazio dei nomi degli animali. Un attributo del nome con lo spazio dei nomi dello zoo.'"

"A proposito, ricordi che in Java ogni classe ha un nome breve e un nome lungo univoco che include il nome del pacchetto, che viene specificato anche durante l'importazione del pacchetto?"

"Sì."

"Beh, anche i prefissi hanno un nome lungo univoco, ed è anche specificato quando vengono importati: "

Esempio
< data  xmlns:soap="http://cxf.apache.org/bindings/soap" >
 < soap :item> 
< soap :info/> 
</ soap :item> 
</ data >

"' xml ns :soap' significa ' XMLn ame s pace SOAP'"

"Puoi anche impostare il nome univoco dei tag che non hanno prefisso: "

Esempio
<data xmlns = "http://www.springframework.org/schema/beans" 
xmlns: soap = "http://cxf.apache.org/bindings/soap" 
xmlns:task = "http://www.springframework .org/schema/task" > 
< soap :item> 
< soap :info/> 
< task :info/> 
</ soap :item> 
</data>

"'xmlns=…' imposta lo spazio dei nomi per il prefisso vuoto. In altre parole, imposta lo spazio dei nomi per i tag senza prefisso, come i dati nell'esempio precedente."

"Puoi avere tutti i namespace che vuoi in un documento, ma ognuno deve avere un nome univoco."

"Capisco. Perché questi spazi dei nomi hanno nomi univoci così strani?"

"Di solito indicano un URL che punta a un documento che descrive lo spazio dei nomi e/oi suoi tag XML."

"Mi hai scaricato un sacco di informazioni oggi. Cos'altro c'è?"

"C'è ancora un po' di più."

"In primo luogo, XML ha un'intestazione. È una riga speciale che descrive la versione XML e la codifica del file. "Di solito ha questo aspetto:"

"Di solito ha questo aspetto:"

Esempio
<?xml  version = "1.0"  encoding = "UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<sapone:articolo>
<soap:info/>
</soap:item>
</data>

"Puoi anche aggiungere commenti a XML. Per iniziare un commento, usa '<!--'. Per terminarlo, usa '-->'."

Esempio
<?xml version = "1.0" encoding = "UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<soap:item>
<!-- <soap:info/> -->
</soap:item>
<!-- This is also a comment  -->
</data>

"Finora ho capito."

"Alcuni simboli (< > " &) hanno un significato speciale in XML, quindi non possono essere usati altrove. Possiamo aggirare questa restrizione con una sequenza di escape, un insieme di caratteri usati per rappresentare altri caratteri/simboli. Ecco qui alcuni di loro:"

Sequenza di fuga Simbolo che sostituisce
& &
" «
< <
> >
' '

"Ed ecco un esempio di codice incorporato in XML:"

codice java Codice Java in XML
if (a < b)
System.out.println("a is minimum");
<codice>
se (a  <  b)
 System.out.println( " a è minimo " );
</codice>

"Uh... Non sembra carino."

"Ricorderai che in Java alcuni caratteri sono anche sfuggiti? Ad esempio, "\". E che anche questa sequenza deve essere scritta due volte quando si scrive su una stringa? Quindi questa è un'occorrenza comune."

"OK."

"Questo è tutto quello che ho per oggi."

"Evviva. Finalmente posso prendermi una pausa."