JavaRush /Blogue Java /Random-PT /XML em Java: o que é?

XML em Java: o que é?

Publicado no grupo Random-PT
Olá! Hoje conheceremos outro formato de dados chamado XML. Este é um tópico muito importante. Ao trabalhar em aplicativos Java reais, é quase certo que você encontrará problemas relacionados ao XML. Este formato é usado em quase todos os lugares no desenvolvimento Java (descobriremos o porquê exatamente abaixo), então recomendo que você leia a palestra não “diagonalmente”, mas entenda tudo minuciosamente e ao mesmo tempo estude literatura/links adicionais :) Isto o tempo definitivamente não será desperdiçado. Então, vamos começar com os mais simples - “o quê” e “por quê”!

O que é XML?

XML significa eXtensible Markup Language. Você já deve estar familiarizado com uma das linguagens de marcação: já ouviu falar de HTML, que é usado para criar páginas da web :) O que é XML - 1HTML e XML são até semelhantes na aparência:
HTML1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML1
<headline>title</headline>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
HTML2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML2
<chief>title</chief>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
Em outras palavras, XML é uma linguagem para descrever dados.

Por que o XML é necessário?

O XML foi originalmente inventado para armazenamento e transmissão de dados mais convenientes, inclusive pela Internet. Tem uma série de vantagens que lhe permitem lidar com esta tarefa com sucesso. Primeiro, é fácil de ler tanto por humanos quanto por computadores. Acho que você pode entender facilmente o que este arquivo xml descreve:
<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
O computador também entende facilmente esse formato. Em segundo lugar, como os dados são armazenados num formato de texto simples, não haverá problemas de compatibilidade ao transferi-los de um computador para outro. É importante entender que XML não é um código executável, mas sim uma linguagem de descrição de dados . Depois de descrever os dados usando XML, você precisa escrever um código (por exemplo, em Java) que possa enviar/receber/processar esses dados.

Como funciona o XML?

Seu principal componente são as tags: estas são as coisas entre colchetes angulares:
<book>
</book>
Existem tags de abertura e fechamento. O de fechamento possui um símbolo adicional - “ /”, isso pode ser visto no exemplo acima. Cada tag de abertura deve ter uma tag de fechamento correspondente. Eles mostram onde começa e termina a descrição de cada elemento do arquivo. Tags podem ser aninhadas! Em nosso exemplo de livro, a tag <book> possui 3 subtags - <title> , <author> e <year> . Isso não está limitado a um nível: as subtags podem ter suas próprias subtags, etc. Esse design é chamado de árvore de tags. Vejamos a árvore usando o exemplo de um arquivo XML com a descrição de uma concessionária de automóveis:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Aqui temos uma tag de nível superior - <carstore> . Também é chamado de “root” - tag raiz. <carstore> tem uma tag filha, <car>. <car>, por sua vez, também possui 3 tags filhas próprias - <model>, <year> e <price>. Cada tag pode ter atributos - informações adicionais importantes. Em nosso exemplo, a tag <model> possui um atributo “lang” - o idioma em que o nome do modelo está escrito:
<model lang="en">Scania R 770</model>
Desta forma podemos indicar que o título está escrito em inglês. Nossa tag <price> possui um atributo “moeda”.
<price currency="US dollar">150000.00</price>
Desta forma podemos indicar que o preço do carro está em dólares americanos. Assim, o XML possui uma sintaxe "autodescritiva" . Você pode adicionar qualquer informação necessária para descrever os dados. Você também pode adicionar uma linha no início do arquivo indicando a versão XML e a codificação na qual os dados são gravados. Chama-se " prolog " e tem a seguinte aparência:
<?xml version="1.0" encoding="UTF-8"?>
Usamos XML versão 1.0 e codificação UTF-8. Isso não é necessário, mas pode ser útil se, por exemplo, você usar texto em idiomas diferentes em seu arquivo. Mencionamos que XML significa “linguagem de marcação extensível”, mas o que significa “extensível”? Isso significa que é perfeitamente adequado para criar novas versões de seus objetos e arquivos. Por exemplo, queremos que o nosso showroom de automóveis também comece a vender motos! Ao mesmo tempo, no programa precisamos suportar ambas as versões de <carstore> - tanto a antiga (sem motocicletas) quanto a nova. Aqui está nossa versão antiga:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
E aqui está o novo e expandido:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
Adicionamos de forma fácil e simples a descrição das motocicletas ao nosso arquivo :) Ao mesmo tempo, não precisamos de forma alguma definir as mesmas tags secundárias para motocicletas e para carros. Observe que as motocicletas, diferentemente dos carros, possuem um elemento <owner> - o proprietário. Isso não impedirá que um computador (ou uma pessoa) leia os dados.

Diferenças entre XML e HTML

Já dissemos que XML e HTML são muito semelhantes em aparência. Portanto, é muito importante saber como eles diferem. Em primeiro lugar, eles são usados ​​para finalidades diferentes. HTML - para marcação de páginas da web. Por exemplo, se você precisa criar um site, usando HTML você pode especificar: “O menu deve estar no canto superior direito. Deveria ter tais e tais botões.” Em outras palavras, o objetivo do HTML é exibir dados. XML - para armazenar e transmitir informações de uma forma conveniente para humanos e computadores. Este formato não contém nenhuma instrução sobre como esses dados devem ser exibidos: depende do código do próprio programa. Em segundo lugar, eles têm uma diferença técnica importante. As tags HTML são predefinidas. Em outras palavras, para criar um título (por exemplo, uma inscrição grande no início da página), apenas as tags <h1></h1> são usadas em HTML (para títulos menores - <h2></h2>, < h3></h3>). Você não poderá criar títulos em HTML usando tags com títulos diferentes. XML não usa tags predefinidas. Você pode dar às tags os nomes que desejar - <header>, <title>, <idontknow2121>.

Resolução de conflitos

A liberdade que o XML oferece também pode levar a alguns problemas. Por exemplo, a mesma entidade (por exemplo, um carro) pode ser usada por um programa para finalidades diferentes. Por exemplo, temos um arquivo XML que descreve máquinas. No entanto, nossos programadores não concordaram previamente entre si. E agora, além dos dados de carros reais, nosso xml também inclui dados de modelos de brinquedos! Além disso, eles têm os mesmos atributos. Nosso programa recebe o seguinte arquivo XML. Como podemos diferenciar um carro real de um modelo de brinquedo?
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
Prefixos e namespaces nos ajudarão aqui. Para separar os carros de brinquedo dos reais em nosso programa (e, em geral, quaisquer brinquedos de seus protótipos reais), introduzimos dois prefixos - “real” e “brinquedo”.
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
Agora nosso programa será capaz de distinguir entre entidades! Qualquer coisa com o prefixo toy será classificada como brinquedo :) Porém, ainda não terminamos. Para usar prefixos, precisamos registrar cada um deles como um namespace. Bem, na verdade, “registrar” é uma palavra forte :) Você só precisa criar um nome exclusivo para cada um deles. É como acontece com as classes: uma classe tem um nome abreviado ( Cat) e um nome completo com todos os pacotes ( zoo.animals.Cat) Para criar namespaces exclusivos, geralmente é usado um URI . Às vezes, o endereço da Internet é substituído aqui, onde as funções e a finalidade deste namespace são descritas em detalhes. Mas não precisa ser um endereço de Internet válido. Muitas vezes, os projetos simplesmente usam strings semelhantes a URI que ajudam a rastrear a hierarquia dos namespaces. Aqui está um exemplo:
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
Claro, não existe um site na Internet no endereço http://testproject.developersgroup1.companyname/department2/namespaces/real Mas há informações úteis: o grupo de desenvolvedores “developersgroup1” do departamento “department2” é responsável por criar o namespace “real”. Se precisar adicionar novos nomes ou discutir possíveis conflitos com eles, sabemos a quem recorrer. Às vezes, um endereço real da Internet com uma descrição desse namespace é usado como um nome exclusivo para um namespace. Por exemplo, se for uma grande empresa e seu projeto será utilizado por milhões de pessoas em todo o mundo. Mas nem sempre isso é feito: há uma discussão sobre esse assunto no Stackoverflow . Em princípio, o requisito para usar URIs como nomes para namespaces não é estrito: você pode apenas usar strings aleatórias. Esta opção também funcionará:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Mas há uma série de vantagens em usar URIs. Você pode ler mais sobre isso aqui .

Padrões XML básicos

Os padrões XML são um conjunto de extensões que adicionam funcionalidades adicionais aos arquivos XML. XML tem muitos padrões, mas vamos apenas dar uma olhada nos mais importantes e descobrir o que eles permitem que o AJAX , um dos padrões XML mais famosos, faça. Ele permite que você altere o conteúdo de uma página da web sem recarregá-la! Parece legal? :) Você pode experimentar essa tecnologia pessoalmente aqui . XSLT - permite converter texto XML para outros formatos. Por exemplo, usando XSLT, você pode transformar XML em HTML! O propósito do XML, como já dissemos, é descrever dados, não exibi-los. Mas usando XSLT podemos contornar esta limitação! Aqui está uma sandbox com um exemplo funcional, onde você pode ver por si mesmo como funciona :) XML DOM - permite obter, alterar, adicionar ou remover elementos individuais de um arquivo XML. Aqui está um pequeno exemplo de como funciona. Temos um arquivo books.xml:
<bookstore>
   <book category="cooking">
       <title lang="en">Everyday Italian</title>
       <author>Giada De Laurentiis</author>
       <year>2005</year>
       <price>30.00</price>
   </book>
   <book category="children">
       <title lang="en">Harry Potter</title>
       <author>J K. Rowling</author>
       <year>2005</year>
       <price>29.99</price>
   </book>
</bookstore>
Existem dois livros nele. Os livros têm um elemento como título - <título>. E aqui podemos usar JavaScript para obter todos os títulos de livros do nosso arquivo XML e enviar o primeiro deles para o console:
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
Novamente, recomendo ver como este exemplo funciona usando um sandbox :) DTD (“definição de tipo de documento”) - permite definir uma lista de elementos permitidos para alguma entidade em um arquivo XML. Por exemplo, estamos trabalhando no site de uma livraria e todas as equipes de desenvolvimento concordaram que, para o elemento livro, apenas os atributos título, autor e ano devem ser especificados nos arquivos XML. Mas como podemos nos proteger da desatenção? Muito fácil!
<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
Aqui definimos uma lista de atributos válidos para <book>. Tente adicionar um novo elemento lá e você receberá um erro imediatamente!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Erro! “Element mainhero não é permitido aqui” Existem muitos outros padrões XML. Você pode se familiarizar com cada um deles e tentar se aprofundar no código no site do WC3 (seção “Padrões XML importantes”). E em geral, se você precisar de informações sobre XML, você encontra quase tudo lá :) Bom, nossa palestra chegou ao fim. É hora de voltar às tarefas! :) Vê você!
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION