20
Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Embed Size (px)

Citation preview

Page 1: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Tecnologias XML

Extensible Stylesheet Language Transformation - XSLT

Page 2: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

XSLT XSL - Extensible Stylesheet Language

Linguagem para transformação e formatação de um documento XML

XSL deu origem a 3 normas: XPath que define um modo de

navegação e localização da informação num documento XML.

XSL-FO ( Formating Objects) que especifica a formatação dos documentos.

XSLT (Transformation) que especifica transformações sobre um documento XML

Page 3: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

XSLT XSLT – Transformações sobre um

documento XML

D ocum en to deen trada

X S LT P rocesso rD ocum en to de

sa ída

X S LTtem p la tes

X S LT s ty leshee t

X M L

P D F

X H T M L

X M L

...

Page 4: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

<?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="catalog.xsl"?> <catalog> <book id="12"> <title>Discover Java</title> <Authors> <author>Ed Tittel</author> <author>Bill Brogden</author> </Authors> <publisher>IDG Books Worldwide</publisher> <ISBN>0-7645-8024-8</ISBN> <price>24.99</price> <pubdate>1997</pubdate> </book><book id="23">… </book></catalog>

Referenciar uma folha de estilos XSLT num XML

Documento

catalog.xsl

Page 5: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

output

Root (/)

<?xml-stylesheettype="text/xsl" href="temp.xsl"?> <catalog>

<book>

id=”12"<title> <Authors> <publisher> <ISBN> <price> <pubdate>

<author>Discover Java

Ed TittelIDG Books Worldwide

<author>

Bill Brogden

0-7645-8024-8

24.99 1997

<book>

...

Um processador XSLT trabalha sobre uma representação em árvore da estrutura hierárquica de um documento XML

Page 6: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Exemplo de uma folha de estilos

<?xml version="1.0" encoding="ISO-8859-1"?><xsl:stylesheet version="1.0“ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/catalog" ><books><xsl:apply-templates select="book"/></books></xsl:template> <xsl:template match="book" ><title_publisher> <xsl:value-of select="title" /> , <xsl:value-of select="publisher" /></title_publisher></xsl:template></xsl:stylesheet>

catalog.xml catalog.xsloutput

Page 7: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

XSLT Uma folha de estilo XSLT consiste numa série de

templates que, conjuntamente com expressões baseadas em XPath, determinam como o processador vai aplica-las aos nós do documento fonte.

Para cada template, o processador procura no documento o nó que verifica o padrão definido e aplica as acções definidas nesse template

Os templates são instanciados para todos os nós onde é efectuado o match

Page 8: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Análise da folha catalog.xsl Os documentos XSLT são documentos XML

<?xml version="1.0" encoding="ISO-8859-1"?>

A raíz do documento é o elemento xsl:stylesheet <xsl:stylesheet version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

xsl:template inicia um template com um atributo match que indica os nós a que deve ser aplicado.

<xsl:template match="/catalog" ><books><xsl:apply-templates select="book"/></books>

</xsl:template>

Expressão XPath

Page 9: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Análise da folha catalog.xsl O elemento xsl:apply-templates faz chamada

aos outros templates<xsl:apply-templates select="book"/>

<xsl:template match="book" ><title_publisher>

<xsl:value-of select="title" /> , <xsl:value-of select="publisher" />

</title_publisher></xsl:template>

Todo o texto que não faz parte do espaço de nomes xsl: fará parte do documento resultado. <title_publisher> … </title_publisher>

xsl:value-of extrai o texto de um nó seleccionado: <title> e <publisher>

Extracção de dados do documento de entrada

Page 10: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Navegação na árvore - XPath O XSLT usa expressões XPath para localizar nós

na árvore do documento de entrada Expressões XPath são usadas nos atributos select e match

Semelhante à navegação numa árvore de directórios

Caminhos absolutos e relativos Um caminho absoluto começa sempre pelo carácter

'/', caso contrário são caminhos relativos ao nó corrente

/catalog/book/title - absoluto

authors/author - relativo

Page 11: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Navegação na árvore - XPath

Selectores de nós:

Exemplos de selecções de nós

/ - representa a raiz ou uma relação pai/filho

. - representa o nó corrente

.. - representa o nó pai do nó corrente

@ - modo de aceder a atributos @nomedoatributo

* - representa qualquer nó

// - todos os nós descendentes de um nó ou no principio de um caminho todos os descendentes da raiz

../../title selecciona o elemento title do pai do pai do nó corrente

//author

selecciona todos os nós author independentemente da sua posição na árvore

@* selecciona todos os atributos no contexto actual.

/catalog/book/@id seleciona o atributo id do nó book, filho de catalog debaixo da raiz.

./author selecciona todos os nós author filhos do nó corrente

Page 12: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Navegação na árvore - XPath

Predicados (filtros) Os predicados são filtros para refinar a pesquisa Os predicados são escritos entre [ ] Exemplos:

/book[@id] - selecciona o nó book se tiver um atributo id

/catalog/book[2] - selecciona o segundo nó book   Funções Xpath number position() – devolve a posição do nó actual

book[position()=1]   number last() – devolve o índice do ultimo nó no conjunto de nós.

book[last()]number count(node-set) – devolve o número de nós do conjunto de nós argumento

<xsl:value-of select="count(authors/author)" />

Page 13: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Exemplo de transformação XML - HTML

Anotação e Texto para o documento de saida

...

<xsl:template match="/catalog" >

<html><head><title>XML to HTML

</title></head><body>

<xsl:apply-templates />

</body></html>

</xsl:template>

<xsl:template match="book" >

<h3><b>Título:

<xsl:value-of select="title" />

</b></h3>

<h5>Editora:

<xsl:value-of select="publisher" />

</h5>

</xsl:template>

Elementos xsl para extrair informação

catalogtohtmlexemplo

Page 14: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Elementos XSLT xsl:for-eachdefine um template que vai ser aplicado a todos os nós seleccionados pela expressão do atributo select.

<xsl:template match="/" ><html><body><table border="1"> <xsl:for-each select="catalog/book">

<tr><td> <xsl:value-of select="title" /> </td><td><xsl:for-each select="authors/author">

<br><xsl:value-of select="." /></br> </xsl:for-each></td><td> <xsl:value-of select="publisher" /></td><td> <xsl:value-of select="ISBN" /></td><td> <xsl:value-of select="price" /></td><td> <xsl:value-of select="pubdate" /></td></tr>

</xsl:for-each></table></body></html></xsl:template></xsl:stylesheet>

catalogfor.xslresultado

Page 15: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Elementos XSLT xsl:sort

A ordenação é especificada com elementos xsl:sort como filhos de elementos xsl:apply-templates ou xsl:for-each

A chave de ordenação é especificada pelo atributo select Pode ser especificada mais de uma chave de ordenação

usando vários xsl:sort. <xsl:template match="/" >

<html><body><h3>Lista de autores </h3>

<xsl:for-each select="catalog/book/authors/author">

<xsl:sort data-type="text" order="ascending" />

<br><xsl:value-of select="." /></br>

</xsl:for-each>

</body></html>

</xsl:template>

catalogsort.xslresultado

Page 16: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Elementos XSLT xsl:if <xsl:if test=" not(position()=last())" >… <xsl:if test=“ price &lt; < 20 “ >…

Instrução condicional O atributo test define a expressão a avaliar Não tem else

xsl:choose (switch)<xsl:choose> <xsl:when test = boolean-expression> … </xsl:when>

<xsl:otherwise> …

   </xsl:otherwise></xsl:choose>

exemplo catalogif.xsl

exemplo catalogchoose.xsl

Page 17: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Elementos XSLT xsl:element

insere elementos na árvore resultado da transformação O nome do elemento é definido pelo atributo name

xsl:attribute Insere atributos. O nome do atributo é definido pelo

atributo name. O valor do atributo é determinado pelo conteúdo do

template

<xsl:template match="/catalog" >

<xsl:element name="books">

<xsl:apply-templates select="book"/>

</xsl:element>

</xsl:template>

exemplo catalogelement.xsl

Page 18: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Elementos XSLT xsl:copy

elemento para criar uma cópia do nó corrente não copia atributos, nem filhos

xsl:copy-of copia tudo o que for seleccionado pelo atributo

select

exemplo catalogcopy.xsl

<xsl:template match="book">

<xsl:copy-of select=".">

</xsl:copy-of>

Page 19: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Templates por omissão Quando não existe nenhum template são aplicados

templates por omissão.

Template por omissão para nós elemento e raíz:

Template por omissão para nós texto e atributo:

<xsl:template match="*|/"><xsl:apply-templates/>

</xsl:template>

<xsl:template match="text()|@*">

<xsl:value-of select="."/>

</xsl:template>

exemplo minimal.xsl

Page 20: Tecnologias XML Extensible Stylesheet Language Transformation - XSLT

Nova estrutura XML Criar um novo documento xml com outra estrutura

<xsl:template match="/" > <autores> <xsl:apply-templates select="//author" > <xsl:sort select="." /> </xsl:apply-templates> </autores></xsl:template><xsl:template match="author" > <xsl:element name="autor"> <xsl:element name="nome"> <xsl:value-of select="." /> </xsl:element> <xsl:element name="obra"> <xsl:attribute name="ISBN" > <xsl:value-of select="../../ISBN" /> </xsl:attribute> <xsl:value-of select="../../title" /> </xsl:element></xsl:element></xsl:template>...

autores

obra

nome

autor

autor...

“isbn”

novaestrutura.xsl

exemplo