Template Attribute Language

A Template Attribute Language (TAL) é uma linguagem de modelo usada para gerar páginas HTML e XML dinamicamente. Seu principal objetivo é simplificar a colaboração entre programadores e designers. Isto é conseguido pela incorporação de declarações TAL dentro de tags HTML (ou XML, respectivamente) válidas que podem então ser trabalhadas utilizando-se ferramentas de design comuns.

TAL foi criada para o Zope, mas também é usada em outros projetos baseados em Python.

Visão geral editar

Modelos TAL normalmente são compostos de páginas de resultado com a variável content sendo substituída por atributos especiais. Por exemplo,

<h1 tal:content="string:Algumas chamadas completamente diferentes">
Uma chamada visível para o designer
</h1>

seria tratada por uma ferramenta de desenvolvimento HTML comum como

<h1>
Uma chamada visível para o designer
</h1>

enquanto que o servidor de aplicações, avaliando o atributo tal:content, produziria

<h1>
Algumas chamadas completamente diferentes
</h1>

Naturalmente, os literais de cadeia de caracteres não são os casos de uso mais comuns nem os mais úteis. A sintaxe dos possíveis valores de atributo são propriedades da linguagem TAL Expression Syntax (TALES). Em implementações baseadas em Python, é possível usar expressões Python.

Utilizando-se METAL (Macro Expansion TAL) é possível reutilizar código de outros modelos.

Ao gerar documentos XML, é importante especificar o espaço de nomes XML xmlns:tal="http://xml.zope.org/namespaces/tal"

Atributos editar

Os seguintes atributos são usados, normalmente prefixados por "tal:":

define
cria variáveis locais, válidas no elemento que suporta o atributo (incluindo elementos contidos)
condition
decide se deve ou não apresentar o tag (e todo o texto contido)
repeat
cria uma variável loop e repete a tag iterando uma sequencia, por exemplo, para criar uma lista de seleção ou uma tabela
content
substitui o conteúdo da tag
replace
substitui a tag (e, portanto, não pode ser usado junto com o conteúdo ou atributos)
attributes
substitui os atributos dados (por exemplo, usando tal:attributes="name name; id name" os atributos nome e id de um campo de entrada podem ser definidos como o valor da variável "name")
omit-tag
permite omitir a tag de início e término e apresentar apenas o conteúdo se a expressão for verdadeira.
on-error
se ocorrer um erro, este atributo funciona como a tag de conteúdo.

Se uma tag tem mais de um atributo TAL, elas são avaliadas na ordem (bastante lógica) acima.

Nos casos em que nenhuma tag estiver presente, que se presta para tomar os atributos, tags TAL especiais podem ser utilizadas, tornando o prefixo "tal:" opcional. Por exemplo:

<tal:if condition="context/itemlist">
...
</tal:if>

faria com que o código dentro das tags tal:if serem utilizadas sempre que o contexto (seja qual for o servidor de aplicação que define o contexto para ser um objeto, por exemplo) contém a variável "itemlist" com um valor true, por exemplo, uma lista contendo pelo menos um elemento. O identificador depois dos dois pontos é arbitrário. Ele simplesmente precisa estar lá e ser o mesmo para as tags de abertura e fechamento.

METAL editar

A Macro Expansion Template Attribute Language complementa TAL, fornecendo macros que permitem reutilizar o código através de arquivos de modelo (template). Ambas foram criadas para o Zope, mas também são utilizadas em outros projetos Python.

METAL complementa TAL com a habilidade de reutilização de código. Ela permite que o desenvolvedor defina e utilize macros, que por sua vez pode possuir slots. Quando utiliza-se uma macro, o conteúdo variacional pode ser especificado por um slot.

Ao gerar documentos XML, o espaço de nomes XML deve ser especificado (xmlns:metal="http://xml.zope.org/namespaces/metal").

Atributos de METAL editar

Os seguintes atributos são reconhecidos, normalmente requerendo um prefixo „metal:“:

define-macro
cria uma macro
define-slot
cria um slot dentro de uma macro
use-macro
utiliza uma macro (normalmente passada através de uma expressão de caminho TALES)
fill-slot
quando utiliza uma macro, substitui o conteúdo padrão de um dados slot
extend-macro
a partir do Zope v3: estende uma macro, comparável à criação de subclasses, pela redefinição de slots

Normalmente, apenas um destes é usado por vez.

Em casos quando não há nenhuma tag presente, que se presta a tomar os atributos, e em casos especiais, quando mais de um atributo METAL é necessário, tags especiais de METAL podem ser usadas​​, tornando o prefixo „metal:“ opcional. Por exemplo (esboçado com o Roundup em mente):

<html metal:define-macro="icing">
...
<metal:myslot define-slot="optional-form"/>
...
</html>

<html metal:use-macro="templates/page/macros/icing">
<form metal:fill-slot="optional-form" action="."
        tal:attributes="action context/designator">
...
</form>
</html>

Uso editar

TAL/TALES/METAL são usados pelos seguintes projetos:

Outras implementações editar

Além da implementação original no Zope, há (não exaustivamente):

Python editar

C# editar

JavaScript editar

Java editar

Perl editar

Perl 6 editar

PHP editar

XSL editar

Ligações externas editar