Tendencias en XSLT
Jose Emilio Labra Gayo
Contenidos
Aplicaciones XSLT
Ejecuci[Pleaseinsertintopreamble]n en servidor
Ejecuci´
on en cliente
Algunas Aplicaciones de XSLT
Extensiones
EXSLT
XSLT 2.0
Ejecuci´on en servidor
Programaci´
on XSLT en Java
I
JAXP (
Java API for XML Processing
) incluye ofrece
funcionalidad para trabajar con XSLT
I
La parte de JAXP dedicada a las transformaciones es TrAX
(
Transformation API for XML
) y contiene los siguientes
paquetes:
I
javax.xml.transform
: n´
ucleo de interfaces para
transformaci´
on
I
javax.xml.transform.sax
: interfaces de transformaci´
on
basados en SAX
I
javax.xml.transform.dom
: interfaces relacionados con
DOM
I
javax.xml.transform.stream
: interfaces relacionados con
flujos
Ejecuci´on en servidor
Programaci´
on XSLT en Java: Ejemplo
S t r i n g xml=” f i l e . xml ” ; S t r i n g x s l =” t r . x s l ” ; T r a n s f o r m e r F a c t o r y f = T r a n s f o r m e r F a c t o r y . n e w I n s t a n c e ( ) ; T r a n s f o r m e r t = f . n e w T r a n s f o r m e r (new S t r e a m S o u r c e (new F i l e ( x s l ) ) ) ; t . t r a n s f o r m (new S t r e a m S o u r c e (new F i l e ( xml ) ) , new S t r e a m R e s u l t ( S y s t e m . o u t ) ) ;
Ejecuci´on en servidor
Marcos de publicaci´
on XML
I
Cocoon. Es un
servlet
Java que usa Xalan (por defecto) para
transformar documentos que pueden generarse de forma
din´
amica.
Todas las p´
aginas se generan a trav´
es de un
pipeline
en 3
fases: generaci´
on, transformaci´
on y serializaci´
on
I
AxKit es un m´
odulo de Apache, implementado en Perl que
permite realizar conversiones XML din´
amicas
Ejecuci´on en cliente
Asociaci´
on directa de hoja de estilos
Los navegadores incluyen una implementaci´
on de XSLT
I
Internet Explorer: MSXML
Ejecuci´on en cliente
Transformaci´
on mediante Javascript
Varias librer´ıas:
I
Sarissa invoca a los sistemas de transformaci´
on del navegador.
Act´
ua como un interfaz.
I
Google AJAXSLT es una implementaci´
on de XSLT en
Docbook
Docbook es un completo sistema de documentaci´
on.
Especialmente ´
util para documentaci´
on de proyectos, aunque
puede utilizarse en otros contextos.
Est´
a formado por una especificaci´
on del vocabulario en SGML
DTDs y en Relax NG
Contiene numerosas hojas de estilo para transformar a diferentes
formatos: FO, HTML, PDF, etc.
Ejemplo de Docbook
<a r t i c l e> <a r t i c l e i n f o> <t i t l e>E j e m p l o</ t i t l e> <a u t h o r> <f i r s t n a m e>F a n j u l</ f i r s t n a m e> <s u r n a m e>H e r r e r a</ s u r n a m e> </ a u t h o r> <a b s t r a c t> <p a r a>E s t e l i b r o r e s u m e a l g u n a s e x p e r i e n c i a s</ p a r a> </ a b s t r a c t> </ a r t i c l e i n f o> <s e c t 1 i d=” S1 ”> <t i t l e>La P r i m a v e r a</ t i t l e> <p a r a>H a b l a r de l a p r i m a v e r a e s i n t e r e s a n t e</ p a r a> </ s e c t 1> </ a r t i c l e>Schematron
Schematron define un sistema de validaci´
on de documentos XML
basado en reglas. Reci´
entemente aprobado como est´
andar ISO
Las reglas se definen mediante sentencias XPath
La implementaci´
on de referencia fue realizada en XSLT en 2 fases.
Una hoja toma las reglas y genera una hoja XSLT que toma el
documento y lo valida.
<s c h : s c h e m a x m l n s : s c h=” h t t p : //www . a s c c . n e t / xml / s c h e m a t r o n ”> <s c h : t i t l e>Comprobar e m a i l s</ s c h : t i t l e> <s c h : p a t t e r n name=” Chequea e m a i l ”> <s c h : r u l e c o n t e x t=” e m a i l ”> <s c h : a s s e r t t e s t=” c o n t a i n s ( . , ’ @ ’ ) ”>EXSLT
EXSLT
Iniciativa para crear un conjunto de extensiones relativamente
est´
andar.
Soportadas por diversos procesadores: libxml2
<x s l : s t y l e s h e e t v e r s i o n=” 1 . 0 ” x m l n s : x s l=” h t t p : //www . w3 . o r g / 1 9 9 9 / XSL/ T r a n s f o r m ” x m l n s : m a t h=” h t t p : // e x s l t . o r g / math ” e x t e n s i o n−e l e m e n t−p r e f i x e s=” math ” > <x s l : t e m p l a t e match=” / ”> N =<x s l : v a l u e−o f s e l e c t =” m a t h : r a n d o m ( ) ” /> </x s l : t e m p l a t e> </x s l : s t y l e s h e e t>
XSLT 2.0
XSLT 2.0
Recomendaci´
on aprobada en Junio 2006
I
Se basa en XPath 2.0
I
Soporte para chequeo de tipos basados en XML Schema
I
Facilidades para agrupaci´
on
I
Permite la creaci´
on de funciones
XSLT 2.0
Funciones y recursividad
<x s l : s t y l e s h e e t v e r s i o n=” 2 . 0 ” x m l n s : x s l=” h t t p : //www . w3 . o r g / 1 9 9 9 / XSL/ T r a n s f o r m ” x m l n s : x s=” h t t p : //www . w3 . o r g / 2 0 0 1 / XMLSchema” x m l n s : m=” h t t p : // m i s F u n c i o n e s . o r g ”> <x s l : t e m p l a t e match=” / ”> 1 0 ! =<x s l : v a l u e−o f s e l e c t =” m : f a c t ( 1 0 ) ” /> </x s l : t e m p l a t e> <x s l : f u n c t i o n name=” m : f a c t ” a s=” x s : i n t e g e r ”> <x s l : p a r a m name=” n ” a s=” x s : i n t e g e r ” /> <x s l : v a l u e−o f s e l e c t =” i f ( $ n = 0 ) t h e n 1 e l s e $ n ∗ m : f a c t ( $ n − 1 ) ” /> </ x s l : f u n c t i o n> <x s l : s t y l e s h e e t>XSLT 2.0
Agrupaciones
<c i u d a d e s> <c i u d a d nombre=” L o n d r e s ” p a i s=” I n g l a t e r r a ” /> <c i u d a d nombre=”Roma” p a i s=” I t a l i a ” /> <c i u d a d nombre=” P a r i s ” p a i s=” F r a n c i a ” /> <c i u d a d nombre=” V e n e c i a ” p a i s=” I t a l i a ” /> </ c i u d a d e s> <x s l : t e m p l a t e match=” / ”> <x s l : f o r−e a c h−g r o u p s e l e c t =” c i u d a d e s / c i u d a d ” group−by=” @ p a i s ”> <x s l : v a l u e−o f s e l e c t =” @ p a i s ” />: <x s l : v a l u e−o f s e l e c t =” c u r r e n t−g r o u p ( ) / @nombre ” /><x s l : t e x t> </x s l : t e x t> </ x s l : f o r−e a c h−g r o u p> </ body> </ h t m l> </x s l : t e m p l a t e>XSLT 2.0
M´
ultiples documentos de salida
<x s l : t e m p l a t e match=” a l u m n o s ”> <x s l : f o r−e a c h s e l e c t =” alumno ”> <x s l : r e s u l t−d o c u m e n t h r e f=” o u t / alumno{p o s i t i o n ( )}. h t m l ”> <x s l : a p p l y−t e m p l a t e s s e l e c t =” . ” /> </ x s l : r e s u l t−d o c u m e n t> </x s l : f o r−e a c h> </x s l : t e m p l a t e> <x s l : t e m p l a t e match=” alumno ”> <p><x s l : v a l u e−o f s e l e c t =” nombre ” /></ p> </x s l : t e m p l a t e>