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

23 setembro, 2006

FAQ HTML versus XHTML

Este documento é uma tradução da FAQ HTML and XHTML Frequently Answered Questions

Perguntas frequentes respondidas sobre HTML e XHTML (FAQs)

Editor: Steven Pemberton, W3C/CWI

Data da versão: 21 Julho 2004

Outras FAQs relaccionadas:

Para comentar este documento ou enviar sugestões para pergunta, por favor enviar correio electrónico para www-html-editor@w3.org, e incluir a palavra FAQ no assunto.

Tabela de Conteúdos

  1. Porque é que é necessário o XHTML? O HTML não é suficientemente bom?
  2. Quais as vantagens de usar XHTML no lugar do HTML?
  3. Posso colocar uma declaração XML no topo de documentos HTML existentes? Posso misturar documentos HTML 4.01 e XHTML?
  4. Qual a forma mais fácil de converter documentos HTML em XHTML?
  5. Porque é que os navegadores são tão picuinhas com o XML? Eram mais liberais com o HTML.
  6. Porque é que me devo preocupar com que os meus documentos tenham um HTML correcto? Os documentos são bem apresentados pelo meu navegador.
  7. Onde é que posso ir para verificar se o meu documento usa marcação correcta?
  8. Porque é que se refer a "agente utilizador" em vez de "navegador"?
  9. Porque é que tenho que usar espaços de nomeação em XHTML?
  10. Porque é que é permitido enviar documentos XHTML 1.0 como text/html?
  11. Quais são os navegadores que aceitam o tipo de media application/xhtml+xml?
  12. O Microsoft Internet Explorer aceita o tipo de media application/xhtml+xml?
  13. O CSS tem muitas regras especiais aplicáveis só a HTML. Essas regras são aplicáveis ao XHTML?
  14. document.write funciona em XHTML?
  15. Porque é que não é permitido o envio de documentos XHTML 1.1 como text/html?
  16. Porque é que o atributo target foi eliminado de XHTML 1.1?
  17. O que é a modularização do XHTML?
  18. Porque é que é necessário o XHTML2? Não chega o XHTML 1?
  19. O marcador <img> irá ser substituído pelo marcador <object> no XHTML2?
  20. Porque é que o XHTML2 não usa XLink?
  21. Porque é que o XHTML2 não é retrocompatível?
  22. Porque é que xml:space está igualado a 'preserve' em todos os elementos XHTML? Não desejo ver espaço em branco na minha saída.

Porque é que é necessário o XHTML? O HTML não é suficientemente bom?

O HTML é provavelmente a linguagem de marcação mais bem sucedida no mundo. Mas quando o XMl foi introduzido, foi organizado um workshop de dois dias onde foi discutido se uma nova versão de HTML em XML era ou não necessária. A opinião desse workshop foi um claro "Sim": com um HTML baseado em XML as outras linguagem XML poderiam incluir bocados em XHTML e os documentos XHTML poderiam incluir partes noutras linguagens de marcação. Poderiamos tirar partido da nova concepção para limpar algumas partes do HTML que necessitassem de lavagem, e adicionar alguma funcionalidade nova como melhores formulários..

Quais as vantagens de usar XHTML no lugar do HTML?

Se o seu documento for XHTML 1.0 puro só (sem incluir partes noutras linguagens de marcação) então não irá notar muita diferença. Contudo à medida que mais ferramentas XML estão disponíveis, tais como XSLT para transformação de documentos irá começar a notar vantagens na utilização de XHTML. Por exemplo XForms irá permitir alterar documentos XHTML (ou qualquer outro tipo de documento XML) de modo simples e controlável. As aplicações da Web Semântica irão poder tirar partido dos documentos XHTML.

Se o seu documento é mais do que XHTML 1.0, por exemplo incluindo MathML, SMIL, ou SVG, então as vantagens são imediatas. Não é possível fazer esse tipo de coisas com o HTML.

Posso colocar uma declaração XML no topo de documentos HTML existentes? Posso misturar documentos HTML 4.01 e XHTML?

Não. O HTML não é um formato XML. Tem que proceder às alterações necessárias para tornar o documento num documento XML correcto antes de o poder ver aceite como tal.

Qual a forma mais fácil de converter os meus documentos HTML em XHTML?

HTML Tidy dá-lhe a opção de transformar qualquer documento HTML num documento XHTML. Amaya é um navegador/editor que guarda documentos em HTML como documentos em XHTML.

Porque é que os navegadores são tão picuinhas com o XML? Eram mais liberais com o HTML.

É deliberado. Os navegadores HTML aceitam praticamente qualquer entrada, correcta ou incorrecta, e tentam fazer o que for mais adequado com ela. Esta correção de erros torna os navegadores muito difíceis de escrever em especial se se estiver à espera que se espere deles que se comportem de igual modo. Isto também significa que um grande número de documento HTML está incorrecto, porque como são correctamente apresentados num navegador o autor poderá não se aperceber de que os mesmos contenham erros. Isto torna incrivelmente difícil escrever novos agentes utilizadores para a web visto muitos documentos que reclamam ser escritos em HTML são muito pobres frequentemente.

Porque é que me devo preocupar com que os meus documentos tenham um HTML correcto? Os documentos são bem apresentados pelo meu navegador.

Todos os navegadores sabem como tratar HTML correcto. Contudo se o HTML estiver errado o navegador tem que reparar o documento e visto nem todos os navegadores corrigirem um documento do mesmo modo, isto introduz diferenças, e assim o seu documento pode ser visto de forma diferente em diferentes navegadores. Como há centenas de navegadores diferentes, e estão a sair mais a todo o momento (não só para PC, mas para PDAs, telefones móveis, televisores, impressoras e mesmo figoríficos), é impossível testar o seu documento em todos os navegadores. Se usar HTML incorrecto no seu documento poderá suceder que não possa funcionar num navegador e então a falha é sua, se o seu HTML estiver correcto e não funcionar num determinado navegador então o erro é do navegador.

Onde é que posso ir para verificar se o meu documento usa marcação correcta??

O W3C oferece um serviço em http://validator.w3.org/. O navegador/editor Amaya também verifica se a sua marcação é correcta.

Porque é que se refer a "agente utilizador" em vez de "navegador"?

embora os navegadores sejam importantes utilizadores de HTML e XHTML, há outros programas e sistemas que leem esses documentos. Os motores de busca por exemplo leem documentos mas não são navegadores. Ao usar o termo"agente utilizador" estamos a tentar lembrar as pessoas dessa diferença.

Por exemplo, quando usa o Google irá ver debaixo de alguns dos resultados da busca algo como "Esta página usa frames, mas o seu navegador não os suporta." levando a que algumas pessoas não cliquem nessa ligação. O autor do sítio web em questão não percebeu que há mais do que navegadores, e que devem incluir algo melhor do que este simples texto na secção <noframes>, de forma a não parecerem ideotas a quem faz buscas pelo respectivo sítio.

Porque é que tenho de usar os espaços de nomeação em XHTML?

Nos primórdios do HTML diferentes grupos e companhias adicionavam novos elementos e atributos ao HTML à vontade. Isto ameaçou provocar um caos de versões HTML não inter-operativas. XML (o X está no lugar de eXtensível) permite a qualquer pessoas usar elementos e elementos de difernetes linguagens, mas para que um navegador ou outro agente utilizador saiba onde cada elemento pertence a que linguagem é necessário dizer-lhe. As declarações de espaço de nomeação são só esse mecanismo.

Porque é que é permitido enviar documentos XHTML 1.0 como text/html?

XHTML é um formato XML; isto significa que falando estritamente deve ser enviado num tipo de media relativo a XML (application/xhtml+xml, application/xml, ou text/xml). Contudo o XHTML 1.0 foi concebido cuidadosamente de forma a também funcionar com agentes utilizadores HTML anteriores. Se seguir algumas directrizes simples, pode fazer com que muitos documentos XHTML 1.0 funcionem em navegadores antigos. Contudo esses navegadores só entendem o tipo de media text/html, e assim tem que usar este tipo de media para enviar aos mesmos os documentos em XHTML 1.0. Lembre-se contudo que enviar documentos XHTML aos navegadores como text/html significa que esses documentos são vistos como documentos HTML e não como XHTML por esses navegadores.

Que navegadores aceitam o tipo de media application/xhtml+xml?

Os navegadores conhecidos incluem todos os navegadores baseados em Mozilla tal como o Netscape 5 e versão mais recente, Galeon e Firefox, assim como o Opera, Amaya, Camino, Chimera, DocZilla, iCab, Safari, e todos os navegadores de telefones móveis que aceitem WAP2. De facto qualquer navegador moderno. A maior parte aceita os documentos XHTML como application/xml também. Ver os tipos de media XHTML para detalhes.

O Microsoft Internet Explorer aceita o tipo de media application/xhtml+xml?

Não. Contudo há um truque para permitir servir documentos XHTML1.0 ao Internet Explorer como application/xml.

Incluir no topo do documento a linha a negrito:

<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet type="text/xsl" href="copy.xsl"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

onde copy.xsl é um ficheiro que contém o seguinte:

<stylesheet version="1.0"
     xmlns="http://www.w3.org/1999/XSL/Transform">
    <template match="/">
        <copy-of select="."/>
    </template>
</stylesheet>

Note que este ficheiro deverá encontrar-se no mesmo sítio do que o documento que se lhe refere.

Embora esteja a server o documento como XML, e seja analisado como XML, o navegador pensa que recebeu text/html, e assim o seu documento XHTML 1.0 tem que seguir algumas directrizes para servir navegadores antigos.

O seu XHTML irá continuar a funcionar nos navegadores que aceitem XHTML 1.0 como application/xml.

CSS has a lot of special rules that only apply to HTML. Do these also apply to XHTML?

No. CSS rules that apply only to HTML, apply only to documents that are delivered as text/html.

document.write funciona em XHTML?

Não. Devido à maneira como o XML foi definido não é possível usar truques como este, esta marcação é gerada por programação dinâmica enquanto o analisador está ainda a analizar a marcação recebida.

Pode ainda alcançar os mesmos efeitos, mas terá que usar o DOM para adicionar ou apagar elementos.

Porque é que não é permitido enviar documentos XHTML 1.1 como text/html?

XHTML 1.1 é XML puro, e só se pretendeu que fosse XML. Não pode ser enviado a navegadores antigos de forma fiável. Assim os documentos XHTML 1.1 têm que ser enviados com um tipo de media relativo a XML, tal como application/xhtml+xml.

Porque é que o atributo target foi eliminado de XHTML 1.1?

Não foi. O XHTML 1.0 vem em três versões: strict, transitional, e frameset. Todas foram mantidas deliberadamente tão proximas da HTML 4.01 na medida em que o XML o permite. O XHTML 1.1 é uma versão actualizada da XHTML 1.0strict, e nenhuma versão HTML strict teve um atributo target. As outras duas versões, transitional e frameset, não foram actualizadas visto não haver nada a actualizar. Se desejar usar o atributo target use XHTML 1.0 transitional.

O que é isso de usar modularização de XHTML?

A modularização XHTML não se destina aos utilizadores normais de XHTML, mas a conceptores de linguagens baseadas em XHTML. Observou-se que companhias e grupos tinham uma tendência para conceber as suas próprias versões de HTML e XHTML que eram frequentemente não interoperacionais a níveis básicos. A modularização do XHTML reparte o XHTML numa número de módulos que podem ser individualmente seleccionados quando se define uma nova linguagem; desta forma uma qualquer linguagem baseada em XHTML que use tabelas garantidamente usa a mesma definição de tabelas e não uma versão divergente. A modularização torna também claro onde é aceitável adicionar novos elementos e onde tal não é razoável.

Porque é que é necessário o XHTML2 ? O XHTML 1 não é suficientemente bom?

O HTML e o XHTML prestaram um bom serviço, mas há muias coisas que podem ser melhoradas. Áreas que receberam atenção particular incluem melhores possibilidades de estruturação, remoção de capacidades que estão duplicadas em XML, usabilidade, acessibilidade, internacionalização, independência de dispositivo, melhores formulários e reduzir necessidade de programação.

O marcador <img> está a ser substituído pelo <object> em XHTML2?

Não. <img> está a ser substituído em XHTML2 mas por outra coisa ( embora possa usar <object> se desejar).

A concepção de <img> levanta vários problemas em HTML:

  • Não tem possibilidades de degradação, assim se usar uma imagem do tipo PNG por exemplo, e o navegador não poder tratar desse tipo, a única alternativa é usar o texto alternativo. Este facto limitou a adopção de imagens PNG, que em muitos casos são melhores do que as GIF e JPG, visto as pessoas terem continuado a usar o formato denominador comum de forma a assegurar que todos possam ver as imagens.
  • O texto alternativo não pode incluir marcação, e portanto se usado só se obtém texto simples.
  • É possível incluir uma ligação longdesc com uma descrição da imagem (ou sua finalidade), para ajudar pessoas que a não possam ver mas isso raramente é feito.

O que o XHTML2 diz é que todas as imagens são equivalentes a uma parte do conteúdo, fá-lo ao permitir-lhe colocar um atributo src em todos os elementos. O que isto significa é que se a imagem está disponível e o navegador a puder processar, usá-la, caso contrário usar o conteúdo do elemento, por exemplo:

<p src="mapa.png">Sair da estação, voltar à esquerda e 
seguir em frente até à <strong>Rua Direita</strong>,
   aí voltar à direita</p>

A vantagem é a de que se a imagem não estiver disponível por qualquer razão (tal como falha de rede) ou o navegador não a puder reproduzir o documento continua a ser útil. Se desejar fornecer mais do que um tipo de imagem pode:

<p src="mapa.png"><span src="mapa.gif">Sair da estação...</span></p>

embora seja melhor usar negociação de conteúdos no caso do seu servidor o suportar (e a maior parte fá-lo):

<p src="mapa">Sair da estação...</p>

o que irá negociar com o navegador que tipo de imagens aceita e qual a preferida do navegador. Se não houver imagem disponível então o conteúdo do elemento será usado. Isto tem a vantagem adicional de pode adicionar outros tipos de imagens no seu servidor e não ter que alterar a página para que esta funcione.

XLink e XHTML têm requisitos diferentes para ligações e verificou-se serem irreconciliáveis.

Porque é que o XHTML2 não é retrocompatível?

É, mas de um modo diferente das anteriores versões de HTML serem retrocompatíveis.

Visto as primeiras versões de HTML serem linguagens de finalidade específica era necessário assegurar um nível de retrocompatibilidade com novas versões de forma a que os novos documentos podessem ser utilizáveis em navegadores antigos. Por exemplo é por essa razão que o elemento <meta> tem o seu conteúdo num atributo em vez de no conteúdo do elemento, porque nesse caso iria aparecer em navegadores antigos.

Contudo graças ao XML e às folhas de estilo, tal retrocompatibilidade estrita ao nível do elemento deixou de ser necessária, visto um navegador baseado em XML, o que significa cerca de 95% dos navegadores em uso no momento de redação desta resposta, pode processar novas linguagens de marcação sem necessidade de ser actualizado. Muito do XHTML 2 funciona nos actuais navegadores, navegadires que não foram pré-programados para aceitar XHTML2. A maior parte funciona mas não tupo: quando os formulários e as tabelas foram adicionadas ao HTML as pessoas tiveram que esperar por novas versões de navegadores; de forma similar algumas partes do XHTML 2, tais como XForms e XML Events, ainda precisam que os agentes utilizadores compreendam essa funcionalidade.

Porque é que xml:space está definida como 'preserve' em todos os elementos XHTML? Não desejo ter espaço em branco extra na minha saída.

O atributo xml:space trata-se de input: isto é, controla se os espaços irão estar presentes no DOM (isto é, se a versão interna do documento dentro do navegador os inclui), nada diz de como irão surgir no ecrã. A saída de espaço em branco é controlada via a propriedade de CSS 'whitespace'. Se a propriedade tiver o valor 'pre' os espaços irão ser preservados no DOM na saída se a propriedade tiver o valor de 'normal' o espaço em branco junta-se (o CSS3 irá ter mais propriedades para permitir um maior controlo).

Esta é a razão pela qual todos os elementos têm xml:space="preserve" em XHTML2, caso contrário a propriedade CSS 'whitespace' não teria efeito e não teria controlo sobre o espaço em branco visível. A folha de estilo por omissão irá tratar de dar o valor a 'whitespace' de 'normal' para todos os elementos com a excepção de <pre>, mas será livre de os alterar.


Sem comentários: