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

19 dezembro, 2005

Directrizes de compatibilização HTML/ XHTML

  1. Instruções de Processamento e Declaração XML

    Tenha em atenção que as instruções de processamento são reproduzidas em alguns agentes utilizadores. Além disso, alguns agentes utilizadores interpretam a declaração XML significando que o documento é XML e não HTML, e sendo assim, podem não reproduzir o documento como esperado. Para compatibilidade com estes tipos de navegadores antigos, pode ter que evitar usar instruções de processamento e declarações XML. Lembre-se contudo que se a declaração XML não for incluída num documento, o documento só pode usar as codificações de caracteres por omissão UTF-8 ou UTF-16.

  2. Elementos vazios

    Inclua um espaço antes do traço de fracção / e um sinal de maior que >, isto é, <br />, <hr /> e <img src="logo.jpg" alt="logotipo da marca" />. Além disso use a sintáxe dos marcadores minimizados para elementos vazios, isto é <br />, visto a sintaxe alternativa <br></br> permitida pelo XML dá resultados incertos em muitos agentes utilizadores existentes.

  3. Minimização de elemento e Conteúdo de elemento vazio

    Dado um caso vazio de um elemento cujo modelo de conteúdo não seja EMPTY (por exemplo, um título vazio ou um parágrafo vazio) não usar a forma minimizada (isto é, usar <p> </p> e não <p />).

  4. Folhas de estilo e Scripts embebidos

    Usar folhas de estilo externas se as suas folhas de estilo usarem < ou ]]> ou --. Usar scripts externos se o seu script usar < ou ]]> ou --. Note que os analisadores XML podem remover conteúdos de comentários de modo silencioso. Assim, a prática histórica de "esconder" scripts e estilos em "comentários" para tornar os documentos retrocompatíveis é possível que não funcione como esperado em agentes utilizadores baseados em XML.

  5. Quebras de linha dentro de Valores de Atributos

    Evitar quebra de linhas e vários caracteres de espaço em branco em valores de atributos. São tratados pelos agentes utilizadores de forma inconsistente.

  6. Isindex

    Não incluir mais do que um elemento isindex no head do documento. O elemento isindex está a ficar obsoleto em relação ao elemento input.

  7. Os atributos lang e xml:lang

    Usar ambos os atributos lang e xml:lang quando especificar a língua em que um elemento esteja escrito. O valor do atributo xml:lang tem precedência.

  8. Identificadores de Fragmento

    Em XML, as referências URI [RFC2396] que terminam em identificadores de fragmentos na forma "#qualquercoisa" não se referem a elementos com um atributo name="qualquercoisa"; mas sim a elementos com um atributo definido como sendo do tipo ID, isto é o atributo id em HTML 4. Muitos programas clientes HTML não suportam a utilização de atributos do tipo ID desta forma e assim sendo podem ser fornecidos valores identicos para ambos os atributos para assegurar o máximo de compatibilidade para o futuro e retrocompatibilidade (isto é, <a id="qualquercoisa" name="qualquercoisa">...</a>).

    Além disso visto que o conjunto de valores legais para os atributos do tipo ID ser muito mais pequeno que os do tipo CDATA, o tipo do atributo name foi alterado para NMTOKEN. Este atributo está constrangido de tal modo que só pode ter os mesmos valores que os do tipo ID, ou que os do tipo Name em XML 1.0 secção 2.3, produção 5. Infelizmente, este constrangimento não pode ser expresso nos DTD 1.0 do XHTML. Devido a esta alteração é necessário ter cuidado quando se converte documentos HTML existentes. Os valores destes atributos têm que ser únicos dentro do documento, válidos, e quaisquer referências a estes identificadores de fragmento (tanto internas como externas) devem ser actualizadas no caso dos valores serem alterados durante a conversão.

    Note que a colecção de valores legais na produção 5 da Secção 2.3 da especificação XML 1.0 é muito maior do que aquela que é permitida ser usada nos tipos ID e NAME no HTML 4. Quando se definem identificadores de fragmento para serem retrocompatíveis só devem ser usadas cadeias de caracteres de acordo com o padrão: [A-Za-z][A-Za-z0-9:_.-]*. Ver secção 6.2 do [HTML 4] para mais informação.

    Finalmente, note-se que o XHTML 1.0 pede para se evitar usar o atributo name dos elementos a,applet, form, frame, iframe, img e map, e será removido de versões subsequentes do XHTML.

  9. Codificação de caracteres

    Historicamente a codificação de caracteres de um documento HTML era especificada pelo servidor web via um parâmetro de conjunto de caracteres (charset) do cabeçalho de Tipo de Conteúdo do HTTP, ou via um elemento meta no próprio documento. Num documento XML, a codificação dos caracteres do documento é especificada na declaração XML (isto é: <meta http-equiv="Content-type" content="text/html; charset=EUC-JP" />). Em agentes utilizadores conformes com o XHTML o valor da declaração da codificação na declaração XML toma precedência.

    Nota: tenha em atenção que se um documento deve incluir uma declaração de codificação de caracteres numa instrução meta http-equiv, esse documento pode ser sempre interpretado pelos servidores HTTP e/ou agentes utilizadores como sendo do tipo de media internet definido nessa declaração. Se um documento pode vir a ser servido como vários tipos de media o servidor HTTP deve ser usado para estabelecer a codificação do documento.

  10. Atributos Booleanos

    Alguns agentes utilizadores HTML não conseguem interpretar atributos booleanos quando surgem na sua forma não minimizada, como necessário ao XML 1.0. Nota: este problema não afecta agentes utilizadores conformes com HTML 4. Estão envolvidos os seguintes atributos: compact, nowrap, ismap, declare, noshade, checked, disabled, readonly, multiple, selected, noresize, defer.

  11. Document Object Model e XHTML

    A recomendação nível 1 do [DOM] define os interfaces do modelo objecto de documento para o XML e o HTML 4. O modelo de ojecto documento do HTML 4 especifica que o elemento HTML e os nomes dos atributos retornam em maísculas. O modelo de objecto documento XML especifica que os nomes dos elementos e atributos são retornados com as letras minúsculas e maísculas com que são especificados. Em XHTML 1.0 os elementos e atributos são especificados em minúsculas. Esta diferença pode ser tratada de duas formas:

    1. Agentes utilizadores que acedam aos documentos XHTML servidos como tipo media da internet text/html via DOM podem usar o HTML DOM e podem depender dos nomes de elementos e atributos serem retornados em maiúsculas a partir desses interfaces.

    2. Agentes utilizadores que acedam aos documento XHTML servidos como text/xml, application/xml, ou application/xhtml+xml podem usar o XML DOM. Os elementos e atributos retornam em minúsculas. Também, alguns elementos XHTML podem ou não aparecer na árvore do objecto devido a serem opcionais no modelo de conteúdo (isto é, o elemento tbody dentro de table). Isto ocorre porque em HTML 4 alguns elementos foram permitidos ser minimizados de tal modo que tanto a etiqueta de início e a de fim do elemento são ambas omitidas (uma funcionalidade SGML). Isto não é possível em XML. Assim em vez de exigir aos autores dos documentos a inserção de elementos extra, o XHTML tornou estes elementos opcionais. Os agentes utilizadores têm que se adaptar em conformidade. Para mais informação sobre este tópico, ver [DOM2].

  12. Utilização de e comercial em valores de atributos (e noutros locais)

    Tanto em SGML como em XML o caracter e comercial ("&") declara o início de uma referência de entidade (isto é &reg; para um símbolo de marca registada "®"). Infelizmente, muitos agentes utilizadores de HTML tem vindo a ignorar silenciosamente o uso incorrecto do caracter e comercial em documento HTML - tratando os e comerciais que não pareçam referências de entidade como e comerciais literais. Os agentes utilizadores XML não vão tolerar este uso incorrecto e qualquer documento que usar e comercial de forma incorrecta será "inválido" e consequentemente não estará em conformidade com esta especificação. De forma a assegurar que documentos que eram compatíveis com agentes utilizadores antigos de HTML e agentes utilizadores baseados em XML, os e comerciais usados num documento que sejam para ser tratados como caracteres literais têm eles mesmo de ser uma referência de entidade (isto é, "&amp;"). Por exemplo quando um atributo href de um elemento a se referir a um script CGI que tome parâmetros esse atributo deve ser expresso como: http://meu.sitio.dom/cgi-bin/meuscript.pl?classe=convidado&amp;;nome=utilizador em vez de http://meu.sitio.dom/cgi-bin/meuscript.pl?classe=convidado&nome=utilizador.

  13. Folhas de Estilo em Cascata (CSS) e XHTML

    A Recomendação de nível 2 das folhas de estilo em cascata [CSS2] definem propriedades de estilo que são aplicadas à árvore de análise dos documentos HTML ou XML. As diferenças na análise irão produzir resultados visuais e/ou auditivos diferentes dependendo dos selectores usados. As pistas seguintes reduzem este efeitos em documentos que são servidos sem alterações como ambos tipos de media:

    1. As folhas de estilos CSS para XHTML devem usar minúsculas para nomes de elementos e atributos.
    2. Em tabelas, o elemento tbody será inferido pelo analisador de um agente utilizador HTML, mas não pelo analisador de um agente utilizador XML. Assim deve ser sempre explicito e adicionar o elemento tbody se o mesmo é referido num selector CSS.
    3. No espaço de nomeação XHTML, é de esperar que os agentes utilizadores reconheçam o atributo "id" como um atributo do tipo ID. Assim, as folhas de estilo devem ser capazes de continuar a usar o selector abrevidado "#" mesmo se o agente utilizador não ler o DTD.
    4. No espaço de nomeação XHTML, é de esperar que os agentes utilizadores reconheçam o atributo "class". Assim, as folhas de estilo devem ser capazes de continuar a usar a sintáxe abreviada de selectores ".".
    5. A CSS define regras de conformidade diferentes para documentos HTML e XML; não se esqueça que as regras HTML são aplicáveis a documentos XHTML entregues como HTML e que as regras XML são aplicáveis quando os documentos XHTML são entregues como XML.
  14. Referir o elementos style quando se serve como XML

    Em HTML 4 e XML o elemento style pode ser usado para definir as regras de estilo internas do documento. Em XML, é usada uma declaração de folha de estilo XML para definir as regras de estilo. De forma a ser compatível com esta convenção, os elementos style devem ter o seu identificador de fragmento usando o atributo id, e a declaração de folha de estilo XML deve referir-se a esse fragmento. Por exemplo:

    
    <?xml-stylesheet href="http://www.w3.org/StyleSheets/TR/W3C-REC.css" type="text/css"?>
    <?xml-stylesheet href="#estiloInterno" type="text/css"?>
    <!DOCTYPE html 
         PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pt" lang="pt">
    <head>
    <title>Um exemplo de folha de estilo interna</title>
    <style type="text/css" id="estiloInterno">
      code {
        color: green;
        font-family: monospace;
        font-weight: bold;
      }
    </style>
    </head>
    <body>
    <p>
      O texto que se segue usa o nosso 
      <code>estilo interno</code>.
    </p>
    </body>
    </html>
    
  15. Caracteres de espaço em branco em HTML e XML

    Alguns caracteres legais em documentos HTML são ilegais em documentos XML. Por exemplo, em HTML o caracter de avanço de folha (U+000C) é tratado como espaço em branco, em XHTML, devido à definição de caracteres é ilegal.

  16. A referência de entidade com nome &apos;

    O caracter &apos; (o apóstrofe, U+0027) foi introduzido no XML 1.0 mas não aparece no HTML. Os autores devem assim usar o &#39; em vez de &apos; de forma a funcionar como se espera em agentes utilizadores HTML 4.

Sem comentários: