"Como tá indo?"

"Ótimo. Não posso reclamar. Hoje Bilaabo me falou sobre JavaScript. Nem tudo, claro, mas mais do que um pouco. Claro, ainda não escrevi nada em JS, mas acho que não seria difícil."

"E Ellie me contou sobre serialização JSON. E você explicou a estrutura Jackson e como configurar 'desserialização polimórfica' usando anotações."

"De jeito nenhum! Você é esperto agora, Amigo! Um verdadeiro garanhão!"

"E então alguns!"

"OK. Vamos trabalhar. Hoje temos um tópico novo e interessante: XML. "

XML, serialização em XML - 1

"XML é um padrão para representar dados que podem ser facilmente lidos por humanos — e ainda mais facilmente por programas. Aqui está um exemplo de arquivo XML:"

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

"A base do XML são as tags. Uma tag é uma palavra entre colchetes angulares (sinais de maior e menor). Existem tags de abertura e fechamento. Cada tag de abertura tem exatamente uma tag de fechamento correspondente. As tags de abertura podem ter atributos. "

"As tags podem ser aninhadas dentro de uma tag, criando assim uma árvore de elementos. A tag de nível superior é chamada de raiz: ela tem tags filhas, que por sua vez têm suas próprias tags filhas."

"Aqui estão alguns exemplos:"

Marcação Descrição
< dados > Abrindo etiqueta de dados
</ dados > Fechando tag de dados
nome do gato = " Missy " idade = " 15 "> Uma tag com atributos. Os valores dos atributos são colocados entre aspas
<data>
<proprietário>
<nome do gato = "Missy"/> </ proprietário >
</data>
Tags aninhadas.
< nome do gato = "Missy" idade = "15"  /> Uma tag de fechamento automático.
Essas tags não precisam de tags de fechamento.
E eles não podem ter tags filhas.
<info>
Qualquer tipo de informação pode ir aqui
</info>
Uma tag pode conter dados de texto
<info>
Qualquer tipo
<data xxx = "yyy">
</data>
de informação
<data 2xxx = "yyy"/>
pode ir aqui
</info>
Uma tag pode conter dados de texto intercalados com outras tags.

"Parece fácil. Que tipos de etiquetas existem?"

"Qualquer tipo. Não há marcas reservadas. XML é uma linguagem para descrever qualquer dado. As pessoas criam as marcas que atendem às suas necessidades e concordam em como usá-las."

"Essencialmente, XML é uma maneira de gravar dados como uma árvore de elementos que um computador pode entender."

"Acho que entendi agora. A propósito, tenho uma pergunta."

"JSON é usado para enviar dados de um navegador para um servidor, mas onde o XML é usado?"

"Nos mesmos lugares onde o JSON é usado: para armazenar e enviar dados."

"Ok, vamos continuar."

"Imagine que você tenha um arquivo XML compartilhado que armazena dados para um programa que está sendo escrito por vinte pessoas. Cada uma delas cria suas próprias tags e rapidamente começam a interferir umas nas outras."

"Para garantir que as tags sejam únicas, os prefixos foram inventados. É assim que eles se parecem:"

Tag Descrição
< animal :gato> Uma etiqueta de gato com o prefixo animal
< animal :gato>
</ animal: gato>
< zoológico :gato>
</ zoo :gato>
Duas cat tags com prefixos diferentes.
< animal : gato  zoológico : nome = "MX"> Uma etiqueta de gato com o prefixo animal . Um atributo de nome com o prefixo zoo .

"Os prefixos também são chamados de namespaces. Se os chamarmos de namespaces, a última descrição na tabela se tornará 'Uma etiqueta de gato com o namespace do animal. Um atributo de nome com o namespace do zoológico.'"

"A propósito, você se lembra que em Java cada classe tem um nome curto e um nome longo único que inclui o nome do pacote, que também é especificado ao importar o pacote?"

"Sim."

"Bem, os prefixos também têm um nome longo exclusivo e também são especificados quando importados: "

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

"' xml ns :soap' significa ' XMLespaço de nome SOAP'"

"Você também pode definir o nome exclusivo de tags que não possuem prefixo: "

Exemplo
<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=…' define o namespace para o prefixo vazio. Em outras palavras, ele define o namespace para tags sem um prefixo, como os dados no exemplo acima."

"Você pode ter quantos namespaces quiser em um documento, mas cada um deve ter um nome exclusivo."

"Entendo. Por que esses namespaces têm nomes únicos tão estranhos?"

"Eles geralmente indicam uma URL que aponta para um documento que descreve o namespace e/ou suas tags XML."

"Você despejou um monte de informações sobre mim hoje. O que mais há?"

"Ainda falta um pouco."

"Primeiro, o XML tem um cabeçalho. É uma linha especial que descreve a versão do XML e a codificação do arquivo. "Geralmente se parece com isto:"

"Geralmente é assim:"

Exemplo
<? versão XML  = "1.0"  codificação = "UTF-8"?>
<data xmlns:soap = "http://cxf.apache.org/bindings/soap">
<sabão:item>
<sabão:info/>
</soap:item>
</data>

"Você também pode adicionar comentários ao XML. Para iniciar um comentário, use '<!--'. Para finalizá-lo, use '-->'."

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

"Eu entendo até agora."

"Certos símbolos (< > " &) têm um significado especial em XML, portanto, não podem ser usados ​​em outro lugar. Podemos contornar essa restrição com uma sequência de escape - um conjunto de caracteres usados ​​para representar outros caracteres/símbolos. Aqui estão alguns deles:"

Sequência de fuga Símbolo que substitui
& &
" «
< <
> >
' '

"E aqui está um exemplo de código embutido em XML:"

código Java Código Java em XML
if (a < b)
System.out.println("a is minimum");
<código>
se (a  <  b)
 System.out.println( " a é mínimo " );
</código>

"Uh... Isso não parece bonito."

"Você se lembra que em Java alguns caracteres também têm escape? Por exemplo, "\". E que essa sequência também deve ser escrita duas vezes ao escrever em uma String? Portanto, essa é uma ocorrência comum."

"OK."

"Isso é tudo que tenho para hoje."

"Viva. Finalmente posso fazer uma pausa."