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 “one”5 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 100 1000 100 1000 enginebody partprice part price 110 1100 100 1000

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 Modelo de computação: diferente do das outras ligs de interrogação. XSL começa no elemento raiz e tenta aplicar um padrão a esse nó. Se tiver sucesso, então executa o template correspondente sobre esse nó. Normalmente, o template instroi o XSL para produzir um resultado em XML ou para aplicar os templates recursivamente nos nós filhos. Aí, o processo é repetido. o XSL é como uma função recursiva.

12 Regras XSLT 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 é uma instrução que aplica o programa XSLT completo a todos os filhos do elemento que fez match no template

13 Exemplo documento XML t1 a1 a2 t2 a3 a4 t3 a5 a6 a7

14 Exemplo de programa XSLT Significado: Devolve os títulos de todos os livros. Resultado: t1 t2 t3

15 Como funciona? Começa pela raiz...  Verifica se algum padrão é satisfeito pelo nó raiz  O padrão da primeira regra é. XSLT avalia o corpo da regra Implica que o programa completo vai ser aplicado a todos os filhos de ou seja aos 3 elementos …  Mais uma vez, só o padrão da primeira regra é satisfeito Implica aplicar o programa completo aos elementos e  Finalmente, o padrão da segunda regra é satisfeito pelo elemento O XSLT gera um elemento... em que o seu conteúdo é o valor do nó corrente ou seja a cadeia de caracteres com o título

16 Padrões XSLT: expressões de caminho bibelemento bib *qualquer elemento /root /bibbib debaixo de root bib/paperpaper debaixo de bib bib//paperpaper bebaixo de bib, a qq profundidade //paperpaper a qualquer profundidade paper|bookum paper ou um book @priceatributo price bib/book/@priceatributo price em book, em bib db/book[@price]books que têm um atributo price db/book[@price=’10’]books com price igual a 10

17 Instrução Cria um novo elemento com nome “...” Exemplos: Equivalente a:

18 Outro exemplo Copia todos os elementos top-level do ficheiro de entrada. “name()” retorna o nome do nó corrente, que usamos como o nome do nó de saída.

19 Controlo de fluxo

20 1 2 3 4 1 2 3 4

21 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 

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

23 Exemplo: conversão XML em HTML Bibliography entries >/TD> >/TD>

24 Resultado: HTML Bibliography Entries t1 a1 a2 t2 a3 a4 t3 a5 a6 a7

25 Ainda outro programa XSLT simples Copia a entrada:

26 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.

27 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”, http://www.dcs.bbk.ac.uk/~ptw/teaching/data-on-the- web.html. Dan Suciu, Slides on “The semistructured data model”, CSE 590ds: Management of XML and Semistructured Data, http://www.cs.washington.edu/education/courses/cse590ds/01sp/ http://www.cs.washington.edu/education/courses/cse590ds/01sp/ www.w3.org/Style/XSL/ W3C's XSL home page www.w3.org/Style/XSL/ 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/ www.zvon.org/xxl/XSLTreference/Output/ an XSLT reference using examples; links to other XML tutorials www.zvon.org/xxl/XSLTreference/Output/ 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

28 Próximo tópico XQuery

29 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 -0.25.  match=“node()”  prioridade -0.5.

30 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

31 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)* :


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

Apresentações semelhantes


Anúncios Google