"Hur är läget?"

"Jättebra. Kan inte klaga. Idag berättade Bilaabo för mig om JavaScript. Inte allt förstås, men mer än bara lite. Jag har förstås inte skrivit något i JS fortfarande, men jag tror inte att det skulle vara det. svår."

"Och Ellie berättade för mig om JSON-serialisering. Och du förklarade Jacksons ramverk och hur man ställer in 'polymorf deserialisering' med hjälp av kommentarer."

"Nej! Du är smart nu, Amigo! En riktig stud!"

"Och sen lite!"

"OK. Låt oss börja jobba. Idag har vi ett nytt, intressant ämne: XML. "

XML, serialisering till XML - 1

"XML är en standard för att representera data som lätt kan läsas av människor – och ännu lättare av program. Här är ett exempel på en XML-fil:"

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

"Grunden för XML är taggar. En tagg är ett ord inom vinkelparenteser (större-än och mindre-än-tecken). Det finns öppnande och avslutande taggar. Varje starttagg har exakt en motsvarande avslutande tag. Öppnande taggar kan ha attribut. "

"Taggar kan kapslas inuti en tagg och därigenom skapa ett elementträd. Taggen på översta nivån kallas root: den har underordnade taggar, som i sin tur har sina egna underordnade taggar."

"Här är några exempel:"

Märka Beskrivning
< data > Öppnande datatagg
</ data > Stängande datatagg
<cat  name = " Missy " age = " 15 "> En tagg med attribut. Attributvärden är inslagna i citattecken
<data>
<ägare>
<cat name = "Missy"/>
</owner>
</data>
Kapslade taggar.
< kattnamn = "Fröken" ålder = "15" /  > En självstängande tagg.
Sådana taggar behöver inte stänga taggar.
Och de kan inte ha underordnade taggar.
<info>
Alla typer av information kan gå hit
</info>
En tagg kan innehålla textdata
<info>
Alla typer
<data xxx = "yyy">
</data>
av information
<data 2xxx = "yyy"/>
kan gå hit
</info>
En tagg kan innehålla textdata varvat med andra taggar.

"Det ser enkelt ut. Vilka typer av taggar finns det?"

"Vilket som helst. Det finns inga reserverade taggar. XML är ett språk för att beskriva data. Människor kommer på taggar som uppfyller deras behov och kommer överens om hur de ska användas."

"I huvudsak är XML ett sätt att skriva data som ett elementträd som en dator kan förstå."

"Jag tror jag förstår det nu. Förresten, jag har en fråga."

"JSON används för att skicka data från en webbläsare till en server, men var används XML?"

"På samma ställen som JSON används: för att lagra och skicka data."

"Okej, låt oss fortsätta."

"Föreställ dig att du har en delad XML-fil som lagrar data för ett program som skrivs av tjugo personer. Var och en av dem kommer med sina egna taggar, och de börjar snabbt störa varandra."

"För att säkerställa att taggar är unika uppfanns prefix. Så här ser de ut:"

Taggar Beskrivning
< djur :katt> En kattlapp med djurprefixet
< djur :katt>
</ djur: katt>
< zoo :katt>
</ zoo :katt>
Två kattlappar med olika prefix.
< animal : cat  zoo : name = "MX"> En kattlapp med djurprefixet . Ett namnattribut med prefixet zoo .

"Prefix kallas också namnutrymmen. Om vi ​​kallar dem namnrymder, så blir den sista beskrivningen i tabellen 'En kattetikett med djurets namnutrymme. Ett namnattribut med djurparkens namnutrymme'."

"Kommer du förresten ihåg att i Java har varje klass ett kort namn och ett långt unikt namn som inkluderar paketnamnet, vilket också anges vid import av paketet?"

"Japp."

"Tja, prefix har också ett unikt långt namn, och det anges också när de importeras: "

Exempel
< data  xmlns:soap="http://cxf.apache.org/bindings/soap" >
 < tvål :item> 
< tvål :info/> 
</ tvål :item> 
</ data >

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

"Du kan också ställa in det unika namnet på taggar som inte har något prefix: "

Exempel
<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=...' ställer in namnutrymmet för det tomma prefixet. Med andra ord ställer det in namnutrymmet för taggar utan prefix, såsom data i exemplet ovan."

"Du kan ha så många namnrymder i ett dokument som du vill, men alla måste ha ett unikt namn."

"Jag förstår. Varför har dessa namnutrymmen så konstiga unika namn?"

"De anger vanligtvis en URL som pekar på ett dokument som beskriver namnområdet och/eller dess XML-taggar."

"Du dumpade mycket information på mig idag. Vad finns det mer?"

"Det finns fortfarande lite mer."

"För det första har XML en rubrik. Det är en speciell rad som beskriver XML-versionen och filkodningen. "Det brukar se ut så här:"

"Det brukar se ut så här:"

Exempel
<?xml  version = "1.0"  -kodning = "UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<tvål:vara>
<soap:info/>
</soap:item>
</data>

"Du kan också lägga till kommentarer till XML. För att starta en kommentar, använd '<!--'. För att avsluta den, använd '-->'."

Exempel
<?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>

"Jag förstår än så länge."

"Vissa symboler (< > " &) har speciell betydelse i XML, så de kan inte användas någon annanstans. Vi kan komma runt denna begränsning med en escape-sekvens - en uppsättning tecken som används för att representera andra tecken/symboler. Här är några av dem:"

Escape-sekvens Symbol som den ersätter
& &
" «
< <
> >
' '

"Och här är ett exempel på kod inbäddad i XML:"

Java-kod Java-kod i XML
if (a < b)
System.out.println("a is minimum");
<kod>
om (a  <  b)
 System.out.println( " a är minimum " );
</code>

"Äh... det ser inte vackert ut."

"Du kommer ihåg att i Java är vissa tecken också escaped? Till exempel "\". Och att den här sekvensen också måste skrivas två gånger när man skriver till en sträng? Så detta är en vanlig företeelse."

"OK."

"Det är allt jag har för idag."

"Hurra. Jag kan äntligen ta en paus."