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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]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 | editar código-fonte]TAL/TALES/METAL são usados pelos seguintes projetos:
- Zope (servidor de aplicações web)
- Roundup (gerenciador de incidentes)
- Simplicity PHP Framework
Outras implementações
[editar | editar código-fonte]Além da implementação original no Zope, há (não exaustivamente):
Python
[editar | editar código-fonte]- SimpleTAL (http://www.owlfish.com/software/simpleTAL/, TAL-guide)
- OpenTAL (http://savannah.nongnu.org/projects/opental/)
- ZPT (http://zpt.sourceforge.net/), uma versão independente do Zope Page Templates
- Chameleon (http://chameleon.repoze.org/), uma re-implementação rápida do Zope Page Templates
C#
[editar | editar código-fonte]- SharpTAL (http://sharptal.codeplex.com/)
JavaScript
[editar | editar código-fonte]- jstal (http://code.google.com/p/jstal/)
- Distal (http://code.google.com/p/distal/)
Java
[editar | editar código-fonte]- JPT: Java Page Templates (http://christophermrossi.com/jpt/)
- JavaZPT (http://javazpt.sourceforge.net/)
Perl
[editar | editar código-fonte]- PETAL, a Perl Template Attribute Language (http://search.cpan.org/dist/Petal/)
- Template-TAL (http://search.cpan.org/dist/Template-TAL/)
Perl 6
[editar | editar código-fonte]- Flower, uma implementação Perl 6 de TAL, com algumas extensões de Petal e PHPTAL. (http://github.com/supernovus/flower/)
PHP
[editar | editar código-fonte]- PHPTAL (http://phptal.org)
XSL
[editar | editar código-fonte]- XSLTal, transformando TAL via XSLT para XSLT; https://web.archive.org/web/20110429170112/http://svn.bitflux.ch/repos/public/popoon/trunk/components/transformers/xsltal/tal2xslt.xsl
Ligações externas
[editar | editar código-fonte]- Zope Page Templates Reference (Zope Book) - em Inglês
- Especificação TAL, v1.4 - em Inglês
- METAL Overview (Zope Book) - em Inglês