Web,ruby, Ajax ou qualquer outra coisa que me venha a cabeça (com prioridade para esta última)

25 novembro, 2005

XHTML para leigos

Se dissermos «qual é a coisa qual é ela que antes de o ser já o era?» Então um ouvinte terá que adivinhar qual será a resposta.

Se dissermos tudo o que sobe tem que cair. Nada de tentar adivinhar, uma frase simples e com início e fim adequados. Faz sentido que algo que seja lançado para o alto tenha que voltar à terra. O não voltar desafia a gravidade não estando de acordo com aquilo que vemos no dia a dia.

Isto é muito semelhante às diferenças entre o XHTML e o HTML 4.01. Em XHTML, tudo o que tem um princípio tem que ter um fim. Em HTML, tal não se passa. Pode começar um parágrafo mas, nunca o acabar. Pode ter uma lista de coisas e nunca terminar cada item. Se tivermos que comunicar com alguém que nunca termina as frases, tal será confuso no mínimo.

Pense nisto da seguinte forma: o HTML foi pensado como um pacote, com uma dobra em cada lado. Contudo mesmo a especificação estrita é tem ainda alguma maleabilidade, ou seja o pacote não necessita estar fechado. Não sei o que é que pensa mas é mais provável comer uma bolacha dum pacote fechado de um aberto sabe quem há quanto tempo.

Exemplos:

Abaixo encontrará um exemplo de código HTML válido mesmo sob o tipo de documento HTML 4.01 estrito:



     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" 
                                              "http://www.w3.org/TR/html4/strict.dtd">
     <html>
     <HEAD>
     <meta http-EQUIV="Content-TyPe" content="text/html; 
                                                                CHARSET=utf-8">
     <titlE>Testing HTML 4.01</TITLe>
     </head>
     <body>
     <P>This is some sloppy HTML 4.01!
     <oL>
     <LI>List item one
     <LI>List item two
     <li>List item three</LI>
     </Ol>
     </BODy>
     </HTmL>

Para comparação eis o mesmo reescrito em XHTML 1.1:


     <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
     <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
     <head>
     <meta http-equiv="content-type" content="application/xhtml+xml; 
         charset=utf-8" />
     <title>Testing XHTML 1.1</title>
     </head>
     <body>
     <p>This is some clean XHTML 1.1!</p>
     <ol>
     <li>List item one</li>
     <li>List item two</li>
     <li>List item three</li>
     </ol>
     </body>
     </html>

Como pode comprovar o segundo exemplo é mais legível (desde que saiba sintaxe HTML). Tudo excepto o DOCTYPE está em minúsculas e tudo que tem um início tem um fim explicíto. Não é só mais fácil, evita que o navegador faça algum trabalho de adivinhação sobre o local onde seria suposto encontrar-se os marcadores de fecho. Por exemplo um <li> pode ser fechado no final da linha, mas também é possível envolver coisas dentro de itens de lista.

Um navegador não sabe até atingir o marcador de abertura seguinte se deve fechar o marcador anterior ou se o deve deixar aberto. Assim não há só confusão para uma pessoa que leia o código, mas para a reprodução da página. Implicitamente esta lógica extra necessária provoca um aumento do tempo de carregamento, independentemente do caso de uns tantos bytes extra necessários ao fecho dos marcadores de cada vez que são abertos. O código limpor é reproduzido mais rapidamente, ponto parágrafo. Para prova de tal verifique estes artigo (não o código do sítio).

Terminador por si:

No final do Terminator 2, Arnold diz "não posso acabar comigo". No caso do XHTML isto é bom. Se tudo o que começa tem que ser terminado há alguns pontos nos quais o HTML mesmo que bem formado tem uns quantos problemas. No exemplo acima, há um desses pontos no marcador meta descrevendo o tipo de conteúdo.

Em HTML um meta termina com um ">" significando que tecnicamente ele se mantem aberto. O XHTML corrige isto terminando-se a sí próprio o meta com um traço de fracção final "/>". Outros marcadores com o mesmo comportamento são img, br e hr – todos são tipicamente deixados "em aberto" no HTML, terminando-se a sí próprios no XHTML. Isto torna muito mais fácil uma leitura sabendo que sempre que encontrar um "/>" se está na presença do fim do marcador.

Resumo:

Deixando de lado toda a argumentação para servir XHTML como text/html ou como application/xhtml+xml, prefiro XHTML devido à rigidez inerente à sua validação. Isto claro que não quer dizer que o HTML não possa ser escrito com um padrão muito próximo em mente o problema é que não não é exigído. Veja se me entende não estou a dizer que o XHTML é a forma mais apropriada de fazer as coisas.

Isto não é uma atitude pedante. Sei perfeitamente que o HTML pode ser tão estruturado e semântico quando o XHTML. Roger Johansson e Robert Nyman são perítos em desenvolvimento de web e ambos usam HTML 4.01 estrito de maneira adequada. Ambos fecham tudo e usam código em minúsculas. Robert escreveu um artigo sobre html versus xhtml. Roger é claramente um apaixonado pelo fecho adequado dos marcadores como pode ser comprovado no seu artigo.

Doug Bowman, outra lenda no campo usa XHTML 1.0 estrito, mas serve-o como text/html, sem grande problema. Vejo a lógica por detrás dos argumentos de ambos os lados sobre quererem continuar a trabalhar adequadamente com navegadores obsoletos, etc.

Voltemos ao assunto principal: Resolvemos os mistérios da humanidade? Não. Este artigo está aqui para provar as vantagens de um doctype sobre outro? Não. Só quiz dar uma revisão geral sobre o que me levou inicialmente para o XHTML e porque prefiro continuar a usar. O aspecto fundamentar é que independentemente do que escolha se lhe mantenha fiel. Não tente misturar - mantenha os marcadores em minúsculas e feche-os.

Ou seja no fim disto tudo. Faça uma selecção de um standards e depois aja em conformidade com o mesmo. Uma disputa sobre que standard seguir é fútil.

2 comentários:

caio disse...

consegui captar bem legal a sua mensagem.

clara e objetiva e os exemplos facilitaram ainda mais.

muito obrigado desde já,a propósito apartir de hoje vou observar mais o seus posts.

sou brasileiro,nota-se de longe as nossas variações linguisticas,mas é possível compreender bem.

um grande abraço e obrigado novamente.

Cafonso disse...

O texto acima está algo já datado. Contudo o facto de um navegador efectuar serviço de adivinhação continuar a ser a principal razão para a adopção do XHTML.
No entanto esta continua a não ser adequada para sítios comerciais onde um erro poderia deixar a perder toda e qualquer comunicação com o utilizador final.