"Jak leci?"

"Świetnie. Nie mogę narzekać. Dzisiaj Bilaabo opowiedział mi o JavaScript. Oczywiście nie wszystko, ale więcej niż trochę. Oczywiście nadal nie napisałem nic w JS, ale nie sądzę, żeby to było trudny."

„A Ellie opowiedziała mi o serializacji JSON. Wyjaśniłeś też ramy Jacksona i sposób skonfigurowania„ deserializacji polimorficznej ”za pomocą adnotacji”.

„Nie ma mowy! Jesteś teraz sprytny, Amigo! Prawdziwy ogier!”

"A potem trochę!"

„OK. Bierzmy się do pracy. Dziś mamy nowy, ciekawy temat: XML ” .

XML, serializacja do XML - 1

„XML to standard reprezentacji danych, który może być łatwo odczytany przez ludzi — a jeszcze łatwiej przez programy. Oto przykładowy plik XML:”

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

„Podstawą XML są znaczniki. Znacznik to słowo w nawiasach ostrych (znaki większe niż i mniejsze niż). Istnieją znaczniki otwierające i zamykające. Każdy znacznik otwierający ma dokładnie jeden odpowiadający mu znacznik zamykający. Znaczniki otwierające mogą mieć atrybuty. "

„Tagi mogą być zagnieżdżane wewnątrz znacznika, tworząc w ten sposób drzewo elementów. Znacznik najwyższego poziomu nazywany jest korzeniem: ma znaczniki podrzędne, które z kolei mają własne znaczniki podrzędne”.

„Oto kilka przykładów:”

Etykietka Opis
< dane > Otwieranie znacznika danych
</ dane > Zamykający znacznik danych
<kot  imię = " Missy " wiek = " 15 "> Znacznik z atrybutami. Wartości atrybutów są ujęte w cudzysłowy
<data>
<właściciel>
<imię kota = "Missy"/> </ właściciel
> </data>
Zagnieżdżone tagi.
< imię kota = "Missy" wiek = "15"  /> Samozamykająca się etykieta.
Takie tagi nie wymagają tagów zamykających.
I nie mogą mieć tagów podrzędnych.
<info>
Tutaj można znaleźć wszelkie informacje
</info>
Znacznik może zawierać dane tekstowe
<info>
Wszelkiego rodzaju
<data xxx = "yyy">
</data>
informacji
<data 2xxx = "yyy"/>
można przejść tutaj
</info>
Znacznik może zawierać dane tekstowe przeplatane innymi znacznikami.

„Wygląda na łatwe. Jakie są rodzaje tagów?”

„Wszystkiego rodzaju. Nie ma zarezerwowanych tagów. XML to język do opisywania dowolnych danych. Ludzie wymyślają tagi, które spełniają ich potrzeby i uzgadniają, jak ich używać”.

„Zasadniczo XML to sposób zapisywania danych jako drzewa elementów zrozumiałego dla komputera”.

„Myślę, że teraz rozumiem. A tak przy okazji, mam pytanie”.

„JSON służy do wysyłania danych z przeglądarki na serwer, ale gdzie jest używany XML?”

„W tych samych miejscach, w których używany jest JSON: do przechowywania i wysyłania danych”.

— Dobrze, kontynuujmy.

„Wyobraź sobie, że masz jeden wspólny plik XML, który przechowuje dane dla programu napisanego przez dwadzieścia osób. Każda z nich ma własne znaczniki i szybko zaczynają ze sobą ingerować”.

„Aby tagi były unikalne, wymyślono przedrostki. Oto jak wyglądają:”

Tagi Opis
< zwierzę :kot> Nieśmiertelnik z prefiksem zwierzęcia
< zwierzę :kot>
</ zwierzę: kot>
< zoo :kot>
</ zoo :kot>
Dwa nieśmiertelniki z różnymi prefiksami.
< zwierzę : kot  ogród zoologiczny : nazwa = "MX"> Nieśmiertelnik z prefiksem zwierzęcia . Atrybut nazwy z przedrostkiem zoo .

„Przedrostki są również nazywane przestrzeniami nazw. Jeśli nazwiemy je przestrzeniami nazw, to ostatni opis w tabeli będzie brzmiał: „Kot tag z przestrzenią nazw zwierząt. Atrybut nazwy z przestrzenią nazw zoo”.

„Przy okazji, czy pamiętasz, że w Javie każda klasa ma krótką nazwę i długą unikalną nazwę, która zawiera nazwę pakietu, która jest również podawana podczas importowania pakietu?”

"Tak."

„Cóż, prefiksy mają również unikalną długą nazwę, która jest również określana podczas importu:

Przykład
< dane  xmlns:soap="http://cxf.apache.org/bindings/soap" >
 < mydło : pozycja > 
< mydło : informacja / > 
</ mydło : pozycja > 
</ dane >

xml ns : soap” oznacza „ XMLnazwa tempa SOAP”

"Możesz również ustawić unikalną nazwę tagów, które nie mają prefiksu: "

Przykład
<data xmlns = "http://www.springframework.org/schema/beans" 
xmlns: soap = "http://cxf.apache.org/bindings/soap" 
xmlns:task = "http://www.springframework .org/schema/task" > 
< mydło :pozycja> 
< mydło :info/> 
< zadanie :info/> 
</ mydło :pozycja> 
</data>

„'xmlns=…” ustawia przestrzeń nazw dla pustego prefiksu. Innymi słowy, ustawia przestrzeń nazw dla tagów bez prefiksu, takich jak dane w powyższym przykładzie.

„Możesz mieć tyle przestrzeni nazw w dokumencie, ile chcesz, ale każda musi mieć unikalną nazwę”.

„Rozumiem. Dlaczego te przestrzenie nazw mają tak dziwne, unikalne nazwy?”

„Zwykle wskazują adres URL, który wskazuje na dokument opisujący przestrzeń nazw i/lub jej znaczniki XML”.

– Wyrzuciłeś dziś na mnie mnóstwo informacji. Co jeszcze?

– Jest jeszcze trochę.

„Po pierwsze, XML ma nagłówek. Jest to specjalna linia opisująca wersję XML i kodowanie pliku. „Zwykle wygląda to tak:”

„Zwykle wygląda to tak:”

Przykład
<? wersja XML  =  kodowanie "1.0" = "UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<mydło:przedmiot>
<mydło:informacje/>
</mydło:pozycja>
</data>

"Możesz także dodawać komentarze do XML. Aby rozpocząć komentarz, użyj '<!--'. Aby go zakończyć, użyj '-->'."

Przykład
<?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>

— Jak dotąd rozumiem.

"Niektóre symbole (< > " &) mają specjalne znaczenie w XML, więc nie można ich używać gdzie indziej. Możemy obejść to ograniczenie za pomocą sekwencji ucieczki — zestawu znaków używanych do reprezentowania innych znaków/symboli. Tutaj jest kilka z nich:"

Sekwencja ewakuacyjna Symbol, który zastępuje
& &
" «
< <
> >
' '

„A oto przykład kodu osadzonego w XML:”

Kod Javy Kod Java w XML
if (a < b)
System.out.println("a is minimum");
<kod>
jeśli (a  <  b)
 System.out.println( " a to minimum " );
</kod>

"Uh... To nie wygląda ładnie."

„Pamiętasz, że w Javie niektóre znaki również są zmieniane? Na przykład „\”. I że ta sekwencja musi być również zapisywana dwukrotnie podczas zapisywania w łańcuchu? Jest to więc powszechne zjawisko”.

"OK."

– To wszystko, co mam na dzisiaj.

„Hurra. W końcu mogę zrobić sobie przerwę”.