Significado de - <? Xml version = “1.0” encoding = “utf-8”?>

103

Eu sou novo em XML e estou tentando entender o básico. Li a linha abaixo em "Learning XML", mas ainda não está clara para mim. Alguém pode me indicar um livro ou site que explique esses princípios básicos claramente?

De XML Aprendizagem :

A declaração XML descreve algumas das propriedades mais gerais do documento, informando ao processador XML que ele precisa de um analisador XML para interpretar este documento.

O que isto significa?

Eu entendo a xml versionparte - tanto o doc quanto o usuário do doc devem "conversar" na mesma versão do XML. Mas e quanto ao encodingpapel? Por que isso é necessário?

XML Boy
fonte
Possível duplicata de Qual é a utilidade da 'codificação' no cabeçalho XML?
Jonathan Leffler

Respostas:

126

Para entender o atributo "encoding", você precisa entender a diferença entre bytes e caracteres .

Pense nos bytes como números entre 0 e 255, enquanto os caracteres são coisas como "a", "1" e "Ä". O conjunto de todos os caracteres disponíveis é denominado conjunto de caracteres .

Cada caractere possui uma sequência de um ou mais bytes que são usados ​​para representá-lo; no entanto, o número e valor exatos dos bytes dependem da codificação usada e existem muitas codificações diferentes.

A maioria das codificações é baseada em um antigo conjunto de caracteres e codificação chamado ASCII, que é um único byte por caractere (na verdade, apenas 7 bits) e contém 128 caracteres, incluindo muitos dos caracteres comuns usados ​​no inglês dos Estados Unidos.

Por exemplo, aqui estão 6 caracteres no conjunto de caracteres ASCII que são representados pelos valores 60 a 65.

Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      ?       ║
║  64  ║      @       ║
║  65  ║      A       ║
╚══════╩══════════════╝

No conjunto ASCII completo, o valor mais baixo usado é zero e o mais alto é 127 (ambos são caracteres de controle ocultos).

No entanto, quando você começa a precisar de mais caracteres do que o ASCII básico fornece (por exemplo, letras com acentos, símbolos de moeda, símbolos gráficos, etc.), o ASCII não é adequado e você precisa de algo mais extenso. Você precisa de mais caracteres (um conjunto de caracteres diferente) e de uma codificação diferente, pois 128 caracteres não são suficientes para acomodar todos os caracteres. Algumas codificações oferecem um byte (256 caracteres) ou até seis bytes.

Com o tempo, muitas codificações foram criadas. No mundo do Windows, existe o CP1252 ou ISO-8859-1, enquanto os usuários do Linux tendem a preferir o UTF-8. Java usa UTF-16 nativamente.

Uma sequência de valores de byte para um caractere em uma codificação pode representar um caractere completamente diferente em outra codificação ou pode até ser inválida.

Por exemplo, na norma ISO 8859-1 , â é representado por um byte de valor 226, ao passo que em UTF-8 é dois bytes: 195, 162. No entanto, no ISO 8859-1 , 195, 162seriam dois caracteres, Ã, ¢ .

Pense no XML não como uma sequência de caracteres, mas como uma sequência de bytes.

Imagine que o sistema que recebe o XML vê os bytes 195, 162. Como ele sabe quais são esses personagens?

Para que o sistema interprete esses bytes como caracteres reais (e assim exiba-os ou converta-os em outra codificação), ele precisa saber a codificação usada no XML.

Uma vez que as codificações mais comuns são compatíveis com ASCII, no que diz respeito a caracteres alfabéticos básicos e símbolos, nesses casos, a própria declaração pode escapar usando apenas os caracteres ASCII para dizer qual é a codificação. Em outros casos, o analisador deve tentar descobrir a codificação da declaração. Uma vez que sabe, a declaração começa com<?xml , é muito mais fácil fazer isso.

Por fim, o versionatributo especifica a versão XML, das quais existem duas no momento (consulte as versões XML da Wikipedia . Existem pequenas diferenças entre as versões, então um analisador XML precisa saber com o que está lidando. Na maioria dos casos (para inglês falantes de qualquer maneira), a versão 1.0 é suficiente.

rghome
fonte
9
"O próprio cabeçalho usa a codificação ASCII": acho que você está se referindo à declaração XML. Ele é codificado como o resto do documento; UTF-16 ou outros enfeites. Um processador XML pode fazer algumas tentativas até poder ler a especificação de codificação.
Tom Blodget
1
Fiquei com a impressão de que o preâmbulo / prólogo deveria ser codificado em UTF-8 e isso disse ao analisador como converter os bytes restantes (o documento XML real) para a codificação correta. Errado de novo! :-)
Kelly Beard
5
Aqui está uma sugestão de leitura: joelonsoftware.com/2003/10/08/…
Sudip Bhandari
26

Uma declaração XML não é necessária em todos os documentos XML; no entanto, os autores de documentos XHTML são fortemente encorajados a usar declarações XML em todos os seus documentos. Essa declaração é necessária quando a codificação de caracteres do documento é diferente do UTF-8 ou UTF-16 padrão e nenhuma codificação foi determinada por um protocolo de nível superior. Aqui está um exemplo de um documento XHTML. Neste exemplo, a declaração XML está incluída.

<?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE html 
 PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Virtual Library</title>
  </head>
  <body>
    <p>Moved to <a href="http://example.org/">example.org</a>.</p>
 </body>
</html>

Consulte os padrões W3 para XML .

Pavan
fonte
4
que xml vincula a xhtml. você quis dizer vincular a xml w3.org/TR/xml ou nomear o link xhtml?
jrwren
O xhtml se refere à documentação xml. A declaração do tipo de documento não é necessária para xml bem formado.
xvan
"Consulte os padrões W3 para XML." IOW, vá ler o faqing faq, que é um documento longo e longo. Por que as pessoas não podem simplesmente explicar o que "?" faz e porque está lá ???
Blessed Geek
3

Este é o preâmbulo opcional de XML .

  • version="1.0" significa que este é o padrão XML com o qual este arquivo está em conformidade
  • encoding="utf-8" significa que o arquivo é codificado usando a codificação UTF-8 Unicode
Oded
fonte
2

Alguém pode me indicar um livro ou site que explique esses princípios básicos claramente?

Você pode verificar este tutorial XML com exemplos.

Mas e a parte de codificação? Por que isso é necessário?

W3C fornece explicação sobre codificação:

"O conjunto de caracteres do documento para XML e HTML 4.0 é Unicode (também conhecido como ISO 10646). Isso significa que navegadores HTML e processadores XML devem se comportar como se usassem Unicode internamente. Mas isso não significa que os documentos devam ser transmitidos em Unicode. Desde que o cliente e o servidor concordem com a codificação, eles podem usar qualquer codificação que possa ser convertida para Unicode ... "

O.Badr
fonte
-1

A declaração XML no mapa do documento consiste no seguinte:

The version number, ?xml version="1.0"?. 

Isso é obrigatório. Embora o número possa mudar para versões futuras do XML, 1.0 é a versão atual.

A declaração de codificação,

encoding="UTF-8"?

Isso é opcional. Se usada, a declaração de codificação deve aparecer imediatamente após as informações de versão na declaração XML e deve conter um valor que representa uma codificação de caractere existente.

kshama singh
fonte