transformação de documentos xml - ufpa.br · texto (xml, html, tex, etc.) – especificar os...

74
Transformação de documentos XML César Vittori [email protected] Outubro de 2000 Resumo XSLT:Transformações XSL. Transformação de documentos XML. –XSLT–

Upload: vuonglien

Post on 01-Dec-2018

241 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Transf ormação de documentos XML

César [email protected]

Outubro de 2000

ResumoXSLT: Transformações XSL. Transformação de documentos XML.

–XSLT–

Page 2: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Intr odução

� XSLT: transformações XSL (inglês: “XSL Transformation”)

� Transformação de um documento XML para uma representação diferente

– templates de transformação são aplicados a objetos XML– a entrada é sempre XML– a saída pode ser XML, HTML, etc.

–XSLT– 1

Page 3: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Padrão XSLT

� O padrão surge para auxiliar no processo de publicação de um documento

– transformar um documento XML com uma estrutura arbitrária para umdocumento que esteja de acordo com a sintaxe FO DTD

� Embora o padrão tenha sido desenvolvido para transformar XML paraXML, é possível obter como saída qualquer formato baseado em texto

–XSLT– 2

Page 4: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Padrão XSLT (cont.)

� Descreve um mecanismo para transformar dados XML de entrada parauma representação diferente

� É possível:

– adicionar prefixos e/ou sufixos ao conteúdo– eliminar, criar, reestruturar e ordenar elementos– reusar elementos em qualquer parte do documento– transformar dados de um formato XML para outro formato baseado em

texto (XML, HTML, TeX, etc.)– especificar os objetos de formatação XSL que são aplicados a cada

classe de elementos

–XSLT– 3

Page 5: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Processador XSLT

� Um processador XSLT...

– recebe como entrada um documento XML– gera como saída um novo documento XML

� O documento de saída é estruturado de acordo com uma DTD diferente àDTD de entrada

– esta transformação é especificada em um style sheet– o style sheet segue a sintaxe do padrão XSLT

–XSLT– 4

Page 6: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Style sheets

� Um style sheet é formado por um conjunto de regras template

– transformações são executadas de acordo com tais regras

� Cada regra casa com um tipo de elemento no documento de entrada utili-zando expressões XPath

� As tags originais são substituídas por novas tags de saída

–XSLT– 5

Page 7: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: regra simples

� Texto em itálico é apresentado em linha e com formato negrito

<template match="emph"><fo:inline-sequence font-weight="bold">

<apply-templates/></fo:inline-sequence>

</template>

� Utilização de namespaces para identificar instruções de transformação einstruções de formatação (“fo: ” elementos FO DTD)

–XSLT– 6

Page 8: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Gerando conteúdo

� Um template pode adicionar texto fixo nos dados de saída

� Exemplo: mensagens de warnings sempre começam com a palavra WAR-NING em negrito

<warning>Este é um warning</warning>

WARNING: Este é um warning ***

–XSLT– 7

Page 9: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Manipulando inf ormação

� Um style sheet pode:

– filtrar informação contida no documento de entrada– mover informação de um lugar para outro– ordenar informação– localizar informação e reusá-la em diferentes lugares

–XSLT– 8

Page 10: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: localizando e reusando inf ormação

<book><review>Este livro trata de <kw>XML</kw> e <kw>XSL</kw>,assim como também <kw>CSS</kw> é introduzido.</review ></book>

� A seguinte saída pode ser gerada no documento de saída:

KEYWORDS:XML, XSL, CSS

� Utilidade para construir tabelas de conteúdo, lista de figuras, etc.

–XSLT– 9

Page 11: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Gerando código HTML

� Um style sheet pode transformar dados XML em sintaxe HTML

� Exemplo: os parágrafos são transformados para o elemento <P> emHTML

<template match="para"><html:p><apply-templa tes />< /ht ml:p >

</template>

–XSLT– 10

Page 12: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Style sheet XSLT

� Um style sheet XSLT é identificado pelo namespace:http://www.w3.org/XSL/T ran sfo rm/ 1.0

� O formato é definido em uma DTD que descreve elementos e atributosutilizados para construir um style sheet

– exemplos: apply-templates , for-each , value-of , etc.

� Um style sheet é um documento XML bem formado

–XSLT– 11

Page 13: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Estrutura geral

� O elemento raiz é denominado stylesheet

� O resto dos elementos definidos no padrão formam parte do namespa-ce. . .

<stylesheet xmlns="http://www.w3 .org /XS L/T ran sfo rm/1 .0" >...

</stylesheet>

� O elemento transform pode ser utilizado no lugar do stylesheet

–XSLT– 12

Page 14: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Utilizando mais de um namespace

� Um style sheet pode conter elementos que não formam parte do padrão

– utilizados para gerar o documento de saída

� O namespace destes elementos deve ser declarado

<stylesheet xmlns="http://www.w3 .org /XS L/T ran sfo rm/1 .0" >xmlns:X="... ... ...">

...

... <X:meu-elemento> ... </X:meu-elemento></stylesheet>

–XSLT– 13

Page 15: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Namespace do resultado

� O atributo result-ns (Result Namespace) é utilizado para identificar oprefixo que representa o namespace do documento de saída

� Exemplo:

<stylesheet xmlns="http://www.w3 .org /XS L/T ran sfo rm/1 .0" >xmlns:X="... ... ..."result-ns="X">

–XSLT– 14

Page 16: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Embutindo o style sheet em um documento XML

� Um style sheet pode estar contido em um documento XML

– utilidade quando o style sheet somente é aplicado ao documento con-siderado

� A instrução de processamento xml-stylesheet no documento XMLaponta para o style sheet embutido utilizando uma expressão XPointer

– o elemento style sheet apontado possui um atributo id

–XSLT– 15

Page 17: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Embutindo o style sheet em um documento XML (cont.)

� Exemplo:

<?xml-stylesheet type="#MyStyles" ?><X:book>

<stylesheet id="MyStyles" ... >...

</stylesheet>...

</X:book>

–XSLT– 16

Page 18: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Espaços brancos

� O processador XSLT cria uma árvore de nodos quando processa o docu-mento de entrada

– incluindo nodos para string de texto entre instruções de marcação

<book> <para>Um parágrafo.</para>

</book>

� Os espaços brancos são preservados por default

–XSLT– 17

Page 19: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Removendo espaços brancos

� Os espaços brancos são removidos utilizando o atributo default-spaceno elemento stylesheet

� Neste caso, o elemento preserve-space é utilizado para especificaruma lista de elementos nos quais os espaços brancos devem ser preser-vados

� Exemplo:

<stylesheet ... default-space="strip"><preserve-space elements="para title"/>

</stylesheet>

–XSLT– 18

Page 20: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Indentando o resultado

� O atributo indent-result é utilizado para indentar os dados de saídade acordo com sua estrutura hierárquica

– o default é “no”

� Exemplo:

<stylesheet ... indent-result="yes">

–XSLT– 19

Page 21: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Espaços brancos em elementos de texto

� O processador XSLT ignora os espaços brancos sempre que os mesmosnão estejam contidos em um elemento de texto

– o elemento text é utilizado para preservar espaços

� Exemplo: insere um espaço na saída

<text> </text>

–XSLT– 20

Page 22: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Templates

� Um style sheet é formado por um conjunto de regras template

– uma regra template é identificada pelo elemento template

� Sintaxe:

<template ... >...

</template>

–XSLT– 21

Page 23: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Template para um determinado elemento

� Cada template define a transformação que é aplicada a um elemento nodocumento de entrada

– o atributo match casa com um nome de elemento

� Exemplo: regra para os elementos para

<template match="para">...

</template>

–XSLT– 22

Page 24: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Expressões XPath no atrib uto match

� Regras de matching mais elaboradas podem ser escritas utilizando ex-pressões XPath

– utilidade quando um elemento deve ser formatado de diferentes formassegundo o seu contexto

� Exemplo: regra definindo o formato para os parágrafos contidos em ele-mentos warning

<template match="warning/para">...

</template>

–XSLT– 23

Page 25: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Impor tando definições

� Um conjunto de regras podem ser armazenadas em um style sheet ereferenciadas por múltiplos style sheets

– utilidade para compartilhar definições e evitar duplicações

� O elemento import é utilizado para importar um conjunto de regras

<stylesheet ... ><import href="tables.xsl"><import href="colours.xsl"><template ...

–XSLT– 24

Page 26: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Inserindo definições

� O elemento include é utilizado para inserir regras definidas em outrosstyle sheets

<include href=" ... ">

� Diferenças entre import e include :

– na resolução de conflitos quando mais de uma regra existe para umelemento as regras inseridas tomam precedência

– o elemento include pode ser utilizado em qualquer parte do style she-et, o elemento import somente antes da primeira regra template

–XSLT– 25

Page 27: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Processamento recur sivo

� Para trabalhar com um documento XML é necessário executar um proces-samento recursivo

– começando pelo elemento raiz e seus filhos, continuando pelos filhosde cada filho, etc.

� Em XSLT é necessário especificar quais os elementos da árvore XML quedevem ser processados

– o elemento apply-templates é utilizado para indicar que os filhos doelemento corrente devem ser processados

–XSLT– 26

Page 28: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Processando elementos

� Exemplo: processa os filhos do elemento para e os filhos do elementobold

<para>Uma <bold>palavra</bold> preta.</para>

<template match="para"><apply-templates/>

</template><template match="bold">

<apply-templates/></template>

–XSLT– 27

Page 29: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Regras default

� Existem regras default que aplicam a todos os elementos

� Exemplo: especifica que todos os elementos devem ser processados

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

</template>

“*” representa qualquer elemento (padrão XPath)“/” representa o elemento raiz

� Comentários e instruções de processamento não são processados pordefault

–XSLT– 28

Page 30: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Regras default (cont.)

� As regras default podem ser sobrescritas para modificar seu comporta-mento

– exemplo: nenhum elemento é processado incluindo a regra vazia<template match="/|*"></template>

� Utilidade para processar determinados elementos na árvore

– somente serão processados os elementos que casarem com os tem-plates restantes

–XSLT– 29

Page 31: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Regra defaut text()

� Apresenta o conteúdo texto de cada elemento

� Exemplo:

<template match="text()"><value-of select="."/>

</template>

“text()” representa um string de texto“.” o elemento corrente“value-of” insere o valor do elemento selecionado

–XSLT– 30

Page 32: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Processamento seletiv o

� O atributo select do elemento apply-templates é utilizado para se-lecionar determinados filhos para serem processados e ignorar o resto

� Exemplo: seleciona os elementos name que possuam um atributo de no-me type cujo valor é company

<template match="names"><apply-templates select="name[@type=’ company’] "/>

</template>

� O valor do atributo corresponde a uma expressão XPath

–XSLT– 31

Page 33: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Selecionando elementos não filhos

� O operador “// ” representa uma posição arbitrária na árvore

� Exemplo: insere títulos de capítulos na introdução

<template match="intro"><apply-templates select="//chapter/ti tle "/>

</template>

–XSLT– 32

Page 34: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Elemento apply-templates

� O elemento apply-templates pode aparecer mais de uma vez em umtemplate

� Exemplo: insere títulos de capítulos após o conteúdo da introdução

<template match="intro"><apply-templates/><apply-templates select="//chapter/ti tle "/>

</template>

–XSLT– 33

Page 35: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Formatos de saída

� Um processo XSLT produz como saída um novo documento

– um documento XML estrutura de diferente forma, um documento HTMLou outro formato de texto

� Elementos inseridos nos templates formam parte da saída gerada

� Exemplo: um parágrafo corresponde com um elemento “P” em HTML

<template match="para"><html:p><apply-templa tes />< /ht ml:p >

</template>

–XSLT– 34

Page 36: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Inserindo comentários e instruções de processamento

� Exemplo: o exemplo insere uma instrução de processamento e um co-mentário antes do corpo da página HTML

<template match="book"><processing-instructi on name="ACME">

INSERT_TOC<processing-instructi on><comment>Este é a versão HTML</comment><html:body><apply-tem pla tes />< /htm l:b ody >

</template>

–XSLT– 35

Page 37: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Inserindo comentários e instruções de processamento(cont.)

� Saída gerada no exemplo anterior

<?ACME INSERT_TOC?><!--Esta é a versão HTML--><body> ... </body>

–XSLT– 36

Page 38: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Prefixos e sufixos

� Um template pode adicionar texto ao conteúdo de um elemento

– prefixo: o texto aparece antes do elemento apply-templates– sufixo: o texto aparece depois do elemento apply-templates

� Exemplo: adiciona o prefixo “NOTE:” e o sufixo “] ” ao conteúdo do ele-mento note

<template match="note"><html:p>NOTE: <apply-templates/> ]</html:p>

</template>

–XSLT– 37

Page 39: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Ordenando elementos

� O elemento sort é utilizado para ordenar uma lista de elementos

– atua sobre os elementos selecionados pelo elementoapply-templates

� Os elementos são ordenados no documento de saída

–XSLT– 38

Page 40: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: ordenando elementos

� Exemplo: ordena alfabeticamente a lista de ítens

<list><item>ZZZ</item><item>AAA</item><item>MMM</item>

</list>

<template match="list"><apply-templates><sor t/> </a ppl y-te mpl ate s>

</template>

–XSLT– 39

Page 41: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Ordenando por atrib utos

� O atributo select do elemento sort é utilizado para especificar o critériopelo qual ordenar

� Exemplo: os ítens possuem o atributo sortcode que serve como chavepara ordenar a lista

<list><item sortcode="Z"> ... </item><item sortcode="M"> ... </item>

</list>

<sort select="@sortcode"/>

–XSLT– 40

Page 42: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Ordenando por várias chaves

� É possível utilizar mais de um elemento sort para ordenar elementos emdiferentes níveis

� Exemplo: ordena primeiro por second-name , e depois por first-nameno grupo dos elementos de second-name iguais

<template><sort select="second-name"/ ><sort select="first-name"/>

</template>

–XSLT– 41

Page 43: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Outras características da ordenação

� O elemento sort possui atributos opcionais que podem ser utilizados

– o atributo order especifica a ordem: ascending (o default) ou des-cending

– o atributo lang especifica a língua utilizada no texto– o atributo data-type especifica o tipo: text (o default) ou number

para ordenar valores numéricos– o atributo case-order

–XSLT– 42

Page 44: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Numeração automática

� O elemento number é utilizado para numerar os elementos em uma listade elementos

– facilita a manutenção da lista de ítens

� Exemplo: insere o número de seqüência antes do conteúdo do elemento

<template match="item"><number/><apply-templ ate s/>

</template>

� A numeração recomeça em cada elemento item

–XSLT– 43

Page 45: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Numeração automática (cont.)

� O atributo level do elemento number possibilita diferentes formas denumeração

– level="single" a numeração recomeça em cada elemento pai– level="any" a numeração continua em uma única seqüência– level="multiple" possibilita numeração em múltiplos níveis

–XSLT– 44

Page 46: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Numeração em níveis

� O número inserido consiste de várias partes

– o atributo format indica o tipo de numeração utilizado em cada nível ea pontuação entre os níveis

– o atributo count indica os elementos considerados na numeração demúltiplos níveis

–XSLT– 45

Page 47: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: numeração em níveis

� Numerar o título da seção (com uma letra) incluindo o número do capítulo

� Documento de entrada. . .

<chapter><section><title>Primeira seção do capítulo um</title> ...

–XSLT– 46

Page 48: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: numeração em níveis (cont.)

<template match="section/title" ><number level="multiple"

count="chapter|sectio n"format="1.A"/>

<apply-templates/></template>

� Saída. . .

1.A Primeira seção do capítulo um

2.C Terceira seção do capítulo dois

–XSLT– 47

Page 49: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Modos

� O atributo mode do elemento template é utilizado para definir váriostemplates associados a um elemento

– utilidade quando um elemento é formatado de diferentes formas segun-do o caso

� Exemplo: títulos de capítulos. . .

– os títulos de capítulos são transformados em elementos H1 HTML pordefault, mas

– os títulos de capítulos são transformados em elementos H3 HTML quan-do reusados na introdução

–XSLT– 48

Page 50: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: modos

<template match="intro"><apply-templates select="//chapter/tit le" mode="TOC"/>

</template>

<template match="chapter/title" ><html:h1><apply-templa tes/ ></ htm l:h 1>

</template>

<template match="chapter/title" mode="TOC"><html:h3><apply-templa tes/ ></ htm l:h 3>

</template>

–XSLT– 49

Page 51: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Variáveis

� O elemento variable é utilizado para declarar uma variável

– o atributo name indica o nome da variável– o conteúdo do elemento corresponde ao valor da variável

� Utilidade para evitar redundância na geração de saída idêntica

� Exemplo:

<variable name="colour">green</v aria ble >

–XSLT– 50

Page 52: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Usando variáveis

� O atributo select do elemento value-of é utilizado para recuperar ovalor da variável

– o valor do atributo é uma referência a uma variável (identificada pelosímbolo “$”)

� Exemplo:

<html:h1>A cor é<xsl:value-of select="$colour"/>.</ht ml: h1>

A cor é green

–XSLT– 51

Page 53: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Usando variáveis em elementos de saída

� É possível expressar o valor de um atributo utilizando uma variável previ-amente definida

– chaves são utilizadas representando uma expressão de texto

� Exemplo:

<variable name=“border”>3pt</v ari able >...... <fo:block border-width=“{$border }”> ...

–XSLT– 52

Page 54: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Reusando templates

� O elemento call-templates é utilizado para invocar um template

– utilidade para reusar a mesma formatação en vários lugares

� Funcionamento:

1. o template com a formatação comum é nomeado2. o template é invocado através do elemento call-template

–XSLT– 53

Page 55: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: nomeando um template

� O atributo name do elemento template é utilizado para associar um no-me único ao template

<template name="CreateHeader"><html:hr/><html:h2>**** <apply-templates/> ****</html:h2><html:hr/>

</template>

–XSLT– 54

Page 56: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo (cont.): invocando um template

� O atributo name do elemento call-template é utilizado para invocar otemplate

<template match="title"><call-template name="CreateHeader"/ >

</template>

<template match="head"><call-template name="CreateHeader"/ >

</template>

–XSLT– 55

Page 57: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Definindo parâmetr os

� É possível passar parâmetros a um template

– utilizade para alterar o funcionamento do template chamado

� O elemento param é utilizado para definir uma variável

– o atributo name associa um nome à variável– o conteúdo do elemento indica o valor default da variável

–XSLT– 56

Page 58: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: definindo parâmetr os

� Exemplo: define uma variável de nome Prefix e valor default “*** ”

<template name="CreateHeader"><param name="Prefix">***</p ara m><html:hr/><html:h2>

<value-of select="$Prefix">estre las !<apply-templates/>

</html:h2><html:hr/>

</template>

–XSLT– 57

Page 59: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Invocando um template com parâmetr os

� O elemento with-param é utilizado para passar parâmetros quando umtemplate é invocado

� Exemplo: o valor passado como parâmetro sobrescreve o valor default davariável

<call-template name="CreateHeader"><with-param name="Prefix">*****</p ara m>

</call-template>

*****estrelas! ...

–XSLT– 58

Page 60: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Inserindo o valor de um atrib uto em um atrib uto de saída

� O prefixo “@” representa o valor de um atributo

� Exemplo: insere os valores de dois atributos no atributo de saída name

<full-name first="João" second="Silva"/>

<template match="full-name"><X:person name="{@first} {@second}"/>

</template>

<person name="João Silva"/>

–XSLT– 59

Page 61: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Inserindo o valor de um atrib uto no conteúdo de umelemento

� O elemento value-of insere o valor de um atributo no conteúdo de saída

– o prefixo “@” é utilizado

<template match="full-name"><X:person>

<value-of select="@first"/><value-of select="@second"/> -<apply-templates/>

</X:person></template>

–XSLT– 60

Page 62: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Inserindo o valor de um atrib uto no conteúdo de umelemento (cont.)

� Exemplo: insere os valores de dois atributos no conteúdo do elementoperson

– entrada. . .<full-name first="João" second="Silva"/>

– saída. . .<person>João Silva - ... </person>

–XSLT– 61

Page 63: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Criando elementos

� É possível criar elementos no documento de saída inserindo conteúdo nostemplates

� Exemplo: cria o elemento html:h3 quando encontrado um elementothird-header-level no documento de entrada

<template match="third-header-le vel" ><html:h3>

<apply-templates/></html:h3>

</template>

–XSLT– 62

Page 64: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Criando elementos (cont.)

� O elemento element também pode ser utilizado

– o atributo name indica o nome do elemento– o atributo opcional namespace indica o namespace do elemento

� Exemplo: equivalente ao exemplo anterior

<template match="third-header-le vel" ><element namespace="html" name="h3">

<apply=templates/></element>

</template>

–XSLT– 63

Page 65: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Copiando elementos

� O elemento copy é utilizado para criar elementos no documento de saídacopiando elementos do documento de entrada

� Exemplo: agrega um prefixo a todos os cabeçalhos HTML

<template match="h1|h2|h3|h4|h5| h6|h 7"><copy>

Header: <apply-templates/></copy>

</template>

� Os atributos do elemento de entrada não são copiados

–XSLT– 64

Page 66: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Criando atrib utos

� O elemento attribute é utilizado para criar atributos em um elementode saída

– o atributo name indica o nome do atributo criado– o atributo namespace indica o namespace do aributo criado– o conteúdo do elemento representa o valor do atributo

� Pode ser utilizado com o elemento element ou com o elemento copy

–XSLT– 65

Page 67: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo: criando atrib utos

� Exemplo: adiciona o atributo style

<template match="h1|h2|h3|h4|h5| h6|h 7"><copy>

<attribute name="style">color: red</attribute>Header: <apply-templates/>

</copy></template>

–XSLT– 66

Page 68: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplos: Documento XML de entrada

<listalivros><livro>

<titulo>Projeto de Banco de Dados</titulo><autor>Heuser, Carlos Alberto</autor><ano>1999</ano>

</livro><livro>

<titulo>Data on the Web</titulo><autor>Abiteboul, Serge</autor><ano>2000</ano>

</livro></listalivros>

–XSLT– 67

Page 69: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo 1 - stylesheet para HTML

<xsl:template match="listalivros"><html>

<xsl:apply-templates/></html>

</xsl:template>

<xsl:template match="livro"><P>

<xsl:apply-templates/></P>

</xsl:template> ... ...

–XSLT– 68

Page 70: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo 1 - documento HTML gerado

<html><P>

Projeto de Banco de DadosHeuser, Carlos Alberto1999

</P><P>

Data on the WebAbiteboul, Serge2000

</P></html>

–XSLT– 69

Page 71: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo 2 - stylesheet para uma representação XMLdif erente

<xsl:template match="listalivros"><BookList>

<xsl:apply-templates/></BookList>

</xsl:template>

<xsl:template match="livro"><Book>

<xsl:apply-templates/></Book>

</xsl:template> ... ...

–XSLT– 70

Page 72: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo 2 - stylesheet para uma representação XMLdif erente (cont.)

<xsl:template match="autor"><Author>

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

</xsl:template>

<xsl:template match="titulo"><Title>

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

</xsl:template>

–XSLT– 71

Page 73: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Exemplo 2 - documento XML gerado

<BookList><Book>

<Author>Heuser, Carlos Alberto</Author><Title>Projeto de Banco de Dados</Title><Year>1999</Year>

</Book><Book>

<Author>Abiteboul, Serge</Author><Title>Data on the Web</Title><Year>2000</Year>

</Book></BookList>

–XSLT– 72

Page 74: Transformação de documentos XML - ufpa.br · texto (XML, HTML, TeX, etc.) – especificar os objetos de formatação XSL que são aplicados a cada classe de elementos –XSLT–

Referências

� Bradley, N. “The XML Companion”, Second edition. Ed. Addison-Wesley.2000.

� Clark, J. "XML Bible: XSL Transformations", Cap. 14. Ed. Elliotte RustyHarold, 1999. http://metalab.unc.edu/ xml /bo oks /bib le/ update s/1 4.ht ml

–XSLT– 73