W3C

Esta é a tradução do artigo "HTML and XHTML Frequently Answered Questions" de autoria de Steven Pemberton publicado no site do W3C.

1. A versão oficial e original, em inglês, deste tutorial, encontra-se em: http://www.w3.org/MarkUp/2004/xhtml-faq e os seus direitos são conforme:

Copyright ©2002 W3C® (MIT, INRIA, Keio), Todos os direitos reservados. São aplicáveis as disposições do W3C relativas a responsabilidade, marcas, uso de documentos e licença de software

2. A única versão oficial deste documento é a versão em língua inglesa que se encontra no sítio do W3C.

3. O presente documento traduzido para a língua portuguesa do Brasil, pode conter erros de tradução.

Este documento foi traduzido em 17 de dezembro de 2004 e atualizado em 10 de janeiro de 2005 por: Maurício Samy Silva e encontra-se hospedado no seu sítio "CSS para WebDesign" em http://www.maujor.com/
A traduçao foi feita somente para este documento, vale dizer, as páginas remetidas pelos links aqui indicados, estão em sua versão original em língua inglesa.

FAQ - Perguntas frequentes sobre HTML e XHTML

Editor: Steven Pemberton, W3C/CWI

Data desta versão: 21 de julho de 2004

Outros FAQs: (em inglês)

Comentários ou sugestões para inclusão de perguntas neste documentos serão bem-vindas para o e-mail www-html-editor@w3.org, com a palavra FAQ no assunto.

Índice

  1. Por que usar XHTML? O HTML já não é suficiente?
  2. Quais são as vantagens de se usar XHTML em lugar do HTML?
  3. Posso colocar uma declaração XML em um documento HTML existente? Posso misturar documentos HTML 4.01 com documentos XHTML?
  4. Qual é a maneira mais fácil de se converter um documento HTML em XHTML?
  5. Por que os browsers são tão complicados com XML? Eles se comportam bem mais amigavelmente com HTML.
  6. Por que devo ser tão meticuloso se meus documentos estão em um HTML correto? Eles são renderizados sem problemas.
  7. Aonde posso checar se minha marcação está correta?
  8. Por que você diz "agente de usuário" em lugar de "browser"?
  9. Por que devo usar estes tais de " namespace" em XHTML?
  10. Por que é permitido servir documentos XHTML 1.0 como text/html?
  11. Quais são os browsers que aceitam a aplicação application/xhtml+xml como tipo de mídia?
  12. O Microsoft Internet Explorer aceita o tipo de mídia application/xhtml+xml?
  13. Em CSS existe um conjunto de regras especiais que se aplicam específicamente para HTML. Elas são aplicáveis também ao XHTML?
  14. A declaração document.write aplica-se ao XHTML?
  15. Por que não se permite servir documentos XHTML 1.1 na forma text/html?
  16. Por que o atributo "target" foi retirado do XHTML 1.1?
  17. Qual é uso para a Modularização do XHTML (XHTML Modularization)?
  18. Por que precisaremos de XHTML2 ? O XHTML 1 já não é suficiente ?
  19. O elemento <img> será substituido por <object> no XHTML2?
  20. Por que XHTML2 não usa XLink?
  21. Por que XHTML2 não é compatível com aplicações passadas ?
  22. Porque xml:space é setada para 'preserve' em documentos XHTML? Eu não desejo que espaços em branco sejam visualizados na renderização de meu documento.

Por que usar XHTML? O HTML já não é suficiente?

HTML é sem dúvida a linguagem de marcação de maior sucesso no mundo. Por ocasião da apresentaação do XML, organizou-se um workshop de dois dias para se discutir a necessidade de uma nova versão do HTML que pudesse ser usada como aplicação XML. A opinião extraida daquele workshop foi bem clara. "Sim": a existência de um HTML servido como XML iria compatibilizá-lo com outras aplicações XML. Vantagens adicionais viriam ao se tornar o HTML uma marcação mais clara e limpa ensejando a que novas facilidades fossem acrescidas como por exemplo, formulários bem mais funcionais.

Quais são as vantagens de se usar XHTML em lugar do HTML?

Se o seu documento está escrito em um XHTML 1.0 puro (sem estar misturado com outras linguagens de marcação) então você não deve ter notado ainda muitas diferenças. Contudo à medida que mais e mais ferramentas XML são disponibilizadas, tais como o XSLT para transformação de documentos, você começará a perceber as vantagens do XHTML. XForms por exemplo permitirá a edição de documentos XHTML (ou mesmo de qualquer tipo de documento XML) permitindo seu total controle de maneira bem simples. Aplicações de Semantic Web poderão integrar-se perfeitamente a documentos XHTML.

Se o seu documento vai além do XHTML 1.0, incluindo por exemplo MathML, SMIL, ou SVG, então sim as vantagens crescerão: estas vantagens você não terá com HTML.

Posso colocar uma declaração XML em um documento HTML existente? Posso misturar documentos HTML 4.01 com documentos XHTML?

Não. HTML não é compatível com o formato XML. Você terá que fazer as adaptações necessárias no HTML para serví-lo como XML.

Qual é a maneira mais fácil de se converter um documento HTML em XHTML?

HTML Tidy é uma ferramenta para transformação de HTML em XHTML. Amaya é um browser/editor que salva documentos HTML como XHTML.

Por que os browsers são tão complicados com XML? Eles se comportam bem mais amigavelmente com HTML.

Este comportamento complicado é proposital. Em HTML os browsers são bastante tolerantes com erros de marcação e tentam interpretar os erros. Porém, esta funcionalidade em interpretar erros, torna o desenvolvimento dos browsers uma tarefa árdua, além do fato de que cada fabricante adota sua solução proprietária de interpretação do erro. Um número incrível de documentos HTML existentes contém erros de marcação, mas graças a interpretação própria dos browsers eles são renderizados OK e o desenvolvedor nem fica sabendo dos erros que cometeu. Isto dificulta demais a programação e desenvolvimento de novos agentes de usuários voltados para um HTML tão precariamente escrito.

Por que devo ser tão meticuloso se meus documentos estão em um HTML correto? Eles são renderizados sem problemas.

Qualquer browsers sabe muito bem como renderizar um HTML correto. Contudo se o HTML contém erros o browser vai tentar corrigí-los, e como cada browser tem sua maneira própria de correção isto leva a renderizações com aparências diferentes em browsers diversos. Como existem centenas de browsers, e, mais ainda sendo introduzidos a cada dia (não só para PCs, mas também para PDAs, telefones portáteis, televisores, impressoras e mesmo geladeiras), torna-se impossível testar seu documento em todos eles. Se você usar um HTML incorreto e o seu documento falhar em um determinado browser o erro é seu, mas se sua marcação estiver correta e mesmo assim o documento falhar trata-se de um "bug" do browser.

Aonde posso checar se minha marcação está correta?

W3C oferece um serviço de validação em http://validator.w3.org/. O browser/editor Amaya também oferece verificação para sua marcação.

Por que você diz "agente de usuário" em lugar de "browser"?

Embora os browsers sejam importantes usuários dos documentos HTML e XHTML, existem outros programas e sistemas que também lêem aqueles documentos. Mecanismos de busca por exemplo lêem e não são browsers. Ao preferir o termo "agente de usuário" queremos frizar e deixar claro um sentido bem mais amplo e diferenciar de simplesmente, os browsers.

Exemplificando: quando você faz uma busca no Google é comum retornar nos resultados da busca uma frase parecida com esta: "Esta página usa frames, mas seu browser não os suporta". Isto certamente irá desencorajar o usuário a clicar naquele link e entrar na página. O desenvolvedor daquela página não se deu conta de que além de browser existem muitos outros agentes de usuário capazes de visualizar ou ler a página, e, sua obrigação seria a de incluir um texto mais amigável no elemento <noframes> de seu HTML de modo a não intimidar um possível visitante.

Por que devo usar estes tais de "namespace" em XHTML?

Nos primórdios do HTML os diferentes fabricantes acresentaram elementos e atributos ao HTML ao seu gosto e conveniências. Este procedimento acabou trazendo um verdadeiro caos, pois acabou com a interoperabilidade entre as diferentes versões proprietárias do HTML. XML (o X significa Extensível) possibilita a se usar qualquer elemento em qualquer linguagem, desde que o browser seja informado quais elementos pertencem a qual linguagem no documento, e isto é declarado no código da página. O namespace é quem faz esta declaração.

Por que é permitido servir documentos XHTML 1.0 como text/html?

XHTML é um formato do XML e isto significa em linguagem estrita, que pode ser servido para um tipo de mídia compatível com XML (application/xhtml+xml, application/xml, ou text/xml). Contudo XHTML 1.0 está projetado de modo a ser compatível também com agentes de usuário para HTML. Você terá que seguir algumas normas simples de sintaxe para documentos XHTML1.0 de modo a que eles sejam corretamente interpretados pelos browsers para HTML. Como, browsers para HTML só conseguem entender o tipo de mídia text/html, devemos declarar este tipo, nos documentos XHTML 1.0 projetados para estes browsers. Mas, atençao, ao declarar tipo de mídia text/html no seu documento os browsers para HTML o interpretarão como documentos HTML.

Quais são os browsers que aceitam a aplicação application/xhtml+xml como tipo de mídia?

Todos os browsers Mozilla tais como Mozilla, Netscape 5 e maior, Galeon e Firefox, bem como Opera, Amaya, Camino, Chimera, DocZilla, iCab, Safari, e os browsers para telefones portáteis que aceitam WAP2. Em resumo, qualquer browser moderno. A maioria aceita também documentos XHTML como application/xml. Ver XHTML Media-type test para detalhes.

O Microsoft Internet Explorer aceita o tipo de mídia application/xhtml+xml?

Não. Contudo existe um macete que possibilita servir documentos, XHTML1.0 para o Internet Explorer como uma aplicação XML application/xml.

Inclua no topo do seu documento a linha em negrito abaixo mostrada:

<?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 arquivo que contém o seguinte :

<stylesheet version="1.0"
     xmlns="http://www.w3.org/1999/XSL/Transform">

    <template match="/">
        <copy-of select="."/>
    </template>
</stylesheet>

Observe que este arquivo deve estar hospedado no mesmo site do documento que lhe faz referência.

Embora você esteja servindo o documento como XML, e ele seja parseado como tal, o browser "acredita" trata-se de um text/html, desta forma seu documento XHTML 1.0 deverá ter sido escrito com sintaxe apropriada para ser servido a browsers para HTML.

O documento continuará a funcionar perfeitamente em browsers que tratam XHTML 1.0 como application/xml.

Em CSS existe um conjunto de regras especiais que se aplicam específicamente para HTML. Elas são aplicáveis também ao XHTML?

Não. Regras CSS aplicáveis somente ao HTML, são para documentos servidos como text/html.

A declaração document.write aplica-se ao XHTML?

Não. Da maneira como XML está concebido não é possível usar este tipo de artifício para gerar marcação.

Você pode obter o mesmo resultado, mas deverá usar o DOM para adicionar e excluir elementos.

Por que não se permite servir documentos XHTML 1.1 na forma text/html?

XHTML 1.1 é XML puro e concebido para ser unicamente XML. Ele não pode ser remetido para browsers HTML. desta forma documentos XHTML 1.1 devem ser servidos para tipo de mídia compatível com XML, como application/xhtml+xml.

Por que o atributo "target" foi retirado do XHTML 1.1?

Não foi retirado. XHTML 1.0 existe em três versões : strict, transitional, e frameset. Todas as três foram mantidas o mais compatível possível com HTML 4.01, em acordo com XML. XHTML 1.1 é uma versão atualizada de XHTML 1.0 strict, e nenhuma versão do HTML strict jamais incluiu o atributo target. As outras duas versões, transitional e frameset, não foram atualizadas, porque não há nada a atualizar. Se você precisar usar o atributo target, use XHTML 1.0 transitional.

Qual é uso para a Modularização do XHTML (XHTML Modularization)?

XHTML Modularization não se destina a usuários regulares de XHTML, mas sim a projetistas de linguagens baseadas em XHTML. Observou-se que grupos e fabricantes tem a tendência de projetar suas versões próprias para HTML e XHTML que nem sempre são compatíveis e interoperacionais entre si. A modularização dividiu o XHTML em módulos específicos a serem selecionados para servir de guia para quem pretenda desenvolver uma nova linguagem, desta forma por exemplo, todos aqueles que se disponham a projetar uma linguagem baseada em XHTML para tabelas deverão guiar-se por um módulo escrito específicamente para tabelas. A modularização define também de forma bem clara onde é permitido e onde não é permitido a criação de novos elementos.

Por que precisaremos de XHTML 2 ? O XHTML 1 já não é suficiente ?

HTML e XHTML tem atendido muito bem as necessidades, mas há muita coisa que pode ser melhorada. Algumas áreas tem merecido especial atenção tais como remoção de funcionalidades com a mesma finalidade (duplicadas), racionalização do aspecto estrutural da linguagem, usabilidade, acessibilidade, internacionalização, indepedência dos dispositivos, melhorias em formulários e redução de necessidade de scripts.

O elemento <img> será substituido por <object> no XHTML2?

Não. <img> foi substituida em XHTML2, porém por algo mais (embora você possa usar <object> se assim desejar).

Usar <img> em HTML implica em vários problemas:

O que XHTML2 faz é considerar todas as imagens equivalentes a um trecho de conteúdo e isto é possível desde que seja permitido usar o atributo src em qualquer elemento. O efeito disto é: se a imagem está disponível e o browser a suporta então ela é mostrada caso contrário mostre o conteúdo do elemento. Veja um exemplo abaixo:

<p src="mapa.png">Ao sair da estação, dobre à esquerda, 
   siga em frente até a <strong>rodovia</strong>,
   e dobre à direita</p>

A vantagem é que se a imagem estiver indisponível por uma razão qualquer (queda da conexão por exemplo) ou se o browser não for capaz de renderizá-la por não suportá-la, o documento, mesmo assim permanecerá usável. Se você resolver disponibilizar a imagem em maneiras diversas poderá fazê-lo conforme mostrado a seguir:

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

O uso de imagens alternativas com extensão diferente é a melhor técnica e se o servidor de hospedagem assim o permitir você poderá usar assim:

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

o que permite ao browser escolher entre as imagens oferecidas, aquela que melhor ele suporta para ser renderizada. Se não suportar nenhuma imagem, então, o conteúdo do elemento deverá ser mostrado. Esta maneira tem a vantagem de permitir que no futuro você acresente outros tipos de imagem, bastando para isto colocá-las no servidor sem necessidade de alterar o código da página.

XLink e XHTML servem-se de diferentes requisitos para lincar, o que os torna incompatíveis.

Por que XHTML2 não é compatível com aplicações passadas ?

Na verdade é compatível, mas de uma maneira diversa de como as versões anteriores do HTML o são.

Versões mais antigas do HTML foram desenvolvidas com propósitos específicos, então faz-se necessário que documentos escritos atualmente, proporcionem um nível mínimo de compatibilidade com browsers antigos. Por exemplo: esta é a razão, porque usamos um atributo para definir conteúdo em um elemento <meta> no lugar de usarmos o próprio conteúdo do elemento o que faria com que ele fosse renderizado em browsers antigos.

Graças ao XML e as folhas de estilos estes artíficios de compatibilizações serão desnecessários no futuro já que um browser compatível com XML (e à época em que este documento foi escrito, mais de 95% dos browsers em uso o são) poderá processar futuras novas linguagens de marcação sem precisar ser atualizado. Quase tudo de XHTML 2 renderiza muito bem em browsers atuais, browsers estes que não foram programados para aceitar XHTML2. Quase tudo, mas nem tudo: da mesma forma que aconteceu quando tabelas e formulários foram introduzias no HTML e os usuários tiveram que aguardar até que novos browsers programados para suportá-las fossem lançados, atualmente as XForms e XML Events, já existentes terão que aguardar agentes de usuários que as entendam.

Porque xml:space é setada para 'preserve' em documentos XHTML? Eu não desejo que espaços em branco sejam visualizados na renderização de meu documento.

O atribuito xml:space diz respeito a input: isto é, ele controla a existência de espaços no DOM (ou seja, na versão interna do documento dentro do browser) não trata e nem controla comportamento ou aparência de espaços em branco para efeitos de exibição ( na tela). A maneira de exibição de espaços é controlada por CSS com a propriedade 'whitespace'. Definindo a propriedade para o valor 'pre', faz com que os espaços no DOM sejam respeitados na exibiçãot; definindo para 'normal' os espaços serão sobrepostos (CSS3 implementa mais propriedades, valores possibilitando maior controle).

Por esta razão todos os elementos são setados xml:space="preserve" em XHTML2, não fosse assim a propriedade CSS 'whitespace' não teria qualquer efeito, e você não teria como controlar a exibição dos espaços em branco. O valor default para 'whitespace' é 'normal' para todos os elementos, exceto para o elemento <pre>, mas, certamente você pode alterar este valor.