Cookies para estatística e publicidade
Usamos cookies de estatística e de publicidade, ambos enviados ao Google. Recusar não muda nada do que você vê.Ler a página de privacidade
XML
O antepassado prolixo do JSON. Continua sendo a espinha dorsal da troca de dados entre empresas e órgãos públicos.
XML
XML é um formato de texto puro que abre em qualquer editor. Ele é usado para mover dados entre programas.
A extensão é .xml e o nome por extenso é Extensible Markup Language. Os dois importam menos do que aquilo que o arquivo consegue carregar, e é disso que trata o resto desta página.
A W3C publicou o formato em 1998. A especificação é XML 1.0.
A um formato que se manteve legível por tanto tempo dá para confiar algo que você quer de volta daqui a dez anos.
Ela está publicada por inteiro, então dá para implementá-la a partir do documento em vez de por observação — é por isso que o formato aparece em tantos programas e por isso que arquivos escritos há vinte anos ainda abrem. Especificação publicada não é o mesmo que livre de royalties: quando o formato embrulha um codec, o licenciamento das patentes é uma questão à parte, que a norma não resolve.
XML guarda o conteúdo exatamente. Salvar de novo não muda nada, então dá para abrir, editar e salvar quantas vezes você quiser sem acumular estrago — e é isso que faz dele um formato de trabalho e não de entrega.
XML tem sintaxe de comentário — essa é a diferença entre um arquivo que uma pessoa mantém e um que um programa escreve. Os comentários são a primeira coisa perdida na conversão para um formato que não os tem, e nada avisa.
Visual Studio Code e oXygen XML Editor leem esse formato, e a maioria dos programas do mesmo tipo também.
Quando um arquivo não abre, o formato raramente é o problema — mais comum é o programa ser mais antigo que ele. Converter para algo mais antigo é o caminho confiável, e é para isso que serve o resto deste site.
Qualquer navegador atual lê o formato.
Dá para colocá-lo numa página ou anexá-lo a uma mensagem sem se perguntar o que o outro lado tem instalado.
XML foi feito para ser aberto e alterado. Mantenha o arquivo nesse formato enquanto o trabalho estiver em andamento e exporte a partir dele sempre que precisar de uma cópia pronta.
XML não descreve nada por si só. É um conjunto de regras para marcar um documento com elementos aninhados e atributos, e o sentido vem de qual vocabulário for construído em cima — RSS, SVG, SOAP, XBRL, HL7, arquivos de sitemap, layouts do Android, o interior de todo arquivo Office e OpenDocument.
Então «um arquivo XML» diz tanto sobre o conteúdo quanto «um arquivo de texto» diz. O que importa é qual vocabulário ele segue, e isso costuma estar declarado no elemento raiz ou por um esquema para o qual o documento aponta.
Bem-formado significa que a sintaxe está correta: um elemento raiz, toda tag fechada, elementos aninhados corretamente, atributos entre aspas, e `&` e `<` escapados onde significam texto. Os outros dois caracteres reservados são mais estreitos do que costumam ensinar: `>` só precisa ser escapado dentro de `]]>`, e as aspas só onde encerrariam o atributo em que estão. Um analisador recusa qualquer coisa menos que isso — XML é deliberadamente estrito, e diferente do HTML, não há recuperação de erro.
Válido significa também estar conforme um esquema: este elemento pode conter aqueles elementos, este atributo é obrigatório, este valor precisa ser uma data. Um documento pode ser perfeitamente bem-formado e completamente errado para seu propósito, e um analisador validante é o que pega a diferença. Em intercâmbio regulado, essa validação é o contrato, e é a maior parte do motivo de o XML continuar onde está.
Namespaces existem para que dois vocabulários possam ser combinados sem seus nomes de elemento colidirem — uma tabela XHTML e a tabela de um catálogo de móveis no mesmo documento. Um namespace é identificado por uma URI, que é um nome e não um endereço: nada é buscado dali, e não precisa resolver para nada.
São também a maior fonte de bugs de análise de XML. Uma consulta escrita para um elemento sem considerar seu namespace não bate com nada, silenciosamente, e o documento parece bem para uma pessoa lendo. Se um analisador insiste que um documento não tem tal elemento enquanto você está olhando bem para ele, o namespace é o primeiro lugar a checar.
A primeira linha de um arquivo XML bem-comportado declara a versão e a codificação de caracteres. Diferente de um arquivo de texto simples, isso torna a codificação parte do documento em vez de um palpite — motivo pelo qual XML lida com texto internacional de forma mais confiável do que CSV ou INI jamais fizeram.
Duas consequências valem saber. Um arquivo declarando uma codificação e salvo como outra fica quebrado de um jeito que produz erros de análise confusos em vez de caracteres visivelmente errados. E uma marca de ordem de bytes antes da declaração incomoda alguns analisadores, então «UTF-8 sem BOM» é o ajuste a preferir aqui como em outros lugares.
XML tem um mecanismo para definir abreviação — uma entidade — e classicamente ela podia apontar para um recurso externo. Um analisador que resolve essas entidades vai ler arquivos locais ou fazer requisições de rede em nome de quem forneceu o documento.
Isso é a vulnerabilidade XXE, e já produziu violações reais expondo arquivos de servidor através de um upload de aparência comum. Um truque relacionado, o ataque billion laughs, aninha definições de entidade para que um arquivo pequeno se expanda a gigabytes e esgote a memória. Se entidades externas são resolvidas por padrão varia por biblioteca em vez de estar resolvido — os analisadores embutidos do Java e o lxml do Python resolvem entidades externas a menos que instruídos ao contrário —, então isso é um ajuste a checar em vez de presumir. Qualquer XML vindo de fora é entrada não confiável.
XPath endereça qualquer parte de um documento com uma expressão compacta, e é genuinamente excelente — uma única linha puxa cada elemento de preço dentro de um produto cujo atributo de categoria bate. XSLT transforma um documento XML em outro, ou em HTML ou texto, declarativamente. XSD define e força um esquema. Os três são padrões, os três são maduros, e os equivalentes do JSON chegaram depois e são suportados de forma menos uniforme.
É isso que as pessoas querem dizer quando falam que XML é verboso mas capaz. Os colchetes angulares são o preço; o maquinário de consulta, transformação e validação é o que está sendo comprado, e nas indústrias que precisam disso ainda não existe nada bem equivalente.
Qualquer editor de texto abre, e um editor com suporte a XML vale a pena ter: vai recolher seções, checar boa formação enquanto você digita, e formatar bem um arquivo que chegou numa única linha enorme — que é como XML gerado por máquina geralmente chega. Navegadores também renderizam XML como uma árvore recolhível, o jeito mais rápido de olhar um arquivo desconhecido.
Converter para JSON é comum e tem perdas numa direção: atributos não têm equivalente em JSON e recebem um nome de chave inventado, e conteúdo misto — texto com marcação dentro — não tem representação nenhuma. XML no formato de dados converte de forma limpa; XML no formato de documento não sobrevive à ida e volta. Converter para CSV funciona só onde o documento é realmente uma lista plana de registros vestida de colchetes angulares.
| Extensão | .xml |
|---|---|
| Tipo de mídia | application/xml, text/xml |
| Publicado por | W3C |
| Primeira publicação | 1998 |
| Especificação | XML 1.0 |