<
Menu

Tableless


960grid

Usando o plugin 960gs e o Photoshop

feature2

Repensando CSS Resets

html5-apis

Entendendo quais APIs (realmente) fazem parte do HTML5

ferramentas-prontas

Ferramentas e sites para tornar mais ágil o seu desenvolvimento


Imagem post: Documentos poliglotas com XHTML5

Documentos poliglotas com XHTML5

O XHTML5 permite utilizar a sintaxe do XML/XHTML em documentos HTML5

Quando se começou a falar massivamente a respeito do HTML5, em 2009, muitos desenvolvedores (inclusive eu) torceram o nariz para o fato de poder voltar a utilizar a sintaxe tolerante do HTML, ou seja, tags em uppercase ou sem fechamento, valores de atributos sem aspas, fechar tags em ordem incorreta, entre outros. Inclusive, comentei especificamente sobre isso em um outro artigo.

Grande parte dos desenvolvedores aprenderam  e se habituaram a utilizar a sintaxe do XHTML, que segue as diretrizes do XML para documentos bem formados e que apresentariam erros de renderização caso essas diretrizes são fossem seguidas. Isto nos permitia códigos mais limpos e bem estruturados. Porém, no HTML5, a escolha é sua e você não será punido por não fechar tags.

Com toda essa preocupação, no mesmo ano começou a ideia do XHTML5, uma tentativa de contornar o problema, adicionando as restrições de marcação do XML a documentos escritos em HTML5. Podemos dizer que seria uma tentativa de unir o melhor de cada especificação. O artigo escrito por Bruce Lawson para o HTML5 Doctor (com versão traduzida no Pinceladas da Web) foi um dos primeiros a comentar sobre o tema.

Durante cerca de 1 ano isto era uma forma, digamos, marginalizada de tratar essa questão, por não ser algo reconhecido pelo  WHATWG / HTML WG. Mas em 2010 surgiu o primeiro draft com a proposta de nortear o uso do HTML5 com a sintaxe do XML/XHTML. O W3C denominou essa metodologia de marcação poliglota.

O que é um documento com marcação poliglota?

Um documento com marcação poliglota é um documento escrito em HTML5 que pode ser processado tanto como HTML quanto como XML dentro de um conjunto de restrições definidas, porém, ainda seguindo a especificação do HTML5. Eles são compatíveis com o HTML e XHTML.

Significa que você pode utilizar todo o poder do HTML5 dentro do padrão de marcação bem formada do XML. É importante ressaltar que isto não afeta as tags que você pode utilizar. Por exemplo, elementos que são considerados deprecated em XHTML mas válidos no HTML5 continuam a ser válidos. Uma exceção é com relação a algumas tags que são excluídas de documentos poliglotas por não serem possível de serem replicadas em um parser XML (como é o caso da tag <noscript>).

Mas em linhas gerais, esta “fusão” não altera a especificação, mas sim as regras de sintaxe para processamento e há influência no DOM também (ex.: document.write não é permitido, mas sim innerHTML).

Segundo o W3C, um documento poliglota resulta em:

  • Um documento HTML5 válido;
  • Um documento XML bem formado (mas não significa um documento XML válido);
  • DOM idêntico quando processado tanto como HTML quanto como XML, isto porque os parsers geram diferentes DOMs para determinados atributos relativos ao XML.

Como escrever um documento poliglota

Um dos principais requisitos para escrever um documento em XHTML5 é o MIME-type utilizado. Isto vai definir se o navegador irá interpretar o documento como HTML ou XHTML. Segundo o WHATWG, um documento HTML5 se torna um documento poliglota se for provido o MIME-type application/xhtml+xml.

[cc lang="html"][/cc]

Até algum tempo atrás, o IE não suportava este MIME-type. Para isso, você pode indicar que o MIME-type é o usual text/html. Ele pode ser utilizado junto com o primeiro (separando por vírgula), ou pode ser feita uma validação do navegador para decidir qual o MIME-type a ser utilizado.

O doctype passa a ser opcional, mas ainda é recomendável utilizar para prevenir o quirks mode dos navegadores. Se utilizado, a palavra doctype deve ser escrito adequadamente em uppercase, ex.: <!DOCTYPE html>. A meta-tag que especifica o charset e a declaração <?xml version=”1.0” encoding=”UTF-8”?> (herdada do XHTML 1.1) também passam a ser opcionais se o charset desejado para o documento é UTF-8 (padrão do XML).

Além disso é preciso definir também o namespace do XHTML na tag <html>:

[cc lang="html"][/cc]

Ao utilizar recursos como SVG e MathML, é preciso especificar também o atributo xml para a tag raiz correspondente de cada um.

Outras recomendações são:

  • Usar tanto o atributo lang quanto xml:lang na tag <html>;
  • Usar tbody / thead / tfoot em <table>s;
  • Quando o elemento <col> é utilizado em tabelas, utilizar também o elemento <colgroup>;
  • Não utilizar o elemento <noscript>;
  • Não iniciar as tags <pre> e <textarea> com linha em branco;
  • Utilizar innerHTML ao invés de documento.write;
  • Para scripts embutidos na página, escreva o código entre uma seção CDATA com os delimitadores comentados. É uma forma de fazer com que o parser do XML (que analisa apenas a marcação) não acuse erros ao utilizar < ou & no script;
  • Os atributos xml:space e xml:base são permitidos apenas nos elementos relativos a SVG e MathML;
  • Elementos que podem ter conteúdo mas estão vazios não devem ser minimizados para o formato de tag órfã. Ex.: <p /> não deve ser utilizado, mas sim <p></p>.

Ao escrever documentos poliglotas, é possível utilizar todas as funcionalidades do HTML5 com uma garantia de código bem formado de acordo com as restrições do XHTML. Com isso, é possível ter um código mais organizado e consistente que seja mais fácil de produzir, manter e reutilizar a longo prazo, principalmente quando este trabalho é realizado em equipe.

Referências

Polyglot Markup: HTML-Compatible XHTML Documents
XHTML5 in a nutshell
Benefits of polyglot XHTML5
HTML 5 + XML = XHTML 5

Por Talita Pagani

Talita Pagani, 25 anos, mora em Bauru, interior de SP. Atualmente é Analista de Testes na MStech, atuando com projetos educacionais. Também trabalha como web designer desde 2005, mas começou a se interessar pela área em 2001. É graduada em Ciência da Computação e pós-graduanda em Gerenciamento de Projetos. Apaixonada por usabilidade, design de interface e padrões web.

http://www.twitter.com/talitapagani

Mais posts do autor

Comentários (21)

  • http://www.twitter.com/andre_amaral André Duarte

    Acho que um dos motivos do xhtml ter perdido força foram as rígidas regras de sintaxe.

    Não acredito que o xhtml5 terá apoio dos desenvolvedores em geral.

  • Paullo Norato

    Acho isso legal, principalmente para quem está aprendendo HTML agora. Digo isso porque eu já tinha experiência com o XHTML e quando comecei a trabalhar com o HTML5 continuei seguindo as regras do XML. Acredito que todos os bons desenvolvedores front-end façam isso =D

  • Eu

    Eu sempre escrevi documentos html como se fosse xhtml
    Pra mim um documento bem indentado e formatado é uma obra de arte

  • http://twitter.com/tassoevan Tasso Evangelista

    Tipo checked=”checked”?

  • Talita Pagani

    Olá André, obrigada por seu comentário. Na verdade, foi justamente um movimento dos desenvolvedores que levou o W3C a padronizar esta prática, como descrito no artigo.

    As regras de sintaxe servem para garantir que os documentos sejam bem formados e permaneçam padronizados de forma que tanto os desenvolvedores quanto parsers possam entendê-los da mesma forma. Um documento HTML, para ser processado pelo navegador, precisa validar todas as condições permissivas (tags sem fechamento, atributos sem aspas, etc.). 

    Padrões são importantes neste caso e nos policiam na forma de trabalho. Imagina que você tem uma maneira de escrever o html e os outros colegas do seu time possuem outra. Pensou em como seria custoso dar manutenção? Sugiro que leia um outro artigo a este respeito publicado aqui no Tableless: 
    http://tableless.com.br/o-dilema-da-sintaxe-no-html5/

  • http://www.twitter.com/andre_amaral André Duarte

    Oi Talita, sei que é um movimento dos desenvolvedores, até considerava uma proposta
    interessante.

    Foi com o tempo que cheguei a conclusão de que a “permissividade” do html5 é benéfica e libertadora.Por que não aproveitar dessa liberdade?

    Abraço.

  • Ofelquis

    Eu sempre usei assim, e pra mim sempre foi HTML, é meio ‘frescurento’ essa historia de XHTML, HTML XML.

  • Ofelquis

    A propósito, muito bom o artigo.

  • Talita Pagani

    A questão maior é de que essa liberdade nem sempre é utilizada com responsabilidade. Estas restrições de sintaxe (que existem em qualquer linguagem) fazem com que as pessoas se policiem um pouco mais a utilizar o que deveria ser adotado como melhor prática (e que, neste caso, acaba sendo uma regra).

    Não é muito produtivo dar manutenção em um código em que as tags não são fechadas, que há uma mistura de tags escritas em maiúscula e tags escritas em minúscula e que o desenvolvedor front-end escolheu diversas maneiras de setar atributos em uma tag (sem aspas, com aspas simples, com aspas duplas). 

    Algumas flexibilidades de fato são benéficas, mas a questão maior é evitar os códigos mal-formados que víamos sendo construídos em HTML, simplesmente porque a permissividade não era utilizada com parcimônia pelos desenvolvedores.

  • Nandorossetto

    Acho muito barulho pra pouca festa!

  • Décio Pinto

    Deveriam ser propostas novas regras para a marcação HTML5.
    Algumas regras do XHTML são muito boas e são de grande ajuda para padronizar o código e assim torna-lo mais legivel, mas algumas regras, ao meu ver, tornam o código “feio”, como por exemplo o fechamento de tags órfãs, como input, img, br, ttc. que devem ter o fechamento com /> no final da tag, regra que com certeza não vai fazer seu codigo mais coerente pois esse tipo de tag não acopla conteúdo.

    O DTD do xhtml também é algo que deveria ser simplificado pois são poucos os que escrevem aquele trecho do código sem o uso de uma IDE ou alguma ferramenta que exiba o código pronto.

    Sou muito criterioso apenas em duas regras em relação ao meu código: identação e código completamente escrito em minusculo, e isso não me faz escrever um código ilegível só porque ele não segue um determinado padrão.

  • Confiance

    Show de bola o seu blog! Convido vocês pra conhecer nossa loja http://www.confianceshop.com.br e ganhar 5% de desconto em qualquer produto!!

  • Lucas Sandoval

    Sou completamente a favor da xhtml 5, pois nos ajuda a produzir código ainda mais limpo e muito padronização. Além de todos os benefícios na renderização, ainda tem a padronização do código. 

  • André Sobral

    Olá ótimo artigo. Porém acredito que o desenvolvedor ou o time de desenvolvimento deva optar por qual padrão é melhor. Existe o argumento das regras, mas partimos do pressuposto de que para contruírmos algo com qualidade devemos seguir um padrão  determinado pela organização, pelo desenvolvedor ou pela empresa. E com html5 puro, isto é muito possível. Por exemplo o guia de uso do Googe http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml#HTML_Style_Rules , mostra suas diretrizes para escrever um documento de qualidade dentro do que o html5 determina. Se o time ou o desenvolvedor seguir este padrão terá um documento de qualidade.

  • http://www.facebook.com/marlon.marcello Marlon Marcello

    Bullshitagem

  • http://www.facebook.com/yangm97 Yan Gabriel Minário

    Eu comecei a brincar com linguagens web quando era pequeno, fazendo alterações em templates XML do blogger, logo me acostumei com o xhtml. E quando descobri a lambança que pode ser feita com HTML, fiquei arrepiado.

  • FElipe

    xml e html? nao viaja maluco

  • http://www.facebook.com/profile.php?id=100002969596455 Caio Weslley

    Mas… a HTML + XML não veio para tornar a Web mais acessivel? com a HTML5 sem sintaxes XML é possível isso?

  • Someone.

    Simplificar o DTD mais que ? Só se tirar ele…

  • Fodão

    num fode né tasso kkk eu APOIO 100% XHTML5.

  • Tasso Evangelista

    Mas aí que está, se a linguagem ficar muito restritiva, vai ficar “chata de escrever” (contraproducente); se ficar muito liberal, escrever parsers e auditar o código serão tarefas hercúleas. Se o modo como XHTML5 for planejado for idêntico ao do XHTML, alguém vai lançar uma linguagem do tipo “CoffeeHTML” para tornar a escrita de código fácil e a saída coerente com os padrões — algo que contraria a própria filosofia do XHTML.