XSLT e recursividade estrutural Helena Galhardas DEI IST.

Slides:



Advertisements
Apresentações semelhantes
gerador de código intermediário
Advertisements

Tecnologias XML Extensible Stylesheet Language Transformation - XSLT.
Helena Galhardas DEI IST
XQuery (1ª parte) Helena Galhardas DEI IST
1 FEUPXML Anotação de Documentos Elementos, Atributos, Entidades, Comentários, Declarações e Instruções de Processamento.
1 © FEUP, Maio 2002XML/XSL FEUP Faculdade de Engenharia da Universidade do Porto XSL Gabriel David Porto, Maio de 2002.
XSLT e recursividade estrutural
O Essencial sobre Linguagens de Programação Luís Caires Maio 2005.
Teste de Software Parte 3.
Análise Sintática Ascendente
Tecnologia para Web JavaScript
Revisão da Linguagem C.
Conteúdo XML DOM XSL XSD XML DOM-XSL-XSD.
Análise Semântica e Representação Intermédia
Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação.
XML Extended Markup Language
PROGRAMAÇÃO ESTRUTURADA II
Extensible Stylesheet Language (XSL) Renata Pontin de Mattos Fortes SCE-225 Hipermídia 2°Semestre 2003.
Tópicos avançados em internet A
Recapitular XML... Gestão e Tratamento de Informação DEI IST.
XQuery (2ª parte) Helena Galhardas DEI IST (baseado nos slides de Ioana Manolescu, acessíveis em:
Linguagens de interrogação de dados XML XPath
Gestão e Tratamento de Informação Helena Galhardas DEI IST.
Introdução a Programação
Estruturas de Dados Módulo 3 – Controle de Fluxo
Introdução a aplicativos Java
DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 DESIGN E COMUNICAÇÃO MULTIMÉDIA 2011 / 2012 FORMADOR Gonçalo Miguel MÓDULO 25. Introdução ao ActionScript 3.0.
12 de Dezembro de 2007 Jos é Carlos Ramalho XSL or XSLFO Processamento Estruturado de Documentos
Conceitos Programas Programação Linguagens de Programação SQL.
Aulas 2 e 3 – Java – Prof. Marcelo Heitor # O método main e argumentos na linha de comando; # Fluxo padrão de entrada e saída; # A classe JOptionPane;
SISTEMAS OPERACIONAIS I Gerenciamento de Arquivos
Algumas notas sobre a linguagem de programação C
DESENVOLVIMENTO WEB II Estruturas de Decisão – IF..ELSE.
Aula 12 1 Análise Sintáctica Compiladores, Aula Nº 12 João M. P. Cardoso.
Usando Perl para a extracção automática de informação a partir de corpus bruto / cru Tema 4A Pablo Gamallo Otero
Árvores Binárias Profa. Patrícia A. Jaques Luiz Gonzaga Jr
Estruturas de Dados Aula 15: Árvores
1 Efficient Phrase Querying with an Auxiliary Index (SIGIR) 2002 Trabalho realizado por: Trabalho realizado por: João Casteleiro Alves João Casteleiro.
Cascading Style Sheets (css). Cascading Style Sheets  Cascading Style Sheets (CSS) é uma linguagem de estilo utilizada para definir a apresentação de.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Faculdade Pernambucana - FAPE Setembro/2007
Produção de Sites Unidade 9 – XML Prof.: Henrique Santos.
Fundamentos de linguagens de programação
Iº Workshop Linux da Unijorge
Semântica de Linguagens de Programação
A Série e a Transformada de
XSLT Padrão para Xtensible Stylesheet Language, e é uma linguagem de folha de estilos para dcoumentos XML.

©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.
Recapitular XML... Helena Galhardas DEI IST. Agenda Introdução ao XML Modelo de dados semi-estruturado XML Schema XML Namespaces.
Sumário 1 SQL Embutida 2 Processamento de Consultas
XML Prof. Dr. Fernando Gauthier INE/UFSC. XML XML (Extensible Markup Language) é uma linguagem para marcar documentos que contêm informações estruturadas.
XML Namespaces XML Namespaces provê um método para evitar conflito de nomes de elementos.
XML: Conceitos, Tecnologias e Aplicações Vânia Maria Ponte Vidal
XQuery Helena Galhardas DEI IST. Agenda XPath – exercício XQuery.
Analise de Algoritmos e Notação Assintótica
Linguagens de interrogação de dados XML XPath Helena Galhardas DEI IST.
Semântica de Ações Conceitos Básicos de Semântica de Ações, Especificações em Semântica de Ações, Primeiros Exemplos de Ações, WebAni.
Linguagem de Programação I Parte IV
Linguagens de Programação
Andréa Iabrudi 1 Universidade Federal de Ouro Preto - UFOP Departamento de Computação - DECOM Programação de Computadores I.
Programação para Web I AULA 4 ESTRUTURAS DE CONTROLE.
Programação estruturada unidade 2
Computadores vs. Programas / Algoritmos Computadores vs. Programas -> Algoritmos O tratamento de problemas através do computador geralmente envolve uma.
Rhizome. Roteiro Definição Metas Características Arquitetura Tecnologias envolvidas Referências.
IF E ITERAÇÃO WHILE Dilvan Moreira (baseado no livro Big Java e T. Munzner)
Recursividade, Entrada pelo teclado e Funções com retorno Dilvan Moreira.
Extensible Stylesheet Language (XSL)
Transcrição da apresentação:

XSLT e recursividade estrutural Helena Galhardas DEI IST

Agenda Recursividade estrutural XSLT

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}

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

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

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

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) = { }

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_

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

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

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.

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

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

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

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

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 price price em book, em bib que têm um atributo price com price igual a 10

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

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.

Controlo de fluxo

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 

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

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

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

Ainda outro programa XSLT simples Copia a entrada:

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.

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

Próximo tópico XQuery

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.

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

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