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

15 janeiro, 2007

Diferenças HTML vs. XHTML

Por favor note que a informação aqui presente se baseia na actual especificação para (X)HTML5. alguns dos detalhes não são aplicáveis tecnicamente a anteriores versões de HTML.

Embora o HTML e o XHTML possam parecer serem similares na sua sintaxe, são bastante diferentes de várias formas.

Nota: Como o actual documento WHATWG ainda é um rascunho esta secção necessita de ser acompanhada como um alvo em movimento.

As diferenças marcadas com @@@ são diferenças que podem teoricamente ser alteradas sem afectar a retrocompatibilidade

Tipos MIME

  • O XHTML tem que ser servido como um tipo MIME XML tal como application/xml ou application/xhtml+xml.
  • O HTML tem que ser servido como text/html.

É este tipo MIME que determina que tipo de documento está a usar. Se tentar enviar XHTML como text/html de facto está a usar HTML, eventualmente com erros sintáticos.

Tecnicamente, de acordo com a especificação é permitido enviar XHTML 1.0 como text/html. Mas devido à razão anteriormente apresentada tal documento é considerado como documento em HTML e não em XHTML.

Análise

O XHTML usa requisitos de análise/interpretação XML. O HTML usa os seus próprios requisitos que estão definidos de uma forma que se apresenta muito mais próxima da forma de tratamento que os navegadores dão ao HTML actualmente.

  • Em XHTML, a má formação é um erro fatal. Em HTML, as regras de tratamento de erros são muito mais simpáticas. Os erros de má formação, que também são erros sintáticos em HTML, incluem os seguintes:
    • E comercial não codificado (& em vez de &amp;), e sinais de menor que (< em vez de &lt;) (Isto não se aplica a CDATA).
    • Comentários contendo um par extra de hifens ou terminando num hífen, isto é:
      • <!-- erro –– sintáctico --> ou
      • <!-- erro sintáctico --->.
    • Fechos de marcadores a que não correspondem a respectiva abertura de marcadores (não se aplica a elementos com marcadores opcionais)
    • Ausência de marcadores de fecho.
    • Ocorrência de caracteres inesperados em ou antes de nomes de atributos.
    • Ocorrência inesperada de EOF (Fim de ficheiro).
    • Caracteres inesperados antes do nome DOCTYPE.
    • Ausência de nome DOCTYPE.
    • Um identificador PUBLIC num DOCTYPE sem identificador de SYSTEM (Nota: incluir qualquer um destes é um erro sintáctico em HTML5, mas em XML só o identificador SYSTEM pode ocorrer por si.)
    • Fecho de marcadores com atributos.
    • Fechos de marcadores inesperados (em HTML, um </br> ou </p> pode fazer implicar (mesmo que não seja claro explicito) uma abertura de marcador antes do respectivo fecho).
  • O subconjunto interno é permitido em XML, mas não tem significado (e é proibido) em HTML.
    • Em alguns casos um subconjunto interno em HTML terminará por ser parcialmente reproduzido em linha.
  • A sequência de caracteres "]]>" quando não assinala o final da secção CDATA é um erro de má formação em XHTML, mas é válido em HTML.
  • Em XHTML: <![CDATA[...]]> é uma secção CDATA section. Em HTML, é um falso comentário.
  • Em XHTML, é uma instrução de processamento. Em HTML é um falso comentário.
  • Em HTML, o traço de fracção usado na sintaxe de um elemento vazio é um erro de análise para elementos não vazios (ver abaixo), mas ignorado em todos os casos.
  • Em HTML, os elementos script e style são analisados como CDATA. (Nota: a definição de CDATA é diferente da encontrada em XML). Em XML, são interpretados como elementos normais (o que significa que os comentários são tratados como comentários reais e coisas que se parecem com abertura de marcadores são de facto aberturas de marcadores).
  • Em HTML, os elementos title e textarea são interpretados como RCDATA. (Nota: A definição de RCDATA é diferente da dada no SGML e não há RCDATA em XML).
  • Em HTML, se estiver activado o scripting o elemento noscript é interpretado como CDATA. Se o scripting estiver desactivado (ou indisponível) é interpretado como PCDATA. Em XHTML, o elemento não tem efeito e não pode ser de facto usado para evitar que conteúdo seja mostrado quando o script não estiver disponível.
  • Em HTML, os elementos iframe, noembed e noframes são interpretados como CDATA. Em XHTML, são interpretados como elementos normais e sendo assim não impedem o uso de conteúdo.
  • Os caracteres de espaço em branco em valores de atributos são normalizados para espaços em XHTML.
  • Sob determinadas condições tornam-se implícitos elementos com marcadores opcionais.
  • Em HTML, elementos base, link, meta, style e title com marcadores que ocorram em body são movidos e inseridos em head. Em XHTML, ficam onde tenham sido especificados.
  • Em HTML, marcadores de certos elementos que aparecem fora de contexto são ignorados. Estes marcadores incluem caption, col, colgroup, frame, frameset, head, option, optgroup, tbody, td, tfoot, th, thead, tr.
  • O elemento plaintext tem um requisito especial de interpretação em HTML. (é contudo proibido).
  • Há ainda outros casos de interpretação especial de casos de fronteira e condições de erro que não foram aqui listados e que ocorrem em HTML.

Análise

O XHTML usa requisitos de análise/interpretação XML. O HTML usa os seus próprios requisitos que estão definidos de uma forma que se apresenta muito mais próxima da forma de tratamento que os navegadores dão ao HTML actualmente.

  • Em XHTML, a má formação é um erro fatal. Em HTML, as regras de tratamento de erros são muito mais simpáticas. Os erros de má formação, que também são erros sintáticos em HTML, incluem os seguintes:
    • E comercial não codificado (& em vez de &amp;), e sinais de menor que (< em vez de &lt;) (Isto não se aplica a CDATA).
    • Comentários contendo um par extra de hifens ou terminando num hífen, isto é:
      • ou
      • .
    • Fechos de marcadores a que não correspondem a respectiva abertura de marcadores (não se aplica a elementos com marcadores opcionais)
    • Ausência de marcadores de fecho.
    • Ocorrência de caracteres inesperados em ou antes de nomes de atributos.
    • Ocorrência inesperada de EOF (Fim de ficheiro).
    • Caracteres inesperados antes do nome DOCTYPE.
    • Ausência de nome DOCTYPE.
    • Um identificador PUBLIC num DOCTYPE sem identificador de SYSTEM (Nota: incluir qualquer um destes é um erro sintáctico em HTML5, mas em XML só o identificador SYSTEM pode ocorrer por si.)
    • Fecho de marcadores com atributos.
    • Fechos de marcadores inesperados (em HTML, um </br> ou </p> pode fazer implicar (mesmo que não seja claro explicito) uma abertura de marcador antes do respectivo fecho).
  • O subconjunto interno é permitido em XML, mas não tem significado (e é proibido) em HTML.
    • Em alguns casos um subconjunto interno em HTML terminará por ser parcialmente reproduzido em linha.
  • A sequência de caracteres "]]>" quando não assinala o final da secção CDATA é um erro de má formação em XHTML, mas é válido em HTML.
  • Em XHTML: <![CDATA[...]]> é uma secção CDATA section. Em HTML, é um falso comentário.
  • Em XHTML, é uma instrução de processamento. Em HTML é um falso comentário.
  • Em HTML, o traço de fracção usado na sintaxe de um elemento vazio é um erro de análise para elementos não vazios (ver abaixo), mas ignorado em todos os casos.
  • Em HTML, os elementos script e style são analisados como CDATA. (Nota: a definição de CDATA é diferente da encontrada em XML). Em XML, são interpretados como elementos normais (o que significa que os comentários são tratados como comentários reais e coisas que se parecem com abertura de marcadores são de facto aberturas de marcadores).
  • Em HTML, os elementos title e textarea são interpretados como RCDATA. (Nota: A definição de RCDATA é diferente da dada no SGML e não há RCDATA em XML).
  • Em HTML, se estiver activado o scripting o elemento noscript é interpretado como CDATA. Se o scripting estiver desactivado (ou indisponível) é interpretado como PCDATA. Em XHTML, o elemento não tem efeito e não pode ser de facto usado para evitar que conteúdo seja mostrado quando o script não estiver disponível.
  • Em HTML, os elementos iframe, noembed e noframes são interpretados como CDATA. Em XHTML, são interpretados como elementos normais e sendo assim não impedem o uso de conteúdo.
  • Os caracteres de espaço em branco em valores de atributos são normalizados para espaços em XHTML.
  • Sob determinadas condições tornam-se implícitos elementos com marcadores opcionais.
  • Em HTML, elementos base, link, meta, style e title com marcadores que ocorram em body são movidos e inseridos em head. Em XHTML, ficam onde tenham sido especificados.
  • Em HTML, marcadores de certos elementos que aparecem fora de contexto são ignorados. Estes marcadores incluem caption, col, colgroup, frame, frameset, head, option, optgroup, tbody, td, tfoot, th, thead, tr.
  • O elemento plaintext tem um requisito especial de interpretação em HTML. (é contudo proibido).
  • Há ainda outros casos de interpretação especial de casos de fronteira e condições de erro que não foram aqui listados e que ocorrem em HTML.

Sintaxe

  • Em HTML, o doctype é obrigatório em XHTML é opcional.
  • Em XHTML, os nomes dos marcadores e dos atributos são sensíveis ao corpo da letra (maísculas e minúsculas têm significados diferentes) em HTML tal não sucede.
  • Em XHTML, elementos não vazios exigem tanto a abertura do marcador como o fecho do marcador. Em HTML pode omitir-se um deles ou até ambos:
    • html (ambos)
    • head (ambos)
    • body (ambos)
    • li (fecho do marcador)
    • dt (fecho do marcador)
    • dd (fecho do marcador)
    • p (fecho do marcador)
    • colgroup (ambos)
    • thead (fecho do marcador)
    • tbody (ambos)
    • tfoot (fecho do marcador)
    • tr (fecho do marcador)
    • td (fecho do marcador)
    • th (fecho do marcador)
  • Em XHTML, os elementos vazios podem usar quer a sintaxe de elemento vazio (<br/>) ou fazer o fecho imediatamente a seguir à abertura do marcado (<br></br>). Em HTML, a sintaxe de elemento vazio (<br/>) é permitida em elementos vazios mas proibida noutros elementos. Contudo não serve para nada e pode ser omitida. Não é permitido o fecho de um marcador para elementos vazios.
    • base, link, meta, hr, br, img, embed, param, area, col e input
    • Nota: os seguintes são tratados como elementos vazios para finalidades de requisitos de interpretação, mas, como são obsoletos e não-standard a sintaxe do traço de fracção final não é permitida: basefont, bgsound, spacer, wbr. (embora visto estes elementos não serem permitidos tal não faça nenhuma diferença).
  • O HTML autoriza a minimização de atributos (isto é, a omissão do valor) mas o XHTML não.
  • O HTML autoriza a utilização de valores de atributos sem estarem entre pelicas o XHTML não.
  • O XHTML autoriza o uso de secções CDATA o HTML não.
  • O XHTML autoriza o uso de instruções de processamento o HTML não.
  • Em HTML, todas as referências a entidades estão pré-definidas e não requerem um DTD. Mas como não há DTD para XHTML5, as referências de identidades não pode ser usadas em XHTML. (excluindo as 5 pré-definidas: &amp;, &lt;, &gt;, &quot; e &apos;)
    • Pode fornecer o seu próprio DTD para uso com o seu próprio interpretador de validação, mas tenha em mente que os navegadores não usam interpretadores de validação e que não irão ler o DTD.
  • O conjunto de caracteres unicode válido em XML 1.0 é mais limitado do que em HTML.
  • Prefixos de espaço de nomeação são permitidos em XHTML. São proibidos em HTML.

Marcação

  • A declaração de espaço de nomeação (atributo xmlns) é obrigatório em XHTML. O atributo xmlns também é autorizado a figurar no elemento html em HTML sob a condição de o seu valor ser "http://www.w3.org/1999/xhtml".
    • <html xmlns="http://www.w3.org/1999/xhtml">
    • Em HTML, o atributo xmlns não tem absolutamente nenhum efeito, É basicamente um talismã. Só é autorizado para fazer a migração de e para XHTML ligeiramente mais fácil. Quando interpretado por um interpretador HTML o atributo acaba no espaço de nomeação null.
    • Em XML (com um interpretador que saiba interpretar espaços de nomeação XML), um atributo xmlns faz parte do mecanismo de declaração de espaços de nomeação e um elemento não pode ter de facto um atributo xmlns em espaço de nomeação null. Em implementações DOM o atributo termina no espaço de nomeação "http://www.w3.org/2000/xmlns/".
  • O XHTML autoriza o uso de elementos e atributos que não sejam elementos e atributos XHTML (em espaços de nomeação diferentes), o HTML não.
  • O XHTML usa o atributo xml:lang, o HTML usa o atributo lang em seu lugar,
  • O XML ID introduz xml:id,que pode ser usado em XHTML. Em HTML não tem qualquer efeito.
  • Em HTML, pode-se usar o elemento noscript. Em XHTML, é proibido.
  • O HTML usa o elemento base, o XHTML usa em seu lugar o elemento xml:base.
  • Em XHTML, os elementos p podem conter elementos estruturais de nível em linha incluindo blockquote, dl, menu, ol, ul, pre e table. Na serialização de HTML devido a constrangimentos de retrocompatibilidade isto não é possível (embora possa ser feito por manipulação do DOM).
  • Em XHTML, os elementos table podem conter elementos tr. Em serialização de HTML, devido a constrangimentos de retrocompatibilidade tal não é possível (embora possa ser feito através de manipulação do DOM).

Codificação de Caracteres

  • Em XHTML, a declaração XML pode ser usada para especificar a codificação de caracteres. Em HTML a declaração xml é proibida
  • Em HTML, pode ser usado o elemento meta em seu lugar. O atributo http-equiv no elemento meta é proibido em XHTML e ignorado se incluído.
  • A codificação de caracteres por omissão para XHTML é de acordo com as regras de XML: UTF-8 ou UTF-16. Se a codificação não for especificada em HTML, deve ser determinada de acordo com uma heurística especifica da implementação ou ter um valor por omissão (Nota: esta secção da especificação ainda não está terminada).

Scripts/Guiões

  • não se pode usar document.write() e document.writeln() em XHTML, mas pode-se em HTML.
  • em XHTML, o uso da propriedade innerHTML obriga a que a string seja um fragmento de XML bem formado.
  • As API do DOM são sensíveis à caixa (maísculas vs. minúsculas) em XHTML e em alguns casos não são sensíveis em HTML. (Isto não se aplica a elementos que não se encontrem no espaço de nomeação HTML)
    • Element.tagName, Node.nodeName, e Node.localName retornam o valor em maísculas.
    • Document.createElement() não é sensível à caixa (a forma canónica é minúsculas).
    • Element.setAttributeNode() muda o nome do atributo para minúsculas.
    • Element.setAttribute() não é sensível à caixa (a forma canónica é minúsculas).
    • Document.getElementsByTagName() e Element.getElementsByTagName() são não sensíveis à caixa.
    • Document.renameNode(). Se o novo espaço de nomeação é o espaço HTML, então o novo nome qualificado deve ser em minúsculas antes de a renomeação ter lugar.
  • Em HTML, Document.createElement() criará um elemento no espaço de nomeação HTML. Em XML (incluindo XHTML), o espaço de nomeação está definido tanto pelo DOM2 como pelo DOM3 como sendo null.
    • Em XHTML, os navegadores não têm interoperabilidade nesta área. Em Firefox, o espaço de nomeação depende do tipo MIME. Em Opera depende do elemento raiz e em Safari é sempre null.

Folhas de estilo

  • Os selectores, como usados em CSS criam correspondência sensível à caixa no XHTML mas são insensíveis à caixa em HTML.
  • O CSS requer tratamento especial do elemento body em HTML para pintura de fundos no canvas, o que não se aplica ao XHTML.

Diferenças entre HTML 4.01 e HTML 5

Tipo MIME

Tanto o HTML 4.01 como o HTML 5 usam text/html.

Content-Type: text/html; charset=UTF-8

Interpretação de HTML

  • Desde o HTML 2.0 até ao HTML 4.01 são formalmente baseados em SGML, mas os navegadores não implementaram interpretadores SGML. Notas de implementação 4.2 SGML e B.3 SGML, HTML 4.01. Esta é uma secção não normativa da especificação HTML 4.01. Ela faz já a diferença entre agentes utilizadores HTML e agentes utilizadores SGML.
  • HTML 5 define os seus próprios requisitos de interpretação baseados na forma como os navegadores interpretam o HTML de facto.

Sintaxe

* A FAZER

Marcação

  • Lista de elementos HTML 4.01
  • Lista de atributos HTML 4.01
  • Ainda não há lista de elementos e atributos para Web Apps 1.0

Atributos Obsoletos

Alguns atributos definidos em HTML4 não foram incluídos em HTML5. Eis a lista actual (sujeita a alterações, ver especificação):

  • html@version
  • head@profile
  • a@rev, link@rev
  • a@target, area@target, base@target, form@target (é mencionado em WF2...), link@target
  • a@charset, link@charset, script@charset
  • table@summary
  • td@headers, th@headers
  • td@axis, th@axis
  • param@valuetype
  • object@standby
  • meta@scheme
  • object@archive

Além disso o HTML5 não tem nenhum dos atributos de apresentação que figuram em HTML4 (incluindo aqueles que figuram em <table>). Quaisquer atributos definidos em elementos que não figurem em HTML4 obviamente também não figuram em HTML5.

Elementos Obsoletos

Os seguinte elementos estão presentes em HTML4 mas não se encontram definidos em HTML5:

  • acronym (usar <abbr> em seu lugar)
  • applet (usar <object> em seu lugar)
  • basefont
  • big
  • center
  • dir
  • font
  • frame
  • frameset
  • isindex
  • noframes
  • noscript (só em XHTML)
  • s
  • strike
  • tt
  • u

Codificação de Caracteres

Algoritmo HTML 4

Fonte 5.2.2 Especificação de codificação de caracteres na especificação HTML 4.01.

  1. Um parâmetro de HTTP "charset" num campo "Content-Type".
  2. Uma declaração META com um atributo "http-equiv" apontando para o "Content-Type" e com um valor para "charset".
  3. Um atributo charset num elemento que designa um recurso externo.

Algoritmo HTML 5

Isto ainda está indefinido na especificação. Ver Detecção de Codificação de Caracteres para documentação.

Diferenças entre DOM Level 2.0, 3.0 e HTML 5 DOM APIs

Esta secção poderá pertencer a uma página diferente.

  • A FAZER (é necessário falar sobre as mudanças do DOM API que o HTML5 está a fazer em comparação com DOM2 e DOM3)

Sem comentários: