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

01 dezembro, 2005

xml:lang e lang

Contexto

Por vezes os documentos contêm ou incluem conteúdo com línguas diferentes. Por vezes é necessário armazenar um valor de língua natural como dado ou metadado sobre algo externo ao documento. Devido a estas diferentes aplicações usarem formatos similares, os conceptores de esquemas por vezes confundem a utilização admissível de xml:lang e quando devem definir os seus próprios elementos/atributos relativos a línguas.

Por exemplo em XHTML 1.0 há um atributo hreflang no elemento e também um xml:lang (ou atributo lang, no caso do HTML 4.0) para o conteúdo de um elemento a:

<a xml:lang="pt" href="xyz" hreflang="de">
   Carregar aqui para versão alemã</a>

O atributo xml:lang descreve uma língua contida pelo elemento a ("Carregar aqui para versão alemã"), enquanto o atributo hreflang é metadado, neste caso descrevendo a língua de um conteúdo externo a esta página web.

Resposta

Quando usar xml:lang

Conteúdo directamente associado ao documento xml (seja contido dentro do documento directamente seja considerado parte de um documento quando processado ou reproduzido) deve usar o atributo xml:lang para indicar a língua desse conteúdo. xml:lang deve ser reservado a autores de conteúdo para etiquetarem directamente qualquer conteúdo em língua natural que tenham.

xml:lang é definido pelo xml 1.0 como um atributo comum que pode ser usado para indicar a língua de qualquer conteúdo de um elemento. Isto inclui texto legível por humanos assim como outro conteúdo (tais como os objectos embebidos, imagens ou ficheiros de som), contidos por um elemento no qual apareça. O valor xml:lang é aplicado a cada um dos sub-elementos contidos pelo elemento. Também se aplica a valores de atributos associados com o elemento e sub-elementos (embora usar língua natural num atributo não seja uma boa prática). O valor de um atributo xml:lang é um dos possíveis indicados no RFC 3066 ou um dos seus sucessores.

Eis um exemplo de xml:lang num elemento t:


   <t xml:lang="pt"> 
   Isto é texto contido num elemento 't'. O uso do atributo
   xml:lang indica que a língua, que por exemplo um corrector 
   ortográfico deve aplicar quando estiver a efectuar uma
   revisão do documento é Português. Se não o indicarmos
   podemos ter problemas se tivermos conteúdo embebido 
   noutra língua como na frase <span xml:lang="fr">
   C'est la vie</span>, que está em francês.
   </t>

Este exemplo mostra a aplicação de xml:lang a um atributo:


 <para>Il faut utiliser 
 <abbr title="Simple Object Access Protocol" xml:lang="en">
 SOAP</abbr></para>

Quando usar o seu próprio elemento ou atributo

Quando o valor da língua é realmente um atributo de ou metadado sobre algum conteúdo externo, então xml:lang não e uma escolha apropriada. Nestes casos deseja guardar informação sobre língua, mas a língua não se refer ao conteúdo do documento xml (ou conteúdo incluído, tal como imagens, que são processadas como parte do documento) directamente. Neste caso deve definir um elemento ou atributo com um nome diferente e não usar o atributo xml:lang. O valor do elemento ou atributo deve usar o RFC 3066, tal como xml:lang.

Alguns exemplos disto podem incluir:

  • Um elemento num documento xml descrevendo a sua colecção de DVD's para indicar em que línguas se encontras as canções;
  • Um elemento de uma base de dados de clientes com um campo para a língua preferida do cliente;
  • Um atributo de um elemento de ligação (tal como o a no xhtml) apontando para uma versão do documento noutra língua.

A razão pela qual optar por criar o seu próprio elemento (ou atributo) é comunicar a língua como um valor (ou parte de uma estrutura de dados ou como metadados sobre um documento externo) em vez de indicar a língua de uma peça específica de conteúdo. Evitar usar xml:lang para descrever valores externos de língua evita criar problemas a autores de conteúdos que necessitem de etiquetar conteúdo com finalidades relativas a processamento de texto.

Por exemplo um documento xml poderá ter o seguinte aspecto:


 <item type="DVD"> 
  <title xml:lang="fr">Cyrano de Bergerac</title>    
  <!-- indic a língua em que o filme se encontra -->
  <duracao value="137" />                        
  <!-- não afectado pela língua -->
  <dialogue>en</dialogue>                            
  <!-- indic a língua do diálogo -->
  <legendas pista="1" lingua="zh-Hant" />         
  <!-- Esta pista contém legendas em chinês tradicional -->
  <legendas pista="2" lingua="zh-Hans" /> 
 </item>

Neste exemoplo o atributo xml:lang comunica informação sobre a língua natural do texto que aparece neste documento. O elemento diálogo e o atributo língua dos elementos legendas são definidos no esquema do documento xml e comunicam um valor de língua natural associado a estes itens. Por exemplo comunica a informação de que as legendas na pista número 1 são escritas ou mostradas em chinês tradicional.

A propósito

É importante lembrar que xml:lang tem âmbito de validade: os elementos de nível inferior herdam o atributo. Isto pode servir para identificar a língua de muito conteúdo (sem ter marcadores de língua redundantes em cada elemento). Por exemplo, é boa prática colocar xml:lang no elemento html no início do documento xhtml e só o voltar a usar quando a língua mudar. Para mais informação ver o artigo: Marcadores de Língua em HTML e XML.

Recursos adicionais

Técnicas de autoria para internacionalização de xhtml e html: Especificação de língua de conteúdo 1.0

Sem comentários: