1 xsl - extensible stylesheet language. 2 xsl - motivação vantagens de separar apresentação de...

82
1 XSL - eXtensible Stylesheet Language

Upload: edison-de-sousa-pedroso

Post on 07-Apr-2016

251 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

1

XSL - eXtensible Stylesheet Language

Page 2: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

2

XSL - Motivação Vantagens de separar apresentação de

conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

mídias diferentes (papel, online), dispositivos diferentes (PDA, celular, PC)

Interface voltada para usuário (ex.: acessabilidade), cores, fontes, etc.

Uso de estilos padrões Liberdade do autor não se preocupar com

apresentação, que será tratada depois por um profissional.

Page 3: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

3

Opções para mostrar XML

Page 4: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

4

O que faz uma folha de estilo? Especifica a apresentação de XML

em duas categorias: Uma transformação opcional do

documento de entrada em outra estrutura

Uma descrição de como apresentar a informação transformada

Page 5: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

5

O que faz um folha de estilo? geração de texto supressão de conteúdo mover texto duplicar texto ordenação transformações mais complexas

que computam nova informação baseada na informação existente.

Page 6: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

6

Revisão de CSS CSS - Cascade Style Sheet Define o estilo de um documento

para apresentação Pode ser inline ou externa ao

documento Precedência de estilos:

Autor > Usuário > Web Browser

Page 7: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

7

External Style Sheets

External Style SheetsContidas num arquivo.css Único style sheet usado por múltiplas páginasUsado com o elemento link

Page 8: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

8

Exemplo de um CSS/* styles.css *//* An external stylesheet */a { text-decoration: underline; color: red; background-color: #ccffcc }

li em { color: red; font-weight: bold}

ul { margin-left: 2cm }

<html><!-- Linking external style sheets --><head><title>Exemplo de CSS</title><link rel = "stylesheet" type = "text/css”

href = "styles.css"></head>

Page 9: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

9

XSL - Princípios gerais

Como CSS, funcionamento a base de regras

CSS não modifica a estrutura de um documento, XSL sim

XSL utiliza a sintaxe XML

Page 10: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

10

XSL - Histórico

XML derivada de SGMLPadronizada pelo W3CXSL derivada de DSSSL (Document Style Semantics and Specification Language)Primeira proposta formal em 1997 pela W3C (já continha conceitos de XSLT, como uso de templates)Novembro de 1999 XSLT tornou-se uma recomendação da W3CÚltima versão de XSL: Outubro de 2001 (incluindo XSL-FO)

Page 11: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

11

Componentes de XSL

XSL consiste logicamente de 3 componentes:

XPath: XML Path Language-- linguagem para referenciar partes específicas de um documento XML

XSLT: XSL Transformations-- linguagem para descrever como transformar um documento XML (representado como uma árvore) em outro

XSL-FO: uma descrição de um conjunto de Formatting Objects e Formatting Properties

Page 12: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

12

XSLT - Características

Linguagem declarativaDescreve a transformação desejada, ao invés de prover uma sequência de instruções procedurais

XSLT é essencialmente uma “ferramenta” para transformar documentos XML

XSLT manipula árvores

Uso de XSL Namespaces - O W3C provê um namespace para tags XSL

Page 13: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

13

XSLT - Características

Processadores XSLT

Aplicam um stylesheet XSLT a um documento origem XML e produz um documento resultado.

Tratam árvores

Exemplos de processadores: Saxon, xt, MSXML3, Xalan (Apache)Web browsers já trazem tal processador sobretudo IE 6.0 e Netscape 6.0

Page 14: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

14

XSLT - Estrutura de uma folha XSL

Uma folha XSL é um conjunto de regras

Uma regra associa um seletor a uma forma ou modelo

O seletor define a estrutura a qual pode-se aplicar esta regra

A forma define a estrutura da sub-árvore gerada quando da ativação da regra

Se várias regras se aplicam a um elemento, a mais específica é executada

Page 15: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

15

XSLT - CaracterísticasElemento raiz de um documento XSL é <xsl:stylesheet> ou <xsl:transform>

<xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform>

<?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=“”>corpo do template

</xsl:template>…

<xsl:template match=“”>corpo do template

</xsl:template></xsl:stylesheet>

Documento XSL: Cabeçalho XML + <xsl:stylesheet> ou <xsl:transform> + Conjunto de regras de template

Page 16: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

16

XSLT - Características

O corpo das regras de template é constituído por:Expressões XPathElementos XSLTFunções XSLT e XPath

Permite manipular partes de um documento

Duas formas de utilizar um arquivo xsl:Através de uma linha de comando, que referencia os documentos envolvidos na transformação (p.e, o xml origem, o html resultado e o xslt)Incluindo uma referência no próprio arquivo xml

Page 17: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

17

<?xml version=“1.0” encoding=“iso-8859-1”?><saudacao>Bem-vindo a Maceió!</saudacao>

Saudacao.xml

<html><head>

<title>Saudação de Hoje</title></head><body>

<p>Bem-vindo a Maceió!</p></body></html>

Saudacao.html

Page 18: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

18

<?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=“/”>

<html><head>

<title>Saudação de Hoje</title></head><body>

<p><xsl:value-of select=“saudacao”/></p></body></html>

</xsl:template></xsl:stylesheet>

Saudacao.xsl

Linha de comando para transformar Saudacao.xml em Saudacao.html via Saudacao.xsl:C:>saxon Saudacao.xml Saudacao.xsl > Saudacao.html

Page 19: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

19

<?xml version=“1.0” encoding=“iso-8859-1”?><?xml-stylesheet type=“text/xsl” href=“saudacao.xsl”?><saudacao>Bem-vindo a Maceió!</saudacao>

Saudacao.xml

Inclusão de uma referência ao arquivo xsl no próprio arquivo xml:

Page 20: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

20

Exemplo 2Stylesheet que transforma elementos <para> e <emphasis>

para HTML:<?xml version='1.0'?><xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">

<xsl:template match="para"> <p><xsl:apply-templates/></p></xsl:template>

<xsl:template match="emphasis"> <i><xsl:apply-templates/></i></xsl:template>

</xsl:stylesheet>

Page 21: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

21

Exemplo 2(cont)

Com a stylesheet anterior, o documento XML:<?xml version='1.0'?><para>Isto é um <emphasis>teste</emphasis>.</para>

seria transformado em:<?xml version="1.0" encoding="utf-8"?><p>Isto é um <i>teste</i>.</p>

Page 22: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

22

Exemplo 3:<capitulo titulo = introducao>

Texto do capitulo

</capitulo>

<xsl:template match=“capitulo”>

<H1> <xsl:value-of select=“./@titulo”> </H1>

<xsl:apply-templates/>

</xsl:template>

<xsl:template match=“text()”>

<xsl:value-of select=“.”/>

</xsl:template>

<H1> Introducao </H1>

Texto do capitulo

XML

XSL

HTML

Page 23: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

23

Templates

A maioria dos templates têm a seguinte forma:<xsl:template match="emphasis">

<i><xsl:apply-templates/></i></xsl:template>

O elemento <xsl:template> é um template

O match pattern determina onde este template se aplica

Elementos XSLT vêm do XSL namespace

Page 24: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

24

XSLT – Expressões XPath XPath é usado para endereçar (select) partes de

documentos XML usando path expressions Uma path expression é uma sequência de passos

separados por “/” Análogo a nomes de arquivos numa hierarquia

de diretórios Resultado de uma path expression: um conjunto de

valores que juntamente com seus elementos/atributos casam com o path especificado

Ex. /banco-2/cliente/nomeCliente :<nomeCliente>José</nomeCliente><nomeCliente>Maria</nomeCliente>

Ex2 /banco-2/cliente/nomeCliente/text( )retorna os mesmos nomes,

mas sem as tags envolventes.

Page 25: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

25

XSLT – Expressões XPath O “/” inicial denota a raiz do documento

(acima da tag do topo ) Path expressions são avaliadas da esquerda

para direita Predicados de seleção podem seguir

qualquer passo num path, usando [ ] Ex. /banco-2/conta[saldo > 400]

retorna elementos de conta com saldo > 400 /banco-2/conta[saldo] retorna elementos

conta contendo um sub-elemento saldo Atributos são acessados usando “@”

Ex /banco-2/conta[saldo > 400]/@numero retorna os números das contas com saldo>400

Page 26: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

26

XSLT – Funções XPath XPath provê várias funções A função count() no final de um path

conta o número de elementos no conjunto gerado pelo path.

Ex /banco-2/conta[cliente/count() > 2] Retorna contas com > 2 clientes

Conectores Booleanos and e or e a função not() podem ser usados em predicados

IDREFs podem ser referenciados usando a função id()

E.g. /banco-2/conta/id(@proprietarios) retorna todos clientes referenciados pelo

atributo proprietarios do elemento conta.

Page 27: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

27

Xpath - Exemplo de patterns (1)

para associa todos filhos <para> no contexto corrente

para/emphasis associa com todos elementos <emphasis> que têm um pai <para>

/ associa com a raiz do documento

para//emphasis associa com todos elementos <emphasis> que têm um ancestral <para>

section/para[1] associa o primeiro filho <para> de todos os filhos <section> no contexto corrente

//title associa todos elementos <title> em qualquer lugar no documento

.//title associa todos elementos <title> que são descendentes do contexto corrente

Page 28: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

28

XPath- Exemplo de patterns (2)

section/*/note associa elementos <note> que tenham <section> como avós.

stockquote[@symbol] associa elementos <stockquote> que têm um atributo "symbol"

stockquote[@symbol="XXXX"] associa elementos <stockquote> que têm um atributo "symbol" com valor "XXXX"

emphasis|strong associa elementos <emphasis> ou <strong>

Page 29: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

29

XSLT - Elementos

Elementos XSLT possuem sintaxe e semântica bem definidos

Existem muitos elementos pré-definidos no namespace XSLT e que são interpretados por processadores XSLT

Nem todos os elementos XSLT estão disponíveis para todos os processadores XSLT

Forma:<xsl: element_name>

Page 30: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

30

XSLT - Elementos

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

<cd><title>Empire Burlesque</title><artist>Bob Dylan</artist>

  <country>USA</country><company>Columbia</company><price>10.90</price>

<year>1985</year> </cd><cd>

<title>Hide your heart</title><artist>Bonnie Tyler</artist><country>UK</country><company>CBS Records</company><price>9.90</price><year>1988</year>

</cd>...

</catalog>

Exemplo Base de XML:

Page 31: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

31

XSLT - Elementos

<xsl:template>Contém regras que serão aplicadas a um nó específicoPossui o atributo “match”, que determina à qual elemento XML, a regra deve ser aplicada.

<xsl:value-of>É usado para selecionar o valor de um elemento XML e adicioná-lo à saída da transformaçãoPossui o atributo “select”, que contém uma expressão Xpath que calcula o valor a ser adicionado ao documento resultado

Page 32: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

32

<?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="/"><html> <body>

-<h2>My CD Collection</h2> <table border="1">

<tr bgcolor="#9acd32"><th>Title</th><th>Artist</th>

</tr><tr>

<td>  <xsl:value-of select="catalog/cd/title" />   </td>- <td>  <xsl:value-of select="catalog/cd/artist"/>   </td>

</tr> </table>

</body> </html> </xsl:template>  </xsl:stylesheet>

Page 33: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

33

Resultado

Page 34: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

34

XSLT - Elementos

<xsl:for-each>Permite a construção de loopsPossui o atributo “select”, que contém uma expressão Xpath que vai determinar sobre que elemento será realizado o loop

<xsl:sort>É usado para ordenar a saídaPossui o atributo “select”, que indica qual elemento XML ordenarPossui o atributo “order”, que indica o tipo da ordenação: ascending ou descending.

Page 35: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

35

<?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="/">

<html><body>  <h2>My CD Collection</h2>

<table border="1"><tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th></tr><xsl:for-each select="catalog/cd"> <xsl:sort select="artist" /> <tr>

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

<td>  <xsl:value-of select="artist" />   </td>

  </tr></xsl:for-each>

  </table></body>  </html>

  </xsl:template>  </xsl:stylesheet>

Page 36: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

36

Resultado

Page 37: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

37

XSLT - Elementos

<xsl:if>Aplica um conteúdo apenas se uma condição especificada for verdadeiraPossui o atributo “test”, que contém a expressão a ser avaliada

<xsl:if test=“price&gt;‘10’>conteúdo ...

</xsl:if>

Page 38: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

38

<?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="/">

<html><body>  <h2>My CD Collection</h2>

<table border="1"><tr bgcolor="#9acd32">  <th>Title</th>  <th>Artist</th></tr><xsl:for-each select="catalog/cd"><xsl:if test="price&gt;'10'"> <tr>

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

<td>  <xsl:value-of select="artist" />   </td>

</tr></xsl:if></xsl:for-each>

</table>  </body>  </html> </xsl:template>  </xsl:stylesheet>

Page 39: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

39

XSLT - Elementos

Page 40: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

40

XSLT - Elementos<xsl:attribute>

É usado para adicionar atributos aos elementos

<picture><xsl:attribute name=“source”/>

<picture>

<xsl:template match="/"> <xsl:for-each select="catalog/cd">

<xsl:element name="singer"><xsl:value-of

select="artist" /> </xsl:element><br />

</xsl:for-each></xsl:template>

<xsl:element> cria um elemento (node) na saída

Page 41: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

41

XSLT - Elementos

<xsl:copy>Cria uma cópia do nó corrente do documento origem para o documento destino

<xsl:template match="message"> <xsl:copy></xsl:copy>

</xsl:template>

<xsl:copy-of>–Cria uma cópia do nó corrente (inclusive os nós filhos e atributos)

Page 42: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

42

<?xml version = "1.0"?><!-- Banco de Dados Esporte --><esportes> <jogo titulo = "cricket">

<id>243</id> <para> Mais popular na Inglaterra </para>

</jogo> <jogo titulo = ”baseball">

<id>431</id> <para> Mais popular nos EUA </para>

</jogo> <jogo titulo = ”futebol">

<id>123</id> <para> Mais popular no Brasil </para>

</jogo></esportes>

Exemplo: Seja o DB XML:

Page 43: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

43

match elemento esportes e aplica os templates aos nodes

filhos esportes

<?xml version = "1.0"?><!-- Usando xsl:element e xsl:attribute --><xsl:stylesheet version = "1.0” xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <xsl:apply-templates/> </xsl:template>

<xsl:template match = ”esportes"> <esportes> <xsl:apply-templates/> </esportes> </xsl:template> <xsl:template match = ”jogo"> <xsl:element name = "{@titulo}"> <xsl:attribute name = "id">

<xsl:value-of select = "id"/> </xsl:attribute> <comment>

<xsl:value-of select = "para"/> </comment>

</xsl:element> </xsl:template></xsl:stylesheet>

Use o atributo match para selecionar a raiz do documento XML

Cria elemento titulo

Cria atributo id para elemento titulo

Cria comentário com o conteúdo do elemento

para

Exemplo (cont): XSL

Page 44: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

44

<?xml version = "1.0" ?><esportes> <cricket id = "243">

<comment> Mais popular na Inglaterra</comment>

</cricket> <baseball id = "432">

<comment> Mais popular nos EUA</comment>

</baseball> <futebol id = ”123">

<comment> Mais popular no Brasil</comment>

</futebol></esportes>

Resultado produzido

Page 45: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

45

XSLT - Elementos <xsl:param>

Elemento que define parâmetros Possui o atributo “name” para assinalar o nome do

parâmetro Possui o atributo “select”, que armazena o valor do

parâmetro

<xsl:call-template> Elemento que chama um determinado template Possui o atributo “name” para assinalar o nome do

template

Page 46: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

46

<xsl:with-param> Elemento que define os valores dos parâmetros quando da

chamada de um template Possui o atributo “name” para assinalar o nome do

parâmetro Possui o atributo “select”, que armazena o valor do

parâmetro

<xsl:variable> Elemento usado para declarar variáveis Possui o atributo “name” para assinalar o nome da variável Possui o atributo “select”, que armazena o valor do variável

XSLT - Elementos

Page 47: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

47

XSLT - Elementos<xsl:template name=“parenthsize”>

<xsl:param name=“string”/><xsl:value-of select=“concat(‘(‘,$string,’)’)”/>

</xsl:template>

<xsl:variable name=“credit-in-paren”><xsl:call-template name=“parenthsize”>

<xsl:with-param name=“string” select=“@credit”/></xsl:call-template>

<xsl:variable>

Page 48: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

48

XSLT - Elementos <xsl:text>

Elemento usado para escrever texto na saída

<xsl:template match="car"> <p> <xsl:value-of

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

select="@color"/> </p> </xsl:template>

Page 49: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

49

XSLT - Funções Juntamente com XPath e os elementos XSLT,

formam o core XSLT Em um stylesheet XSLT podem ser usadas dois

tipos de funções built-in: Funções XPath Funções XSLT

Existem ainda as funções que podem ser definidas pelo elemento XSLT <xsl:functions>

<xsl:value-of select=“funcs:f1”><xsl:functions ns=“funcs” type=“text/javascript”>

function f1() { return “Funcao 1”; }

</xsl:functions>

Page 50: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

50

XSLT - Funções format-number()

É usada para converter números em strings de acordo com algum padrão de formato

format-number(value, format) => string<<format-number(12.5, ‘$#.00’)>> <<$12.50>><<format-number(0.25, ‘#00%’)>> <<25%>>

generate-id() Gera um string, na forma de um nome XML, que

unicamente identifica um nó. generate-id(nó) => string o código retornado depende do XSLT processor<<generate-id(book)>> <<N015732>>

Page 51: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

51

XSLT - Funções current()

Retorna o nó corrente

document() Retorna o nó raiz de um documento XML externo document(uri) => nó<<document(‘data.xml’)>>

Page 52: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

52

XSLT - Funções id()

Retorna o nó com um determinado valor para seu atributo ID

id(value) => nó<<id(‘A321-780’)>> <product code=“A321-780”>

element-available() É usada para testar se um determinada instrução

XSLT está disponível para uso. Element-available(name) => boolean<<element-available(‘xsl:text’)>>

Page 53: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

53

XSLT - Funções count(arg1)

retorna o número de nodes presentes no conjunto de nós passados como argumento

sum(arg1) calcula a soma de um conjunto de valores numéricos

contidos nos nodes do conjunto de nodes passados como argumento

contains(arg1, arg2) testa se arg1 contém arg2 como substring é case sensitive

Ex: contains (‘Paris’, ‘A’) retorna false

Page 54: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

54

XSLT - Exemplo Completo (Doc1 – Documento Origem XML)<?xml version="1.0" encoding="utf-8" ?>

<customers>  <customer CustomerID="ALFKI" CompanyName="Alfreds Futterkiste"

ContactName="Maria Anders" ContactTitle="Sales Representative" Address="Obere Str. 57" City="Berlin" PostalCode="12209" Country="Germany" Phone="030-0074321" Fax="030-0076545" />

  <customer CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" ContactName="Ana Trujillo" ContactTitle="Owner" Address="Avda. de la Constitución 2222" City="México D.F." PostalCode="05021" Country="Mexico" Phone="(5) 555-4729" Fax="(5) 555-3745" />

  <customer CustomerID="AROUT" CompanyName="Around the Horn" ContactName="Thomas Hardy" ContactTitle="Sales Representative" Address="120 Hanover Sq." City="London" PostalCode="WA1 1DP" Country="UK" Phone="(171) 555-7788" Fax="(171) 555-6750" />

  <customer CustomerID="BERGS" CompanyName="Berglunds snabbköp" ContactName="Christina Berglund" ContactTitle="Order Administrator" Address="Berguvsvägen 8" City="Luleå" PostalCode="S-958 22" Country="Sweden" Phone="0921-12 34 65" Fax="0921-12 34 67" />...

</customers>

Page 55: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

55

<?xml version="1.0" encoding="UTF-16" ?>

<customers><customer CompanyName="Cactus Comidas para llevar" CustomerID="CACTU" Country="Argentina" />

  <customer CompanyName="Océano Atlántico Ltda." CustomerID="OCEAN" Country="Argentina" />

  <customer CompanyName="Ernst Handel" CustomerID="ERNSH" Country="Austria" />   <customer CompanyName="Piccolo und mehr" CustomerID="PICCO"

Country="Austria" />   <customer CompanyName="Maison Dewey" CustomerID="MAISD"

Country="Belgium" />  <customer CompanyName="Comércio Mineiro" CustomerID="COMMI"

Country="Brazil" />

...<customer CompanyName="Save-a-lot Markets" CustomerID="SAVEA" Country="USA" />   <customer CompanyName="The Big Cheese" CustomerID="THEBI" Country="USA" />

</customers>

XSLT - Exemplo Completo (Doc1 – Documento Resultado XML)

Page 56: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

56

<?xml version="1.0" encoding="utf-8" ?><xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"><xsl:template match=“customer">

  <xsl:apply-templates /> </xsl:template> <xsl:template match="customers"> <xsl:for-each select="customer">  <xsl:sort select="@Country" order="ascending" />

<customer> <xsl:attribute name="CompanyName">  <xsl:value-of select="@CompanyName" />   </xsl:attribute>

<xsl:attribute name="CustomerID">  <xsl:value-of select="@CustomerID" />

</xsl:attribute><xsl:attribute name="Country">

  <xsl:value-of select="@Country"/></xsl:attribute>

  </customer>  </xsl:for-each></xsl:template> </xsl:stylesheet>

XSLT - Exemplo Completo (Documento XSLT para conversão Doc1 => Doc2)

Page 57: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

57

XSL: Extensible Stylesheet Language Formatting Objects Formatting objects

Usado para formatar documentos XML para apresentação

Tipicamente usado quando o resultado da transformção é para mídia impressa

livros, revistas, encartes, etc. FOP

Ferramenta em Java da Apache Transforma documentos XSL que contêm

formatting objects Download em xml.apache.org/fop

Page 58: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

58

XSLFO Exemplos de ferramentas

http://xml.apache.org/fop - FOP para PDF

http://www.unicorn-enterprises.com/ - TeX para PDF

http://www.jfor.org/ - XSLFO para RTF http://www.xsmiles.org/ - browser XML

que usa FOP

Page 59: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

59

Exemplos de XSLT para Aplicação de Banco

<xsl:template match=“/banco2/cliente”> <cliente> <xsl:value-of select=“nomeCliente”/> </cliente>

</xsl:template> <xsl:template match=“*”/>

Produz o resultado: <cliente> José </cliente> <cliente> Maria </cliente>

Page 60: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

60

Exercício 5Supondo que existem cadastrados os clientes Ana e Mauro, qual seria a saída produzida pelo XSLT :<xsl:template match=“/banco”>

<clientes> <xsl:template apply-templates/>

</clientes > </xsl:template>

<xsl:template match=“/cliente”> <cliente>

<xsl:value-of select=“nomeCliente”/> </cliente>

</xsl:template> <xsl:template match=“*”/>

Page 61: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

61

Exercício 5Resposta:<clientes> <cliente> Ana </cliente> <cliente> Mauro </cliente></clientes>

Page 62: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

62

Consulta a dados semi-estruturados

Page 63: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

63

Requisitos desejáveis (Maier ’98) Expressividade

linguagem de consulta ao estilo SQL possibilitar a restruturação de dados semi-estruturados

Semântica precisa muito importante para XML

Composição o resultado de uma consulta deve poder ser

utilizado dentro de uma outra consulta Consulta ao esquema

visando otimização Facilitar a geração automática de consultas

Consulta

Page 64: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

64

Expressões de caminho (Path expressions)

Expressões que permitem navegar no grafo de dados

Expressões de caminho simples sequências de labels exemplos

root.pessoas {&p1,&p2,&p3}root.pessoas.filhos {&p2,&p3}

semântica o resultado de uma expressão de caminho r.l1. … .ln,

onde l1,…,ln são os labels e r um objeto, é o conjunto de nodos do grafo acessíveis de r por um caminho do grafo tal que os arcos percorridos passam sucessivamente pelos labels l1,…,ln.

Page 65: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

65

Expressões de caminho Expressões de caminho generalizadas Idéia: além de especificar completamente um caminho,

permite exprimir restrições (constraints) sobre o caminho

Utilização de expressões regulares Exemplos

_ é um caracter coringa que designa um label qualquer

(pessoa|estudante)._.idade As expressões de caminho definidas até o presente

retornam os conjuntos de objetos e não de dados semi-estruturados

Consulta

Page 66: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

66

Linguagem de Consulta

X-Query

Page 67: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

67

XQuery Baseda em Quilt

(que é baseda em XML-QL) http://www.w3.org/TR/xquery/

2/2001 XML Query data model

Page 68: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

68

FLWR (“Flower”) ExpressionsFOR ... LET... WHERE...RETURN...

Page 69: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

69

XQueryEncontre os títulos dos livros

publicados após 1995:FOR $x IN document("bib.xml")/bib/book

WHERE $x/year > 1995

RETURN $x/titleResultado: <title> abc </title> <title> def </title> <title> ghi </title>

Page 70: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

70

XQueryPara cada autor de um livro publicado pela

Morgan Kaufmann, listar os livros publicados:FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)

RETURN <result>

$a,

FOR $t IN /bib/book[author=$a]/title

RETURN $t

</result>

distinct = elimina duplicatas

Page 71: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

71

XQueryResultado: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result>

Page 72: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

72

XQuery FOR $x in expr -- liga $x a cada

valor na lista expr

LET $x = expr -- liga $x à inteira lista expr Usado para subexpressões comuns e

para agregações

Page 73: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

73

XQuery

count = função (aggregate) que retorna o número de elementos

<big_publishers> FOR $p IN distinct(document("bib.xml")//publisher) LET $b := document("bib.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p </big_publishers>

Page 74: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

74

XQueryEncontre os livros cujos preços são

maiores do que a média de preços:FOR $b in document("bib.xml")/bib/book

LET $a=avg(document("bib.xml")/bib/book/price)

WHERE $b/price > $a

RETURN $b

Page 75: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

75

XQuerySumário: FOR-LET-WHERE-RETURN = FLWR

FOR/LET Clauses

WHERE Clause

RETURN Clause

Lista de tuplas

Lista de tuplas

Instância do modelo de dados Xquery

Page 76: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

76

FOR versus LET

FOR liga variáveis nodo iteration

LET liga variáveis coleção one value

Page 77: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

77

FOR versus LET

FOR $x IN document("bib.xml")/bib/book

RETURN <result> $x </result>

Retorna: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ...

LET $x IN document("bib.xml")/bib/book

RETURN <result> $x </result>

Retorna: <result> <book>...</book> <book>...</book> <book>...</book> ...</result>

Page 78: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

78

Coleções em XQuery Conjuntos e Bags

/bib/book/author = uma coleção do tipo Bag Distinct(/bib/book/author) = uma coleção do

tipo conjunto (Set) LET $a = /bib/book $a é uma coleção $b/author uma coleção (vários

autores...)RETURN <result> $b/author </result>Retorna: <result> <author>...</author> <author>...</author> <author>...</author> ...</result>

Page 79: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

79

Ordenação em XQuery<publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list>

Argumentos de sort referem-se ao namespace da cláusula RETURN e não da cláusula FOR

Page 80: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

80

If-Then-ElseFOR $h IN //holding

RETURN <holding>

$h/title,

IF $h/@type = "Journal"

THEN $h/editor

ELSE $h/author

</holding> SORTBY (title)

Page 81: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

81

Quantificador ExistencialFOR $b IN //book

WHERE SOME $p IN $b//para SATISFIES

contains($p, "sailing")

AND contains($p, "windsurfing")

RETURN $b/title

Page 82: 1 XSL - eXtensible Stylesheet Language. 2 XSL - Motivação Vantagens de separar apresentação de conteúdo: Múltiplos formatos de saída: tamanhos diferentes,

82

Quantificador Universal

FOR $b IN //book

WHERE EVERY $p IN $b//para SATISFIES

contains($p, "sailing")

RETURN $b/title