| Documento original: HTML Document Representation | Tradutor: De Sena Viegas |
Conteúdos
Neste capítulo, nós discutiremos a maneira como os documentos HTML lhe são apresentados no computador e através da Internet.
A secção conjunto de caracteres do documento indica-nos quais os caracteres abstractos que poderão fazer parte de um documento HTML. Estes caracteres incluem a letra latina "A", a letra cirílica "I", o carácter chinês que significa "água", etc.
A secção referente à codificação dos caracteres indica-nos a forma como esses caracteres poderão ser representados num ficheiro ou aqunado transferidos através da Internet. Dados que em algumas das codificações não se podem representar directamente todos os caracteres que o autor possa querer incluir num documento, o Código HTML oferece outros mecanismos denominados de referências dos caracteres , para se poder assim referir e representar qualquer carácter.
Dado que existe um número variado de caracteres resultantes do uso das linguagens humanas, bem como também uma grande variedade de maneiras para representar esses mesmos caracteres, têm de se tomar cuidados especiais para que os documentos possam ser entendidos pelos meios utilizados pelos utentes do Mundo inteiro.
Com vista a promover uma inter-operacionalidade, o SGML exige que seja especificada em cada aplicação (incluindo o HTML) o conjunto de caracteres nelas contidos. O conjunto de caracteres do documento é constituído por:
Cada documento SGML (incluindo ainda os documentos HTML) é uma sequência de caracteres pertencentes ao repertório. O sistema do computador identifica cada um dos caracteres de acordo com o seu código de localização; por exemplo, no conjunto de caracteres ASCII, o código de localização 65, 66 e 67 correspondem, respectivamente, aos caracteres 'A', 'B', e 'C'.
O conjunto de caracteres ASCII não é
suficiente para um sistema global de procura de
informação como a Web, servindo-se por essa mesma
razão o HTML de um conjunto de caracteres muito mais
completo, o Conjunto de caracteres Universais (do Inglês:
Universal
Character Set (UCS), como é
definido no documento
O conjunto de caracteres definido em [ISO10646] é equivalente ao Unicode, carácter por carácter ([UNICODE]). Estes dois padrões são periodicamente actualizados com novos caracteres, e as emendas poderão ser consultadas nas respectivas “homepages”. Na corrente especificação, o documento "[ISO10646]" é usado para fazer referência aos conjuntos de caracteres contidos num documento, ao passo que o documento "[UNICODE]" se destina apenas à referência ao texto de algorítmos bi-direcional.
O conjunto de caracteres do documento não é contudo o suficiente para permitir aos agentes usados pelos utentes interpretar correctamente os documentos HTML, dado que eles são caracteristicamente modificados ou codificados como uma sequência de “bytes”, no documento ou durante uma transmissão ou transferência de dados “online”. Os meios usados pelos utentes têm assim de reconhecer as codificações específicas dos caracteres que foram usados para transformar a corrente dos caracteres contidos no documento, numa corrente de bytes.
Aquilo que esta especificação denomina de codificação de caracteres, é conhecido noutras especificações por outros nomes (o que poderá causar alguma confusão). Contudo, o conceito é basicamente o mesmo na Internet, pelo Mundo fora. Assim, os cabeçalhos de protocolo, os atributos e os parâmetros referentes à codificação dos caracteres partilham entre si o mesmo nome -- "charset" --, usando ainda os mesmos valores, contidos no registro [IANA] (ver [CHARSETS], a fim de obter a lista completa).
O parâmetro "charset" identifica o tipo de codificação usado no documento, a qual consiste na conversão da sequência de bytes numa sequência de caracteres. Essa conversão adequa-se, como não poderia deixar de ser, ao esquema da actividade da Web: os servidores enviam documentos HTML aos agentes ou meios usados pelos utentes sob a forma de uma sequência de bytes; os agentes usados pelos utentes traduzem por sua vez essa sequência de bytes para uma sequência de caracteres O método de conversão poderá ir da simples correspondência um-para-um até aos mais complicados esquemas de transformação ou algorítmos.
Uma simples técnica de codificação de um "byte" por carácter não é o suficiente para uma sequência textual ("strings") tão grande como em [ISO10646]. Existem várias codificações parciais do [ISO10646] a somar às codificações do conjunto de caracteres inteiro (tais como UCS-4).
As ferramentas de criação de texto HTML (ex: os editores de texto) podem codificar documentos HTML, usando o tipo de codificação escolhido, dependendo essa escolha das convenções estabelecidas no software do sistema usado computador. Essas ferramentas poderão usar uma codificação mais conveniente, a qual abranja a maioria dos caracteres contidos no documento, desde que essa codificação seja correctamente etiquetada. Os caracteres que estejam ocasionalmente à margem dessa selecção poderão ser na mesma representados, através das referências dos caracteres. Essas referências fazem menção ao conjunto de caracteres contidos no documento e não ao tipo de codificação que foi usado.
Os servidores e os proxies poderão alterar a codificação desses caracteres (transcodificação) com vista a que eles preencham os requisitos de interpretação dos agentes usados pelos utentes (ver a secção 14.2 do [RFC2616], cabeçalho com os requisitos protocolares HTPP "Accept-Charset"). Os servidores e os proxies não têm obrigatoriamente de apresentar o documento com um tipo de codificação que cubra ou abranja o conjunto de caracteres nele contidos por completo.
Esta especificação não impõe o tipo de codificação de caracteres a ser aplicado e suportado pelo agente ou meio usado pelo utente.
Os agentes ou meios usados pelos utentes que estejam em conformidade deverão estar aptos a definir para o código ISO 10646 todas as codificações de caracteres por eles reconhecidas (ou pelo menos comportar-se como se assim o tivessem feito).
Quando um texto HTML é transmitido em UTF-16(charset=UTF-16), os dados textuais deverão ser transmitidos segundo o ordenamento da rede de bytes ("big-endian", o byte de maior ordem em primeiro lugar), de acordo com o documento [ISO10646], Secção 6.3 e [UNICODE], artigo C3, pág. 3-1.
Além disso e com o fim de maximizar as possibilidades de uma interpretação mais adequada, é-se recomendado que os documentos transmitidos com uma codificação do tipo UTF-16 comecem sempre por um carácter "ZERO-WIDTHNON-BREAKING SPACE" (hexadécimal FEFF, também denominado de "Byte Order Mark(BOM))" o qual, quando revertido a bytes, se converte num hexadécimal FFFE, um carácter que nunca pode se assinado. Através deste procedimento, o agente ou meio usado pelo utente que receba o hexadécimal FFFE, constituíndo os primeiros bytes de um texto, reconhecerá de imediato que esses bytes terão de ser invertidos para o texto restante.
O formato de transformação
Como é que o servidor determina qual o tipo de codificação de caracteres aplicado num documento? Alguns servidores examinam os primeiros “byte” do documento ou comparam-nos à base de dados e aos outros ficheiros e codificações já existentes. Muitos dos servidores actuais possibilitam aos “webmasters” um maior controlo sobre as configurações "charset" do que os antigos servidores. Os “webmasters” deverão pois servir-se desses mecanismos para enviar um parâmetro “charset”, sempre que assim o seja possível, devendo contudo tomar o cuidado de não identificar o documento com um valor de parâmetro “charset” errado.
Como é que o utente poderá identificar a codificação de caracteres que foi usada num documento? O próprio servidor deverá fornecer essa informação! A forma mais directa de informar o agente ou meio usado pelo utente acerca do tipo de codificação usada no documento é através do parâmetro "charset" situado no cabeçalho "Content-Type" (tipo de conteúdo), na zona de protocolo HTTP ([RFC2616], secções 3.4 e 14.17) Por exemplo, o cabeçalho HTTP que em seguida lhe iremos mostrar, indica-nos que a codificação dos caracteres utilizada é do tipo EUC-JP:
Content-Type: text/html; charset=EUC-JP
Por favor, consulte a secção referente à conformidade, a fim de obter a definição de text/html.
O protocolo HTTP ([RFC2616], secção 3.7.1) menciona ISO-8859-1 como sendo a codificação dos caracteres que é efectuada por defeito, sempre que o parâmetro "charset" não esteja definido na zona do cabeçalho referente ao "Content-Type" (tipo de conteúdo). Na prática, esta recomendação é inútil, dado que alguns servidores não permitem que o parâmetro "charset" seja enviado e outros ainda não podem ser configurados para esse fim. Por isso mesmo, os meios ou agentes utilizados pelos utentes não terão obrigatoriamente de assumir um valor por defeito para o parâmetro "charset".
A fim de referenciar as limitações verificadas no servidor ou relacionadas com a configuração, os documentos HTML poderão incluir informação explícita, referente ao tipo de codificação dos caracteres; o elemento META poderá ser usado para fornecer as referidas informações aos meios ou agentes utilizados pelos utentes.
Por exemplo, para especificar que a codificação dos caracteres no actual documento é do tipo "EUC-JP", o documento deverá incluir a seguinte declaração META:
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
A declaração META deverá
ser apenas usada, quando a codificação dos
caracteres estiver de tal forma organizada que os bytes com um valor
ASCII representem caracteres ASCII(pelo menos até que o
elemento
Nos casos em que nem o protocolo HTTP nem o elemento META forneçam a informação necessária acerca do tipo de codificação dos caracteres utilizado no referido documento, o HTML fornece ainda o atributo charset através de vários elementos. Através da combinação desses mecanismos, o autor poderá aumentar a probabilidade de, sempre que o utente recuperar um recurso, o agente ou meio por ele utilizado reconhecer o tipo de codificação que foi aplicada aos caracteres.
Resumindo, os meios ou agentes usados pelos utentes que estejam em conformidade deverão obedecer às seguintes prioridades, ao determinar-se o tipo de codificação dos caracteres utilizada no documento (por ordem descendente):
A somar a esta lista de prioridades, o meio ou agente usado pelo utente poderá servir-se da heurística ou ainda de outros ajustes personalizados. Por exemplo, muitos desses agentes ou meios utilizam a heurística para distinguir as variadas codificações usadas nos textos em Japonês. Além disso, esses meios ou agentes utilizados pelos utentes dispõem geralmente de configurações personalizadas para a codificação de caracteres, a qual poderá ser aplicada no caso de haver uma ausência de outros indicadores.
Eles poderão fornecer um mecanismo que permite aos utentes sobrepôr qualquer tipo de informação incorrecta, relacionada com o "charset". Contudo, se o meio ou agente usado pelo utente lhe oferecer tal mecanismo, ele deverá servir apenas para navegar e não para editar, a fim de evitar a criação de páginas Web marcadas com um parâmetro "charset" incorrecto.
Nota: Se, no caso de uma aplicação específica, se tornar necessário fazer referência a caracteres não pertencentes a [ISO10646], esses caracteres deverão ser atribuídos a uma zona privada, de modo a evitar eventuais conflitos com as versões actuais ou futuras do "standard". Contudo, esta medida é não é recomendada, por motivos de mobilidade.
A codificação de caracteres que
é apresentada poderá não estar apta a
expressar todos os caracteres contidos num documento. Para tais
codificações, ou quando as
configurações do "hardware" ou do "software"
não permitirem aos utentes a
introdução directa de alguns caracteres do
documento, os autores poderão usar as
As referências dos caracteres em HTML poderão aparecer sob duas formas distintas:
As referências contidas nos comentários não assumem qualquer significado; eles desempenham apenas uma função informativa.
Nota: o HTML fornece ainda outros modos de apresentar os dados formados por caracteres, em particular através das imagens "online”.
Nota: nalguns casos é possível, em SGML, eliminar a parte final - ";" - situada logo a seguir à referência do carácter (por exemplo, na mudança de linha ou antes do início de uma "tag"). Noutras circunstâncias esse final não poderá ser eliminado (por exemplo, no meio de uma palavra). Nós aconselhamos contudo o uso de ";" em todos os casos, de forma a evitar problemas com os meios ou agentes usados pelos utentes que requiram a presença deste carácter.
As referênciasnuméricas dos caracteres especificam a posição do código de um carácter no conjunto de caracteres do documento. As referências númericas podem assumir duas formas:
Eis aqui alguns exemplos de referências numéricas de caracteres:
Nota: ainda que a representação hexadécimal não esteja definida em [ISO8879], pensa-se contudo que esteja contida na revisão, como o descrito em[WEBSGML]. Esta convenção tornou-se particularmente útil desde que o standard dos caracteres passou a utilizar as representações hexadécimais.
De maneira a fornecer aos autores uma forma mais intuitiva de se fazer uma referência aos caracteres contidos no conjunto de caracteres do documento, o HTML oferece um conjunto de referências às entidades dos caracteres. Essas referências servem-se apenas de nomes simbólicos, para que os autores não se tenham de recordar das posições dos códigos. Por exemplo, a referência à entidade do carácter que é definido por å refere-se à letra minúscula “a” com um círculo por cima; "å" é muito mais fácil de lembrar do que å.
O HTML não define uma referência feita à entidade do carácter para cada carácter contido no conjunto de caracteres de um documento. Por exemplo, não existe nenhuma referência para a letra cirílica "I" maiúscula. Consulte por favor a lista completa das referências dos caracteres definidas em HTML4.
As referências feitas às entidades dos caracteres são um caso-sensível.Assim, Å refere-se a um carácter diferente, nomeadamente à letra maiúscula A com um círculo por cima.
Existem quatro referências feitas às entidades dos caracteres que merecem uma menção especial, dado que elas são frequentemente utilizadas para definir caracteres especiais:
Os autores que pretendam empregar o carácter "<" num texto deverão fazê-lo através de "<" (ASCII decimal 60), de forma a evitar possíveis confusões, relacionadas com o princípio de uma tag (delimitador de abertura de uma "tag"). Similarmente, os autores deverão usar ">" (ASCII décimal 62) num texto, em vez de ">", para evitar problemas relacionados com os meios ou agentes mais antigos usados pelos utentes, os quais o poderão interpretar de uma forma incorrecta como sendo o final de uma "tag" (delimitador de encerramento de uma "tag") sempre que ele apareça entre parênteses, como sendo o valor de um atributo.
Os autores deverão também usar "&" (ASCII décimal 38) em vez de "&", para evitar possíveis confusões relacionadas com o princípio da referência dos caracteres (delimitador de abertura de uma referência de entidades). Os autores deverão ainda usar "&" nos valores dos atributos, desde que as referidas referências sejam permitidas nos valores dos atributos CDATA.
Alguns autores usam a referência """ para codificar as instâncias onde existam parênteses ("), conquanto esse mesmo carácter possa ser usado para delimitar os valores de um atributo.
O meio ou agente usado pelo utente poderá não estar apto a representar de uma forma significativa ou correcta todos os caracteres, dado que ele poderá carecer, a título de exemplo, de uma fonte apropriada ou porque o carácter possui um valor que não pode ser expresso através da codificação de caracteres interna desse mesmo agente, e por aí adiante.
Dado que existem várias soluções, este documento não prescreve qualquer tipo de comportamento específico para esses casos. Dependendo da sua implementação, os caracteres não representáveis poderão ser tratados por um sistema de apresentação subjacente e não pela aplicação em si. Na ausência de outros comportamentos mais sofisticados, por exemplo, à medida das necessidades de uma linguagem ou “script” em especial, nós recomendamos o seguinte comportamento para os meios usados pelos utentes: