A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

XSLT e recursividade estrutural Helena Galhardas DEI IST.

Apresentações semelhantes


Apresentação em tema: "XSLT e recursividade estrutural Helena Galhardas DEI IST."— Transcrição da apresentação:

1 XSLT e recursividade estrutural Helena Galhardas DEI IST

2 Agenda Recursividade estrutural XSLT

3 Recursividade estrutural: um paradigma diferente Dados são vistos como conjuntos e um operador de união: {a:3, a:{b:one, c:5}, b:4} = {a:3} U {a:{b:one,c:5}} U {b:4}

4 Exemplo 1 f($T1 U $T2) = f($T1) U f($T2) f({$L: $T}) = f($T) f({}) = {} f($V) = if isInt($V) then {result: $V} else {} f($T1 U $T2) = f($T1) U f($T2) f({$L: $T}) = f($T) f({}) = {} f($V) = if isInt($V) then {result: $V} else {} Encontrar todos os inteiros nos dados a a b b c3 one5 4 result 354

5 Exemplo 2 O que faz? f($T1 U $T2) = f($T1) U f($T2) f({$L: $T}) = if $L=a then {b:f($T)} else {$L:f($T)} f({}) = {} f($V) = $V f($T1 U $T2) = f($T1) U f($T2) f({$L: $T}) = if $L=a then {b:f($T)} else {$L:f($T)} f({}) = {} f($V) = $V

6 Exemplo 3 Aumentar os preços dos motores de 10% f($T1 U $T2) = f($T1) U f($T2) f({$L: $T}) = if $L= engine then {$L: g($T)} else {$L: f($T)} f({}) = {} f($V) = $V f($T1 U $T2) = f($T1) U f($T2) f({$L: $T}) = if $L= engine then {$L: g($T)} else {$L: f($T)} f({}) = {} f($V) = $V g($T1 U $T2) = g($T1) U g($T2) g({$L: $T}) = if $L= price then {$L:1.1*$T} else {$L: g($T)} g({}) = {} g($V) = $V g($T1 U $T2) = g($T1) U g($T2) g({$L: $T}) = if $L= price then {$L:1.1*$T} else {$L: g($T)} g({}) = {} g($V) = $V enginebody partprice part price enginebody partprice part price

7 Exemplo 4 Encontrar todas as sub-árvores que se conseguem chegar por (a.b)*.a a b a f($T1 U $T2) = f($T1) U f($T2) f({$L: $T}) = if $L= a then g($T} U $T else { } f({}) = { } f($V) = { } f($T1 U $T2) = f($T1) U f($T2) f({$L: $T}) = if $L= a then g($T} U $T else { } f({}) = { } f($V) = { } g($T1 U $T2) = g($T1) U g($T2) g({$L: $T}) = if $L= b then f($T) else { } g({}) = { } g($V) = { } g($T1 U $T2) = g($T1) U g($T2) g({$L: $T}) = if $L= b then f($T) else { } g({}) = { } g($V) = { }

8 Forma genérica de recursividade estrutural f 1 ($T1 U $T2) = f 1 ($T1) U f 1 ($T2) f 1 ({$L: $T}) = E 1 ($L, f 1 ($T),...,f k ($T), $T) f 1 ({}) = { } f 1 ($V) = { } f 1 ($T1 U $T2) = f 1 ($T1) U f 1 ($T2) f 1 ({$L: $T}) = E 1 ($L, f 1 ($T),...,f k ($T), $T) f 1 ({}) = { } f 1 ($V) = { } f k ($T1 U $T2) = f k ($T1) U f k ($T2) f k ({$L: $T}) = E k ($L, f 1 ($T),...,f k ($T), $T) f k ({}) = { } f k ($V) = { } f k ($T1 U $T2) = f k ($T1) U f k ($T2) f k ({$L: $T}) = E k ($L, f 1 ($T),...,f k ($T), $T) f k ({}) = { } f k ($V) = { }.. Cada E 1,..., E k consiste só {_ : _}, U, if_then_else_

9 Execução da recursividade estrutural Calcula as funções recursivas começando com f1 na raíz Terminação é garantida Quão eficientemente se pode executar? Não vamos detalhar

10 XSL XSL composto por: Linguagem para transformar documentos XML (XSLT) Vocabulário XML para especificar semântica de formatação: XSL-FO (formatting objects) XSLT transforma um doc XML numa árvore de resultado: Outro doc XML Um doc HTML Um doc que contenha FO XSL-FO em geral: Corresponde a uma ou mais áreas no écran ou página Tem props para descrever o aspecto visual da área Tem como conteúdo ou texto Objecto externo (image, applet, etc.), ou Mais objectos de formatação

11 Programa XSLT XSL program = template-rule... template-rule template-rule = match pattern + template Examplo: Encontra os títulos de todos os livros

12 Regras XSLT (1) Regras são indicadas pelos elementos xsl:template O padrão é especificado usando uma expressão XPath no valor do atributo match template é o conteúdo do elemento xsl:template Ex: template corresponde aos elementos book é uma instrução que aplica os templates a todos os filhos do elemento que fez match no template

13 Regras XSLT (2) e são elementos resultado literais xsl:value-of é uma instrução que produz como saída o que é seleccionado pelo.valor do atributo select O valor do atributo select é uma expressão XPath

14 Modelo de processamento XSLT Processador lê um doc XML e uma stylesheet XSLT O processamento começa no nó raíz do documento Cada nó é processado do seguinte modo: Procurar a regra template com o melhor matching pattern Se encontrado, executar o conteúdo do template (a maior parte das vezes seleccionando mais nós para processar) Se não fôr encontrado, prosseguir com a lista de nós filhos Uma lista de nós é processada percorrendo os nós por ordem O processo continua recursivamente até não existirem mais novos para serem seleccionados

15 Controlo de fluxo

16

17 XSLT e recursividade estrutural Equivalente a: f(T1 U T2) = f(T1) U f(T2) f({L: T}) = if L= c then {C: t} else L= b then {B: f(t)} else L= a then {A: f(t)} else f(t) f({}) = {} f(V) = V f(T1 U T2) = f(T1) U f(T2) f({L: T}) = if L= c then {C: t} else L= b then {B: f(t)} else L= a then {A: f(t)} else f(t) f({}) = {} f(V) = V

18 XSLT vs recursividade estrutural XSLT: Sobre árvores Pode entrar em ciclo infinito Recursividade estrutural: Grafos arbitrários Termina sempre

19 Programa XSLT simples Copia a entrada:

20 Resolução de conflitos para regras de template Se várias regras de template fazem match, escolher a que tem maior prioridade Prioridades podem ser: Explicitas: implicitas: regras ad-hoc dadas pelo W3, baseadas no match match=abc prioridade 0. match=[... some namespace name... ] prioridade match=node() prioridade -0.5.

21 Modos em XSLT Modo = nome para um grupo de template rules Útil quando o mesmo nó tem que ser percorrido várias vezes Equivalente a ter múltiplas funções recursivas

22 Exemplo f(T1 U T2) = f(T1) U f(T2) f({a: T}) = {result:T} U g(T) f({}) = {} f(V) = V g(T1 U T2) = g(T1) U g(T2) g({b: T}) = f(T) g({}) = {} g(V) = V f(T1 U T2) = f(T1) U f(T2) f({a: T}) = {result:T} U g(T) f({}) = {} f(V) = V g(T1 U T2) = g(T1) U g(T2) g({b: T}) = f(T) g({}) = {} g(V) = V Calcular o caminho (a.b)* :

23 Exercício Escreva um programa XSLT que transforme o doc XML: Noutro com o formato: XML Peter Wood Algorithms Trevor Fenner Assuma que teaches é o elemento raíz e que os atributos course e lecturer são obrigatórios. O programa deve executar-se para qualquer número de ocorrências do elemento teaches-tuple.

24 Tópicos próximas aulas (Prof. Pável Calado) Extracção de dados da Web Extracção de informação

25 Referências S. Abiteboul, P. Buneman, D. Suciu, Data on the Web, From Relations to Semistructured Data and XML, Morgan Kaufmann, 2000, (caps 5 e 6) Peter Wood, Slides on Representing and Querying Data on the Web, web.html. Dan Suciu, Slides on The semistructured data model, CSE 590ds: Management of XML and Semistructured Data, W3C's XSL home page hands-on-xsl.pdf hands-on XSL: a simple exercise demonstrating the principles of XSLT (previously available from IBM developerWorks) hands-on-xsl.pdfIBM developerWorks nwalsh.com/docs/tutorials/xsl/ an XSL tutorial by Paul Grosso and Norman Walsh nwalsh.com/docs/tutorials/xsl/ an XSLT reference using examples; links to other XML tutorials metalab.unc.edu/xml/books/bible/updates/14.html a chapter from the XML Bible on XSL Transformations (and XPath) metalab.unc.edu/xml/books/bible/updates/14.html


Carregar ppt "XSLT e recursividade estrutural Helena Galhardas DEI IST."

Apresentações semelhantes


Anúncios Google