SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
UNIVERSIDAD MAYOR DE SAN ANDRES
Facultad de Ciencias Puras y Naturales
Postgrado en Informática
Programación Orientada a Objetos
FFRRAAMMEEWWOORRKKSS DDEE TTEEMMPPLLAATTEESS YY XXMMLL
Presentado a: Ing. M. Sc. Esteban Saavedra
Presentado por: Roger Saravia & J. J.
La Paz, Bolivia - Septiembre de 2007
2
1 Introducción
El escenario de este trabajo se desarrolla en el área de los frameworks;
específicamente en los frameworks de templates y XML.
El problema identificado es el cómo elegir un framework de templates y XML dadas
ciertas necesidades.
Se abordará el problema mediante la presentación y descripción de los principales
frameworks de templates y XML.
2 Objetivo General
El objetivo general de este trabajo es comparar las principales características de los
frameworks de templates y XML más difundidos.
3
3 Marco Teórico (Síntesis)
3.1 ¿Qué es un Framework de Templates y XML?
Un framework de templates y XML es principalmente un motor de plantilla (template)
inteligente con relación al lenguaje de marcado. Un framework de templates es capaz
de procesar el marcado como un flujo de eventos (streams). Además proporciona
varias herramientas para generar o trabajar con XML y HTML.
3.2 ¿Por qué un Framework de Templates?
Porque usar templates basados en texto para producir XML genera fácilmente errores y
porque considerar todos los casos podría ser no práctico. Los sistemas basados en
solo texto han fallado incluso a gente preparada que ha procurado hacer las cosas bien.
4
3.3 ¿Y Cómo Funciona?
Ilustración 1. Funcionamiento de un framework de templates y XML según
Christopher Lenz (http://www.cmlenz.net).
5
Casi todos los frameworks de templates usan el lenguaje Python como lenguaje base.
Por ejemplo, mediante el uso del API de Python y usando la clase Template, se tiene:
Ejemplo 1. Generación de un template mediante código de Python (D. A. R.)
6
3.4 Stream de Marcado: Anatomía
El stream de marcado es básicamente una acción cíclica sobre lo que se conoce como
un evento de marcado. Por ejemplo:
Ejemplo 2. El stream y un evento de marcado (D. A. R.)
7
3.5 ¿Cuándo se Produce un Stream de Marcado?
 La generación de un template produce un stream.
 El parsing de un HTML o XML produce un stream.
 Los streams pueden ser generados programáticamente.
3.6 Procesando Streams
Un procesamiento Incluye
los siguientes pasos: iterar,
verificar la clase, ejecutar o
hacer algo y producir.
Ejemplo 3: Coloca en
mayúsculas las etiquetas
que no están a lado de un
espacio (D. A. R.)
8
3.7 Filtrado de Streams
Se trata de rutinas del paquete de filtrado de streams capaces de re-usar streams; un
objeto que toma un stream y retorna otro. Ejemplo:
Ejemplo 4. Se filtra un stream removiendo cierta información y produciendo
otro stream. (D. A. R.)
9
3.8 Streams: Serialización
Consiste en la producción de texto a partir de distintos eventos de streams. Hay
formatos de serialización para XML, XHTML, HTML y texto plano.
Ejemplo 5. Serialización (D. A. R.)
10
3.9 Escaping (Elemento del Funcionamiento de los Frameworks de Templates)
Los templates requieren que uno explícitamente haga el “escapeo” de datos. Y tener
que “escapear” datos es bastante común.
Ejemplo 6. Una página sin “escapeo” (D. A. R.)
11
3.10 Saneamiento HTML
Muchas veces hay la necesidad de
permitir al usuario ingresar código
HTML para entrar marcado. Podría
ser para la entrada de texto con
formato. El foro de participación de
la plataforma de educación virtual
Moodle es un ejemplo.
Además porque puede haber la
necesidad de protegerse ante un
usuario pirata que aproveche ésta
opción para filtrar código malicioso.
Ejemplo 7: El no saneamiento del
código HTML causó que una
compañía extranjera de poleras
imprima prendas alteradas (D. A. R.).
12
3.11 Otras Funciones Avanzadas
 La clonación de formularios HTML llenados con datos.
 Los transformadores o filtros streams para realizar transformaciones dentro de las
etiquetas capturadas por el stream.
Ejemplo 8: Accesibilidad para gente que la necesita (D. A. R.)
 Internacionalización.
13
3.12 Rendimiento
 El trabajo con templates basados en XML es computacionalmente más “caro” que
el trabajo con templates basados en puro texto. Esto se debe a que en el primero
se tratan con etiquetas, elementos, atributos y todo aquello; mientras que en el
caso de solo texto se tienen caracteres o bytes.
 No se recomienda el uso excesivo de XML templates.
4 Casos de Estudio
4.1 Mako
Mako es una librería para templates escrita en Python. Provee una familiar sintaxis no-
XML que se compila en módulos Python para un máximo rendimiento. La sintaxis de
Mako y su API emergen de las mejores ideas de muchos otros como: Django, Cheetah,
Myghty, and Genshi. Conceptualmente, Mako es un “pitón” embebido (como es Python
Server Pages) pero con un refinamiento del diseño mediante componentes y herencia
para producir uno de los modelos más robustos y flexibles.
14
Mako es usado por el sitio Pytho.org. Un vistazo a su código:
<%inherit file="base.html"/>
<%
rows = [[v for v in range(0,10)] for row in range(0,10)]
%>
<table>
% for row in rows:
${makerow(row)}
% endfor
</table>
<%def name="makerow(row)">
<tr>
% for name in row:
<td>${name}</td>
% endfor
</tr>
</%def>
Mako puede ser considerado como la siguiente generación de sistemas de templates y
hasta podría establecerse como el lenguaje por defecto de Pythons web framework.
15
Características:
 API simple.
 Rápido.
 Estructuras de control como loops sobre la base del lenguaje Python.
 Se puede incluir bloques de código Python.
 Puede acceder a variables fuera del template.
 Puede tener anidaciones múltiples.
 Puede especificar varios argumentos Python en las firmas (métodos).
 Bloques del tipo llamables (callables).
 Manejo avanzado de herencia.
16
4.2 Kid
Es un lenguaje de templates simple para vocabularios basados en XML escrito en
Phyton. La sintaxis del lenguaje fue inspirada en lenguajes de templates existentes
como XSLT, TAL, PHP. Como hay una variedad de herramientas que trabajan con
documentos XML en Phyton, generar XML es tedioso y es común cometer errores.
APIs como SAX, DOM, o ElementTree pueden garantizar la construcción de la salida
pero requiere que esos documentos estén creados enteramente en Python.
Los lenguajes de templates como Cheetah o PTL generan texto de contenido fácil pero
ofrecen poco ayudar para asegurar que el rendimiento sea el correcto. Usar
herramientas basadas en texto para generar XML puede generar datos errados.
Características
 Kid es un intento de traer los beneficios de estas tecnologías juntas en un paquete
coherente y único.
17
 Kid también permite al programador explotar la estructurada de XML escribiendo
filtros y transformaciones que trabajan al XML. Kid templates usa un generador
para producir ítems.
 Kid puede usarse para generar cualquier tipo de documento XML incluyendo
XHTML, RSS, Átomo, FOAF, RDF, XBEL, XSLT, RelaxNG, Schematron, SOAP,
etc.
 Kid soporta características mas avanzadas como condicionales (py:if), iteración
(py:for), y sub templates reusables (py:def).
 Kid templates debería usar archivos con extensión .kid si esta importando el
módulo de templates usando el código normal de Phyton. El import hood de Kid
confía en el archivo de extensión .kid que esta presente.
Ventajas
 Cada template de modulo exporta una clase llamada “Template”. Una instancia de
template es obtenida de una de las tres maneras siguientes:
 La función Template es la mejor forma.
18
 Habilitando el import hood, usando el import de Pitón para obtener el modulo y
recuperando la clase Template.
 Llamando a la función kid_load_template y recuperando la clase Template.
 Las salidas pueden ser en formato XML o WML(wireless markup languaje).
Requerimientos:
 Kid requiere plataforma Pitón 2.3 y el paquete ElementTree
Forma de instalación:
Extraer las fuentes en una carpeta y ejecutar setup.py, como lo muestra el siguiente
código.
$ gzip -dc kid-0.9.5.tar.gz | tar xvf -
$ cd kid-0.9.5
$ python setup.py install
19
Si no incluye los argumentos extras en la instalación, podrá instalar los siguientes ítems:
Librerías Phyton en el directorio site-packages.
Comandos kid y kidc como script de Phyton.
Un vistazo a su código:
<?python
title = "The Mandelbrot Set"
def color(x,y):
z = c = complex(x, -y)/100.0
for n in range(16):
z = z*z + c
if abs(z) > 2:
break
return "#%x82040" % n
?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#">
<head>
<title py:content="title" />
</head>
<body bgcolor="black" text="white">
<table width="100%" height="100%">
20
<tr>
<td align="center" valign="middle">
<h1 py:content="title" />
<table cellspacing="1" cellpadding="2">
<tr py:for="y in range(-150, 150, 5)">
<td py:for="x in range(-250, 100, 5)" bgcolor="${color(x,y)}" />
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
4.3 Genshi
Genshi provee un motor de template que puede usarse para generar otros marcados
(tal como HTML o XML) o texto simple. Mientras ambos comparten algo de la sintaxis (y
mucha de la implementación) ellos se separan esencialmente por el lenguaje.
21
Los templates son XML o archivos de texto plano que incluyen directivas de
procesamiento que afectan al rendimiento de los templates, y templates de expresiones
que son sustituidas dinámicamente por datos variables.
Características
 Sentencias condicionales como: py:if, py:choose
 Iteraciones como: py:for
 Reusar Snippet como: py:def, py:match
 Variable Binding como: py:with
 Manipulación de estructuras como: py:attrs, py:content, py:replace, py:strip
 Además de includes para templates de texto e includes dinámicos.
Forma de Instalación
Extraer los fuentes en una carpeta y ejecutar $ easy_install Genshi
22
Un vistazo a su código:
<?python
title = "A Genshi Template"
fruits = ["apple", "orange", "kiwi"]
?>
<html xmlns:py="http://genshi.edgewall.org/">
<head>
<title py:content="title">This is replaced.</title>
</head>
<body>
<p>These are some of my favorite fruits:</p>
<ul>
<li py:for="fruit in fruits">
I like ${fruit}s
</li>
</ul>
</body>
</html>
23
Este ejemplo muestra:
a. Un bloque de código de Phyton, usando una instrucción de procesamiento.
b. La declaración del namespace de Genshi.
c. El uso de directivas de templates (py:content y py:for).
d. Expresión de Phyton (${fruit}).
El template generaría una salida parecida a:
<html>
<head>
<title>A Genshi Template</title>
</head>
<body>
<p>These are some of my favorite fruits:</p>
<ul>
<li>I like apples</li>
<li>I like oranges</li>
<li>I like kiwis</li>
</ul>
24
</body>
</html>
Un template de texto es un documento de texto plano que puede contener también
código empotrado de Python. Los templates de texto pueden usarse para generar
formato de texto no marcado, tal como el cuerpo de un email de texto plano. Por
ejemplo:
Dear $name,
These are some of my favorite fruits:
#for fruit in fruits
* $fruit
#end
25
4.4 Otros Lenguajes Usados
FXT Templating
 Flex Templating proporciona una rica técnica de templating del lado del cliente
usando MVC (Model-View-Controller). FXT soluciona una variedad de problemas
mediante el uso de su tecnología Flex en combinación con Flash Player.
 La clave está en que el modelo incluido dentro del HTML controla la vista de una
aplicación tipo Flex. En una aplicación típica basada en HTML, el modelo de datos
y las etiquetas (la vista) van mezcladas. Pero con FXT el modelo de datos y la
vista son separadas del código del template Flex hasta que arriban a la PC del
usuario.
TAL (Template Attribute Language)
 Para XML templating.
 Basado en atributos
 TAL y Kid consisten enteramente de atributos y no de elementos.
26
XSLT (XSL Transformations)
 Templating
 XSLT siempre ha brillado por realizar transformaciones a partir del “macheo” de los
nombres de elementos en el documento original y convertirlos en salida. O sea
hacer cambios en las mismas etiquetas.
 Una desventaja del XSLT es que es bastante complejo para hacer simple
templating. Además no todo está escrito en XML; razón por la cual, XSLT está
limitado.
PXTL (Python XML Template Language)
 Lenguaje completo aunque muy aparatoso.
 No muy usado.
PTL (Python Template Language)
 Lenguaje basado en texto que no satisface todos los requerimientos.
 Comentario: Kid hace lo mismo pero con documentos XML.
27
4.5 Otros Lenguajes Menos Usados
Cheetah
Característica Observación
Caché [X] Se pueden compilar los templates como clases Python.
Velocidad moderada No es muy rápido en el tema de las librerías.
Wysiwyg [ ] No. Usar un editor de texto.
Flexibilidad Grande
Diseño tipo
Python
[X] Puede usar los constructos de Python en el mismo template.
Puro python Sí
Sintaxis XML [ ] No
Curva de
aprendizaje
Corta
Comunidad Grande
Resumen
Cheetah es uno de los más sencillos y comprensivos motores de
templates. Buena documentación.
28
ClearSilver
Característica Observación
Cache [ ]
Velocidad No se tienen pruebas todavía.
Wysiwyg [ ] No. Usar cualquier editor de texto.
Flexibilidad Grande
Diseño tipo
Python
Escrito en C pero incluye controladores para Python, Ruby, Perl, y
Java
Puro python No
Sintaxis XML [X]
Curva de
aprendizaje
Corta
Comunidad Pequeña
Un resumen:
ClearSilver usa un enfoque controlado por conexión a datos que
completamente separa el diseño de la aplicación lógica.
29
PyMeld
Característica Observación
Caché [ ] Dejado al usuario.
Velocidad Aún no se tienen pruebas.
Wysiwyg [X] Templates consistentes en puro HTML/XHTML.
Flexibilidad Marcado
Diseño tipo
Python
[X] Bastante.
Puro python Sí
Sintaxis XML No. Basado en el atributo "id" del HTML/XHTML.
Curva de
aprendizaje
Corta
Comunidad Ninguna
Resumen:
Elegante y única herramienta para manipular HTML de manera
pitónica. Cualquier elemento (X)HTML con atributo "id" puede ser
manipulado.
30
Xyaptu
Característica Observación
Caché [ ] No.
Velocidad No se ha probado aún.
Wysiwyg [ ] Solo mediante el uso de etiquetas XML.
Flexibilidad Buena Búcles, condicionales y otros.
Diseño tipo
Python
[X] Usa diccionarios, cadenas y generadores.
Puro python [X] Bastante.
Elementos del
Lenguaje
7 Sintaxis de marcado.
Curva de
aprendizaje
Muy corta
Comunidad Pequeña
Resumen Xyaptu es la sigla de: eXtended Yet Another Python Templating Unit
31
ZPT
Característica Observación
Caché [ ] No se sabe.
Velocidad [ ]
WYSIWYG [ ]
El XHTML puede ser editado en WYSIWYG pero el scripting debe ir
entre espacios de nombre XML.
Diseño tipo
Python
[ ]
Flexibilidad
Integration
Puro Python [X]
Sintaxis XML [X]
Curva de
aprendizaje
Media Depende del conocimiento sobre Python y XML.
Comunidad Media Llamada ZOPE con soporte disponible.
32
Resumen
Es aconsejable para el fácil diseño web que permite la no
“perturbación” del scripting embebido en la página. ZPT puede ser
usado solo con documentos XML y no con otros documentos
basados en texto o CSS.
py.xml
Característica Observación
Caché [ ] Ninguna
Velocidad [ ]
WYSIWYG [ ] No. Usar cualquier editor de texto.
Diseño tipo
Python
[X] py.xml está basado en Python para generar XML.
Puro Python [X]
Sintaxis XML [ ] No. Todo el código está basado en Python.
Curva de
aprendizaje
No Si uno sabe Python, puede py.xml.
33
Comunidad ¿?
Resumen
La librería del py ofrece una manera pitónica de generar XML/HTML
basada en ideas que usan clases de objetos de Python para generar
los árboles XML.
4.6 Comparación de Tiempos de los “Principales” Frameworks de Templates
Sobre un diseño sencillo que incluya 3 frames (marcos):
Framework de Templates Tiempo de Respuesta
Mako 1.10 ms
Myghty 4.52 ms
Cheetah 1.10 ms
Genshi 11.46 ms
Django 2.74 ms
Kid 14.54 ms
34
5 Conclusiones
El elemento clave del funcionamiento de los frameworks de templates es el stream de
marcado que captura eventos de marcado. Su buen conocimiento puede ser clave
también para la buena programación en los lenguajes de templates.
Hay una gama grande de frameworks para templates. La mayoría de ellos están
basados en el lenguaje Python y XML; no obstante hay algunos que se basan en puro
Python. Pueden apreciarse en muchos de ellos es el uso de clases, objetos y herencia.
Debido a su rendimiento, Mako podría ser el framework de templates estándar de la
próxima generación.
Kid es una de las mejores opciones puesto que compila lo mejor de varias tecnologías y
ofrece una respuesta multiformato basada casi enteramente en XML.
Genshi es una tecnología robusta y basada en Kid pero permite además el “plantillado”
(templating) de texto plano.
XSLT tiene la gran ventaja de estar siempre presente puesto que se incluye junto a la
tecnología XML; no obstante es de implementar y no incluye Python.
35
Los lenguajes más recientes son como unidades sueltas de framework templating
orientados a trabajos con formatos específicos.
Hay poco benchmarking e información sobre pruebas con relación a las características
de todos los frameworks de templating. Mako está entre uno de los más rápidos
lenguajes de templates.
Los lenguajes de templating trabajan con etiquetas y todo aquello; razón por la cual
consumen "cómputo" y deben usarse con discreción.
6 Referencias
 RYAN TOMAYKO “In search of a Pythonic, XML-based Templating
Language”. [En red]. Disponible en:
http://www.tomayko.com
 CHERRY PY “Choosing a templating language”. [En red]. Disponible
en: http://www.cherrypy.org
36
 CHRISTOPHER LENZ “Genshi”. [En red]. Disponible en: http://www.cmlenz.net
 GENSHI “Genshi Templating Basics”. [En red]. Disponible en:
http://genshi.edgewall.org
 KID “Pythonic, XML-based Templating”. [En red]. Disponible
en: http://www.kid-templating.org
 MAKO “Mako Templates for Python”. [En red]. Disponible en:
http://www.makotemplates.org
 ONFLEX “FXT - Flex Templating”. [En red]. Disponible en:
http://www.onflex.org

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Funciones en php
Funciones en phpFunciones en php
Funciones en php
 
Formulario
FormularioFormulario
Formulario
 
Curso php y_my_sql
Curso php y_my_sqlCurso php y_my_sql
Curso php y_my_sql
 
C# Nuevas características en C# 6
C# Nuevas características en C# 6C# Nuevas características en C# 6
C# Nuevas características en C# 6
 
Introducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGRIntroducción a PHP - Programador PHP - UGR
Introducción a PHP - Programador PHP - UGR
 
Manual+php+básico
Manual+php+básicoManual+php+básico
Manual+php+básico
 
Tarea pagweb
Tarea pagwebTarea pagweb
Tarea pagweb
 
Manual PHP 7
Manual PHP 7Manual PHP 7
Manual PHP 7
 
4.Programación con PHP y MySQL
4.Programación con PHP y MySQL4.Programación con PHP y MySQL
4.Programación con PHP y MySQL
 
Estructura basica para_c_
Estructura basica para_c_Estructura basica para_c_
Estructura basica para_c_
 
Comandos vb
Comandos vbComandos vb
Comandos vb
 
Php
PhpPhp
Php
 
PHP MYSQL - FIEI-UNFV Clase 01
PHP MYSQL - FIEI-UNFV Clase 01PHP MYSQL - FIEI-UNFV Clase 01
PHP MYSQL - FIEI-UNFV Clase 01
 
Diccionario visual basic
Diccionario visual basicDiccionario visual basic
Diccionario visual basic
 
Lenguaje c ++ guía para programadores
Lenguaje c ++  guía para programadoresLenguaje c ++  guía para programadores
Lenguaje c ++ guía para programadores
 
Consultas linq
Consultas linqConsultas linq
Consultas linq
 
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
Aprendiendo php my sql, javascript, css, html5 capitulo 4 expresiones y contr...
 
Prog ii excepciones_guia_04
Prog ii excepciones_guia_04Prog ii excepciones_guia_04
Prog ii excepciones_guia_04
 
Practica Dos Delphi
Practica Dos DelphiPractica Dos Delphi
Practica Dos Delphi
 
Manual de el lenguaje de programacion c# ( español spanish) x richy
Manual de el lenguaje de programacion c# ( español spanish) x richyManual de el lenguaje de programacion c# ( español spanish) x richy
Manual de el lenguaje de programacion c# ( español spanish) x richy
 

Similar a Frameworks de templates y xml

Django - Plataforma de sitios web
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios webjcarazo
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)Darwin Durand
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSIan Monge Pérez
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itstomicx
 
Presentación muy chula ApéndiceTecnologíaXML.ppt
Presentación muy chula ApéndiceTecnologíaXML.pptPresentación muy chula ApéndiceTecnologíaXML.ppt
Presentación muy chula ApéndiceTecnologíaXML.pptprofesoralpe4
 
Desarrollo de aplicaciones en internet
Desarrollo de aplicaciones en internetDesarrollo de aplicaciones en internet
Desarrollo de aplicaciones en internetMaestros Online
 
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...SergioIglesiasNET
 
Acceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-phpAcceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-phpJulio Cesar Salas
 
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDesarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDidier Granados
 
Creando módulos en Drupal 7
Creando módulos en Drupal 7Creando módulos en Drupal 7
Creando módulos en Drupal 7Edgar Dueñas
 
Servicio web
Servicio web Servicio web
Servicio web Yael67
 
San Luis Oct 2008
San Luis Oct 2008San Luis Oct 2008
San Luis Oct 2008guest02b440
 
Framework by Marcos Acosta
Framework by Marcos AcostaFramework by Marcos Acosta
Framework by Marcos AcostaMarcos Acosta
 
Joomladay Mallorca 2010 Templates Workshop
Joomladay Mallorca 2010 Templates WorkshopJoomladay Mallorca 2010 Templates Workshop
Joomladay Mallorca 2010 Templates Workshopjoomlaprojects
 
4 Guia Xhtm Lv2.1
4   Guia Xhtm Lv2.14   Guia Xhtm Lv2.1
4 Guia Xhtm Lv2.1Ergoclicks
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigMarcos Labad
 

Similar a Frameworks de templates y xml (20)

Django - Plataforma de sitios web
Django - Plataforma de sitios webDjango - Plataforma de sitios web
Django - Plataforma de sitios web
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)
 
Welcome to Django
Welcome to DjangoWelcome to Django
Welcome to Django
 
Mootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JSMootools Y Otros Frameworks JS
Mootools Y Otros Frameworks JS
 
Tutorial de cakePHP itst
Tutorial de cakePHP itstTutorial de cakePHP itst
Tutorial de cakePHP itst
 
Presentación muy chula ApéndiceTecnologíaXML.ppt
Presentación muy chula ApéndiceTecnologíaXML.pptPresentación muy chula ApéndiceTecnologíaXML.ppt
Presentación muy chula ApéndiceTecnologíaXML.ppt
 
Desarrollo de aplicaciones en internet
Desarrollo de aplicaciones en internetDesarrollo de aplicaciones en internet
Desarrollo de aplicaciones en internet
 
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
 
Acceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-phpAcceso a-base-de-datos-en-php
Acceso a-base-de-datos-en-php
 
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y ValidacionesDesarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
Desarrollo de Aplicaciones Web II - Sesión 03 - Formularios y Validaciones
 
Creando módulos en Drupal 7
Creando módulos en Drupal 7Creando módulos en Drupal 7
Creando módulos en Drupal 7
 
Servicio web
Servicio web Servicio web
Servicio web
 
Clase1_Python-CTIC
Clase1_Python-CTICClase1_Python-CTIC
Clase1_Python-CTIC
 
San Luis Oct 2008
San Luis Oct 2008San Luis Oct 2008
San Luis Oct 2008
 
San Luis Oct 2008
San Luis Oct 2008San Luis Oct 2008
San Luis Oct 2008
 
Framework by Marcos Acosta
Framework by Marcos AcostaFramework by Marcos Acosta
Framework by Marcos Acosta
 
Framework
FrameworkFramework
Framework
 
Joomladay Mallorca 2010 Templates Workshop
Joomladay Mallorca 2010 Templates WorkshopJoomladay Mallorca 2010 Templates Workshop
Joomladay Mallorca 2010 Templates Workshop
 
4 Guia Xhtm Lv2.1
4   Guia Xhtm Lv2.14   Guia Xhtm Lv2.1
4 Guia Xhtm Lv2.1
 
Tutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. TwigTutorial3 Desymfony - La Vista. Twig
Tutorial3 Desymfony - La Vista. Twig
 

Más de roger gustavo saravia aramayo

recuerdos de diagnósticos con escáner de motorizados
recuerdos de diagnósticos con escáner de motorizadosrecuerdos de diagnósticos con escáner de motorizados
recuerdos de diagnósticos con escáner de motorizadosroger gustavo saravia aramayo
 
Los iracundos la historia de un mito (entrevista a juano)
Los iracundos   la historia de un mito (entrevista a juano)Los iracundos   la historia de un mito (entrevista a juano)
Los iracundos la historia de un mito (entrevista a juano)roger gustavo saravia aramayo
 
Consciente subconsciente ley de la atraccion - las 7 leyes universales - el...
Consciente subconsciente   ley de la atraccion - las 7 leyes universales - el...Consciente subconsciente   ley de la atraccion - las 7 leyes universales - el...
Consciente subconsciente ley de la atraccion - las 7 leyes universales - el...roger gustavo saravia aramayo
 
El sufragio universal y la realidad boliviana por max benjamin saravia imana
El sufragio universal y la realidad boliviana por max benjamin saravia imanaEl sufragio universal y la realidad boliviana por max benjamin saravia imana
El sufragio universal y la realidad boliviana por max benjamin saravia imanaroger gustavo saravia aramayo
 
Reparacion y rehabilitacion de viviendas (compilado)
Reparacion y rehabilitacion de viviendas (compilado)Reparacion y rehabilitacion de viviendas (compilado)
Reparacion y rehabilitacion de viviendas (compilado)roger gustavo saravia aramayo
 
Resultados de los puntos de pericia estructural para la propiedad del ing
Resultados de los puntos de pericia estructural para la propiedad del ingResultados de los puntos de pericia estructural para la propiedad del ing
Resultados de los puntos de pericia estructural para la propiedad del ingroger gustavo saravia aramayo
 

Más de roger gustavo saravia aramayo (20)

listado_oficial_obd2_codigos_dtc.pdf
listado_oficial_obd2_codigos_dtc.pdflistado_oficial_obd2_codigos_dtc.pdf
listado_oficial_obd2_codigos_dtc.pdf
 
guía para ubicar parlantes (Speaker placement)
guía para ubicar parlantes (Speaker placement)guía para ubicar parlantes (Speaker placement)
guía para ubicar parlantes (Speaker placement)
 
recuerdos de diagnósticos con escáner de motorizados
recuerdos de diagnósticos con escáner de motorizadosrecuerdos de diagnósticos con escáner de motorizados
recuerdos de diagnósticos con escáner de motorizados
 
Paquete de sistema de vuelo de dron (1)
Paquete de sistema de vuelo de dron (1)Paquete de sistema de vuelo de dron (1)
Paquete de sistema de vuelo de dron (1)
 
escaneado profesional de motorizados
escaneado profesional de motorizados escaneado profesional de motorizados
escaneado profesional de motorizados
 
Referencia practica mercedes clk 320 w208 1999
Referencia practica mercedes clk 320 w208 1999Referencia practica mercedes clk 320 w208 1999
Referencia practica mercedes clk 320 w208 1999
 
Listado de temas de los iracundos
Listado de temas de los iracundosListado de temas de los iracundos
Listado de temas de los iracundos
 
Los iracundos la historia de un mito (entrevista a juano)
Los iracundos   la historia de un mito (entrevista a juano)Los iracundos   la historia de un mito (entrevista a juano)
Los iracundos la historia de un mito (entrevista a juano)
 
Consciente subconsciente ley de la atraccion - las 7 leyes universales - el...
Consciente subconsciente   ley de la atraccion - las 7 leyes universales - el...Consciente subconsciente   ley de la atraccion - las 7 leyes universales - el...
Consciente subconsciente ley de la atraccion - las 7 leyes universales - el...
 
Historia del colegio san calixto (gabriel codina)
Historia del colegio san calixto (gabriel codina)Historia del colegio san calixto (gabriel codina)
Historia del colegio san calixto (gabriel codina)
 
Algunos recuerdos de los iracundos
Algunos recuerdos de los iracundosAlgunos recuerdos de los iracundos
Algunos recuerdos de los iracundos
 
El sufragio universal y la realidad boliviana por max benjamin saravia imana
El sufragio universal y la realidad boliviana por max benjamin saravia imanaEl sufragio universal y la realidad boliviana por max benjamin saravia imana
El sufragio universal y la realidad boliviana por max benjamin saravia imana
 
La historia de los iracundos
La historia de los iracundosLa historia de los iracundos
La historia de los iracundos
 
Apuntes sobre temas de pareja
Apuntes sobre temas de parejaApuntes sobre temas de pareja
Apuntes sobre temas de pareja
 
Reparacion y rehabilitacion de viviendas (compilado)
Reparacion y rehabilitacion de viviendas (compilado)Reparacion y rehabilitacion de viviendas (compilado)
Reparacion y rehabilitacion de viviendas (compilado)
 
Metodologia de trabajo de demolicion
Metodologia de trabajo de demolicionMetodologia de trabajo de demolicion
Metodologia de trabajo de demolicion
 
Plan de contingencia movimiento de tierras
Plan de contingencia movimiento de tierrasPlan de contingencia movimiento de tierras
Plan de contingencia movimiento de tierras
 
Informe paso de servidumbre
Informe paso de servidumbreInforme paso de servidumbre
Informe paso de servidumbre
 
Resultados de los puntos de pericia estructural para la propiedad del ing
Resultados de los puntos de pericia estructural para la propiedad del ingResultados de los puntos de pericia estructural para la propiedad del ing
Resultados de los puntos de pericia estructural para la propiedad del ing
 
Plan de contingencia trabajos de demolicion
Plan de contingencia trabajos de demolicionPlan de contingencia trabajos de demolicion
Plan de contingencia trabajos de demolicion
 

Último

Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Último (10)

Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

Frameworks de templates y xml

  • 1. UNIVERSIDAD MAYOR DE SAN ANDRES Facultad de Ciencias Puras y Naturales Postgrado en Informática Programación Orientada a Objetos FFRRAAMMEEWWOORRKKSS DDEE TTEEMMPPLLAATTEESS YY XXMMLL Presentado a: Ing. M. Sc. Esteban Saavedra Presentado por: Roger Saravia & J. J. La Paz, Bolivia - Septiembre de 2007
  • 2. 2 1 Introducción El escenario de este trabajo se desarrolla en el área de los frameworks; específicamente en los frameworks de templates y XML. El problema identificado es el cómo elegir un framework de templates y XML dadas ciertas necesidades. Se abordará el problema mediante la presentación y descripción de los principales frameworks de templates y XML. 2 Objetivo General El objetivo general de este trabajo es comparar las principales características de los frameworks de templates y XML más difundidos.
  • 3. 3 3 Marco Teórico (Síntesis) 3.1 ¿Qué es un Framework de Templates y XML? Un framework de templates y XML es principalmente un motor de plantilla (template) inteligente con relación al lenguaje de marcado. Un framework de templates es capaz de procesar el marcado como un flujo de eventos (streams). Además proporciona varias herramientas para generar o trabajar con XML y HTML. 3.2 ¿Por qué un Framework de Templates? Porque usar templates basados en texto para producir XML genera fácilmente errores y porque considerar todos los casos podría ser no práctico. Los sistemas basados en solo texto han fallado incluso a gente preparada que ha procurado hacer las cosas bien.
  • 4. 4 3.3 ¿Y Cómo Funciona? Ilustración 1. Funcionamiento de un framework de templates y XML según Christopher Lenz (http://www.cmlenz.net).
  • 5. 5 Casi todos los frameworks de templates usan el lenguaje Python como lenguaje base. Por ejemplo, mediante el uso del API de Python y usando la clase Template, se tiene: Ejemplo 1. Generación de un template mediante código de Python (D. A. R.)
  • 6. 6 3.4 Stream de Marcado: Anatomía El stream de marcado es básicamente una acción cíclica sobre lo que se conoce como un evento de marcado. Por ejemplo: Ejemplo 2. El stream y un evento de marcado (D. A. R.)
  • 7. 7 3.5 ¿Cuándo se Produce un Stream de Marcado?  La generación de un template produce un stream.  El parsing de un HTML o XML produce un stream.  Los streams pueden ser generados programáticamente. 3.6 Procesando Streams Un procesamiento Incluye los siguientes pasos: iterar, verificar la clase, ejecutar o hacer algo y producir. Ejemplo 3: Coloca en mayúsculas las etiquetas que no están a lado de un espacio (D. A. R.)
  • 8. 8 3.7 Filtrado de Streams Se trata de rutinas del paquete de filtrado de streams capaces de re-usar streams; un objeto que toma un stream y retorna otro. Ejemplo: Ejemplo 4. Se filtra un stream removiendo cierta información y produciendo otro stream. (D. A. R.)
  • 9. 9 3.8 Streams: Serialización Consiste en la producción de texto a partir de distintos eventos de streams. Hay formatos de serialización para XML, XHTML, HTML y texto plano. Ejemplo 5. Serialización (D. A. R.)
  • 10. 10 3.9 Escaping (Elemento del Funcionamiento de los Frameworks de Templates) Los templates requieren que uno explícitamente haga el “escapeo” de datos. Y tener que “escapear” datos es bastante común. Ejemplo 6. Una página sin “escapeo” (D. A. R.)
  • 11. 11 3.10 Saneamiento HTML Muchas veces hay la necesidad de permitir al usuario ingresar código HTML para entrar marcado. Podría ser para la entrada de texto con formato. El foro de participación de la plataforma de educación virtual Moodle es un ejemplo. Además porque puede haber la necesidad de protegerse ante un usuario pirata que aproveche ésta opción para filtrar código malicioso. Ejemplo 7: El no saneamiento del código HTML causó que una compañía extranjera de poleras imprima prendas alteradas (D. A. R.).
  • 12. 12 3.11 Otras Funciones Avanzadas  La clonación de formularios HTML llenados con datos.  Los transformadores o filtros streams para realizar transformaciones dentro de las etiquetas capturadas por el stream. Ejemplo 8: Accesibilidad para gente que la necesita (D. A. R.)  Internacionalización.
  • 13. 13 3.12 Rendimiento  El trabajo con templates basados en XML es computacionalmente más “caro” que el trabajo con templates basados en puro texto. Esto se debe a que en el primero se tratan con etiquetas, elementos, atributos y todo aquello; mientras que en el caso de solo texto se tienen caracteres o bytes.  No se recomienda el uso excesivo de XML templates. 4 Casos de Estudio 4.1 Mako Mako es una librería para templates escrita en Python. Provee una familiar sintaxis no- XML que se compila en módulos Python para un máximo rendimiento. La sintaxis de Mako y su API emergen de las mejores ideas de muchos otros como: Django, Cheetah, Myghty, and Genshi. Conceptualmente, Mako es un “pitón” embebido (como es Python Server Pages) pero con un refinamiento del diseño mediante componentes y herencia para producir uno de los modelos más robustos y flexibles.
  • 14. 14 Mako es usado por el sitio Pytho.org. Un vistazo a su código: <%inherit file="base.html"/> <% rows = [[v for v in range(0,10)] for row in range(0,10)] %> <table> % for row in rows: ${makerow(row)} % endfor </table> <%def name="makerow(row)"> <tr> % for name in row: <td>${name}</td> % endfor </tr> </%def> Mako puede ser considerado como la siguiente generación de sistemas de templates y hasta podría establecerse como el lenguaje por defecto de Pythons web framework.
  • 15. 15 Características:  API simple.  Rápido.  Estructuras de control como loops sobre la base del lenguaje Python.  Se puede incluir bloques de código Python.  Puede acceder a variables fuera del template.  Puede tener anidaciones múltiples.  Puede especificar varios argumentos Python en las firmas (métodos).  Bloques del tipo llamables (callables).  Manejo avanzado de herencia.
  • 16. 16 4.2 Kid Es un lenguaje de templates simple para vocabularios basados en XML escrito en Phyton. La sintaxis del lenguaje fue inspirada en lenguajes de templates existentes como XSLT, TAL, PHP. Como hay una variedad de herramientas que trabajan con documentos XML en Phyton, generar XML es tedioso y es común cometer errores. APIs como SAX, DOM, o ElementTree pueden garantizar la construcción de la salida pero requiere que esos documentos estén creados enteramente en Python. Los lenguajes de templates como Cheetah o PTL generan texto de contenido fácil pero ofrecen poco ayudar para asegurar que el rendimiento sea el correcto. Usar herramientas basadas en texto para generar XML puede generar datos errados. Características  Kid es un intento de traer los beneficios de estas tecnologías juntas en un paquete coherente y único.
  • 17. 17  Kid también permite al programador explotar la estructurada de XML escribiendo filtros y transformaciones que trabajan al XML. Kid templates usa un generador para producir ítems.  Kid puede usarse para generar cualquier tipo de documento XML incluyendo XHTML, RSS, Átomo, FOAF, RDF, XBEL, XSLT, RelaxNG, Schematron, SOAP, etc.  Kid soporta características mas avanzadas como condicionales (py:if), iteración (py:for), y sub templates reusables (py:def).  Kid templates debería usar archivos con extensión .kid si esta importando el módulo de templates usando el código normal de Phyton. El import hood de Kid confía en el archivo de extensión .kid que esta presente. Ventajas  Cada template de modulo exporta una clase llamada “Template”. Una instancia de template es obtenida de una de las tres maneras siguientes:  La función Template es la mejor forma.
  • 18. 18  Habilitando el import hood, usando el import de Pitón para obtener el modulo y recuperando la clase Template.  Llamando a la función kid_load_template y recuperando la clase Template.  Las salidas pueden ser en formato XML o WML(wireless markup languaje). Requerimientos:  Kid requiere plataforma Pitón 2.3 y el paquete ElementTree Forma de instalación: Extraer las fuentes en una carpeta y ejecutar setup.py, como lo muestra el siguiente código. $ gzip -dc kid-0.9.5.tar.gz | tar xvf - $ cd kid-0.9.5 $ python setup.py install
  • 19. 19 Si no incluye los argumentos extras en la instalación, podrá instalar los siguientes ítems: Librerías Phyton en el directorio site-packages. Comandos kid y kidc como script de Phyton. Un vistazo a su código: <?python title = "The Mandelbrot Set" def color(x,y): z = c = complex(x, -y)/100.0 for n in range(16): z = z*z + c if abs(z) > 2: break return "#%x82040" % n ?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://purl.org/kid/ns#"> <head> <title py:content="title" /> </head> <body bgcolor="black" text="white"> <table width="100%" height="100%">
  • 20. 20 <tr> <td align="center" valign="middle"> <h1 py:content="title" /> <table cellspacing="1" cellpadding="2"> <tr py:for="y in range(-150, 150, 5)"> <td py:for="x in range(-250, 100, 5)" bgcolor="${color(x,y)}" /> </tr> </table> </td> </tr> </table> </body> </html> 4.3 Genshi Genshi provee un motor de template que puede usarse para generar otros marcados (tal como HTML o XML) o texto simple. Mientras ambos comparten algo de la sintaxis (y mucha de la implementación) ellos se separan esencialmente por el lenguaje.
  • 21. 21 Los templates son XML o archivos de texto plano que incluyen directivas de procesamiento que afectan al rendimiento de los templates, y templates de expresiones que son sustituidas dinámicamente por datos variables. Características  Sentencias condicionales como: py:if, py:choose  Iteraciones como: py:for  Reusar Snippet como: py:def, py:match  Variable Binding como: py:with  Manipulación de estructuras como: py:attrs, py:content, py:replace, py:strip  Además de includes para templates de texto e includes dinámicos. Forma de Instalación Extraer los fuentes en una carpeta y ejecutar $ easy_install Genshi
  • 22. 22 Un vistazo a su código: <?python title = "A Genshi Template" fruits = ["apple", "orange", "kiwi"] ?> <html xmlns:py="http://genshi.edgewall.org/"> <head> <title py:content="title">This is replaced.</title> </head> <body> <p>These are some of my favorite fruits:</p> <ul> <li py:for="fruit in fruits"> I like ${fruit}s </li> </ul> </body> </html>
  • 23. 23 Este ejemplo muestra: a. Un bloque de código de Phyton, usando una instrucción de procesamiento. b. La declaración del namespace de Genshi. c. El uso de directivas de templates (py:content y py:for). d. Expresión de Phyton (${fruit}). El template generaría una salida parecida a: <html> <head> <title>A Genshi Template</title> </head> <body> <p>These are some of my favorite fruits:</p> <ul> <li>I like apples</li> <li>I like oranges</li> <li>I like kiwis</li> </ul>
  • 24. 24 </body> </html> Un template de texto es un documento de texto plano que puede contener también código empotrado de Python. Los templates de texto pueden usarse para generar formato de texto no marcado, tal como el cuerpo de un email de texto plano. Por ejemplo: Dear $name, These are some of my favorite fruits: #for fruit in fruits * $fruit #end
  • 25. 25 4.4 Otros Lenguajes Usados FXT Templating  Flex Templating proporciona una rica técnica de templating del lado del cliente usando MVC (Model-View-Controller). FXT soluciona una variedad de problemas mediante el uso de su tecnología Flex en combinación con Flash Player.  La clave está en que el modelo incluido dentro del HTML controla la vista de una aplicación tipo Flex. En una aplicación típica basada en HTML, el modelo de datos y las etiquetas (la vista) van mezcladas. Pero con FXT el modelo de datos y la vista son separadas del código del template Flex hasta que arriban a la PC del usuario. TAL (Template Attribute Language)  Para XML templating.  Basado en atributos  TAL y Kid consisten enteramente de atributos y no de elementos.
  • 26. 26 XSLT (XSL Transformations)  Templating  XSLT siempre ha brillado por realizar transformaciones a partir del “macheo” de los nombres de elementos en el documento original y convertirlos en salida. O sea hacer cambios en las mismas etiquetas.  Una desventaja del XSLT es que es bastante complejo para hacer simple templating. Además no todo está escrito en XML; razón por la cual, XSLT está limitado. PXTL (Python XML Template Language)  Lenguaje completo aunque muy aparatoso.  No muy usado. PTL (Python Template Language)  Lenguaje basado en texto que no satisface todos los requerimientos.  Comentario: Kid hace lo mismo pero con documentos XML.
  • 27. 27 4.5 Otros Lenguajes Menos Usados Cheetah Característica Observación Caché [X] Se pueden compilar los templates como clases Python. Velocidad moderada No es muy rápido en el tema de las librerías. Wysiwyg [ ] No. Usar un editor de texto. Flexibilidad Grande Diseño tipo Python [X] Puede usar los constructos de Python en el mismo template. Puro python Sí Sintaxis XML [ ] No Curva de aprendizaje Corta Comunidad Grande Resumen Cheetah es uno de los más sencillos y comprensivos motores de templates. Buena documentación.
  • 28. 28 ClearSilver Característica Observación Cache [ ] Velocidad No se tienen pruebas todavía. Wysiwyg [ ] No. Usar cualquier editor de texto. Flexibilidad Grande Diseño tipo Python Escrito en C pero incluye controladores para Python, Ruby, Perl, y Java Puro python No Sintaxis XML [X] Curva de aprendizaje Corta Comunidad Pequeña Un resumen: ClearSilver usa un enfoque controlado por conexión a datos que completamente separa el diseño de la aplicación lógica.
  • 29. 29 PyMeld Característica Observación Caché [ ] Dejado al usuario. Velocidad Aún no se tienen pruebas. Wysiwyg [X] Templates consistentes en puro HTML/XHTML. Flexibilidad Marcado Diseño tipo Python [X] Bastante. Puro python Sí Sintaxis XML No. Basado en el atributo "id" del HTML/XHTML. Curva de aprendizaje Corta Comunidad Ninguna Resumen: Elegante y única herramienta para manipular HTML de manera pitónica. Cualquier elemento (X)HTML con atributo "id" puede ser manipulado.
  • 30. 30 Xyaptu Característica Observación Caché [ ] No. Velocidad No se ha probado aún. Wysiwyg [ ] Solo mediante el uso de etiquetas XML. Flexibilidad Buena Búcles, condicionales y otros. Diseño tipo Python [X] Usa diccionarios, cadenas y generadores. Puro python [X] Bastante. Elementos del Lenguaje 7 Sintaxis de marcado. Curva de aprendizaje Muy corta Comunidad Pequeña Resumen Xyaptu es la sigla de: eXtended Yet Another Python Templating Unit
  • 31. 31 ZPT Característica Observación Caché [ ] No se sabe. Velocidad [ ] WYSIWYG [ ] El XHTML puede ser editado en WYSIWYG pero el scripting debe ir entre espacios de nombre XML. Diseño tipo Python [ ] Flexibilidad Integration Puro Python [X] Sintaxis XML [X] Curva de aprendizaje Media Depende del conocimiento sobre Python y XML. Comunidad Media Llamada ZOPE con soporte disponible.
  • 32. 32 Resumen Es aconsejable para el fácil diseño web que permite la no “perturbación” del scripting embebido en la página. ZPT puede ser usado solo con documentos XML y no con otros documentos basados en texto o CSS. py.xml Característica Observación Caché [ ] Ninguna Velocidad [ ] WYSIWYG [ ] No. Usar cualquier editor de texto. Diseño tipo Python [X] py.xml está basado en Python para generar XML. Puro Python [X] Sintaxis XML [ ] No. Todo el código está basado en Python. Curva de aprendizaje No Si uno sabe Python, puede py.xml.
  • 33. 33 Comunidad ¿? Resumen La librería del py ofrece una manera pitónica de generar XML/HTML basada en ideas que usan clases de objetos de Python para generar los árboles XML. 4.6 Comparación de Tiempos de los “Principales” Frameworks de Templates Sobre un diseño sencillo que incluya 3 frames (marcos): Framework de Templates Tiempo de Respuesta Mako 1.10 ms Myghty 4.52 ms Cheetah 1.10 ms Genshi 11.46 ms Django 2.74 ms Kid 14.54 ms
  • 34. 34 5 Conclusiones El elemento clave del funcionamiento de los frameworks de templates es el stream de marcado que captura eventos de marcado. Su buen conocimiento puede ser clave también para la buena programación en los lenguajes de templates. Hay una gama grande de frameworks para templates. La mayoría de ellos están basados en el lenguaje Python y XML; no obstante hay algunos que se basan en puro Python. Pueden apreciarse en muchos de ellos es el uso de clases, objetos y herencia. Debido a su rendimiento, Mako podría ser el framework de templates estándar de la próxima generación. Kid es una de las mejores opciones puesto que compila lo mejor de varias tecnologías y ofrece una respuesta multiformato basada casi enteramente en XML. Genshi es una tecnología robusta y basada en Kid pero permite además el “plantillado” (templating) de texto plano. XSLT tiene la gran ventaja de estar siempre presente puesto que se incluye junto a la tecnología XML; no obstante es de implementar y no incluye Python.
  • 35. 35 Los lenguajes más recientes son como unidades sueltas de framework templating orientados a trabajos con formatos específicos. Hay poco benchmarking e información sobre pruebas con relación a las características de todos los frameworks de templating. Mako está entre uno de los más rápidos lenguajes de templates. Los lenguajes de templating trabajan con etiquetas y todo aquello; razón por la cual consumen "cómputo" y deben usarse con discreción. 6 Referencias  RYAN TOMAYKO “In search of a Pythonic, XML-based Templating Language”. [En red]. Disponible en: http://www.tomayko.com  CHERRY PY “Choosing a templating language”. [En red]. Disponible en: http://www.cherrypy.org
  • 36. 36  CHRISTOPHER LENZ “Genshi”. [En red]. Disponible en: http://www.cmlenz.net  GENSHI “Genshi Templating Basics”. [En red]. Disponible en: http://genshi.edgewall.org  KID “Pythonic, XML-based Templating”. [En red]. Disponible en: http://www.kid-templating.org  MAKO “Mako Templates for Python”. [En red]. Disponible en: http://www.makotemplates.org  ONFLEX “FXT - Flex Templating”. [En red]. Disponible en: http://www.onflex.org