Notas sobre XSLT. O modo correcto para declarar um documento xsl é:

Documentos relacionados
XSL - extemsible Stylesheet Language. Prof. Antonio Almeida de Barros Jr.

Linguagens e Programação XPATH / XSLT. Paulo Proença

XSLT Transforming XML

CONTEÚDO PROGRAMÁTICO

Transformação de documentos XML

XML: uma introdução prática X100. Helder da Rocha

XPath e XSLT. Ferramentas para Internet Marx Gomes Van der Linden. ( Material baseado no original de Marcelo José Siqueira Coutinho de Almeida )

DOM (Document Object Model)

Série Rações Semanais Xpath e XSLT Rogério Araújo

FEUP Faculdade de Engenharia da Universidade do Porto XSL. Porto, Maio de Gabriel David FEUP, Maio 2002 XML/XSL

TUTORIAL: LINGUAGENS XSL E XSLT

Transformações em XML: XSLT

5. Expressões aritméticas

GERÊNCIA DE DADOS SEMI ESTRUTURADOS - XPATH. Prof. Angelo Augusto Frozza, M.Sc.

Folhas de estilo. Jomi Fred Hübner (XSL e XPath) FURB / DSC

Programação para Internet I Aulas 10 e 11

XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Consultas de documentos XML: XPath e XQuery Transformação de

Algoritmos. Algoritmos e Linguagem de Programação - Prof Carlos Vetorazzi

XML e Banco de Dados. Prof. Daniela Barreiro Claro DCC/IM/UFBA

Exame de Época Especial / 1º Semestre / 2007/2008. Todas as folhas devem ser identificadas, de forma legível, com o nome e número do aluno.

MAPEAMENTO DE CONSULTAS SQL EM XML ENTRE SISTEMAS GERENCIADORES DE BANCO DE DADOS RELACIONAIS

Notas sobre TinyXML (TP2)

MAPEAMENTO DE CONSULTAS SQL ENTRE SISTEMAS GERENCIADORES DE BANCOS DE DADOS UTILIZANDO TECNOLOGIA XSLT

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Guia de Bolso HTML e XHTML

ANO LECTIVO 2008/2009. Planificação Médio Prazo. 8º Ano Área de Projecto. Horário Semanal: 1 Bloco de 90 min

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

Comentários: Desenvolvimento de Sistemas Rogério Araújo

O AMBIENTE DE TRABALHO... 2 CRIAR, ABRIR E GUARDAR DOCUMENTOS... 6 EDIÇÃO DE DOCUMENTOS... 7 FORMATAÇÃO DE TEXTO Manual de Word INTRODUÇÃO...

Introdução ao XML. Extensible Markup Language

Folha 4.2 Análise sintática ascendente

Algoritmos e Estruturas de Dados I (DCC/003) Estruturas Básicas. Aula Tópico 2

Introdução a XML X100

Extensible Markup Language (XML) Júnio César de Lima Cedric Luiz de Carvalho. Instituto de Informática Universidade Federal de Goiás

Operadores. Tipo de operadores. Aritméticos. Relacionais. Lógicos. Bit a bit. Cálculos aritméticos: soma, subtracção, multiplicação, divisão, etc.

ALGORITMOS 3ª Aula. 3. Introdução Tipos de dados, variáveis e operadores Tipos de dados

Aula 4: Introdução à Linguagem C++

7 Operadores e Expressões

Introdução e motivação SGBD XML Nativo Consultas em SGBDs XML Prática. Bancos de dados XML. Conceitos e linguagens de consulta

Resolução De Problemas Em Informática. Docente: Ana Paula Afonso Resolução de Problemas. 1. Analisar o problema

Linguagem XML. Linguagem XML

PORTUGUÊS ESTRUTURADO: INTRODUÇÃO INTRODUÇÃO À PROGRAMAÇÃO PROF. ALEXANDRO DOS SANTOS SILVA

Métodos de Programação I Ana Maria de Almeida

01/08/2011. Tipos de dados Numéricos Alfanuméricos Lógicos. Numéricos. Tipos de dados. Dados Numéricos Inteiros. Dados Numéricos Reais.

PLANIFICAÇÃO INTRODUÇÃO ÀS TECNOLOGIAS DE INFORMAÇÃO BLOCO I

Folha 4.1 Análise sintática descendente

Um Compilador Simples. Definição de uma Linguagem. Estrutura de Vanguarda. Gramática Livre de Contexto. Exemplo 1

Algoritmo e Programação. Capítulo 2 Tópicos Preliminares

5a. Aula - XML

ALGORITMOS E TÉCNICAS DE PROGRAMAÇÃO

Microsoft Excel: # 1

Algoritmos e Estruturas de Dados I (DCC/003) 2013/1. Estruturas Básicas. Aula Tópico 4

Escrever scripts de PHP com HTML

CSS. Cascading Style Sheets Style Sheets

Programação Estruturada Aula VisualG

Iniciação à Informática

Conceitos Básicos de Algoritmos

Rui Carneiro, Rui Pereira, Tiago Orfão

Variáveis Tipos de Dados

Variáveis Tipos de Dados. APROG (Civil) Aula 2

Transcrição:

Notas sobre XSLT XSLT é a abreviatura de extensible Stylesheet Language Tansformations. É uma linguagem para transformação de documentos xml. Permite transformar um documento xml noutro documento xml, ou noutro tipo de documento reconhecido por um browser, como html, xhtml, ou simplesmente texto. XSLT, ao transformar um documento noutro, pode adicionar ou remover elementos ou atributos, ordenar ou reestruturar elementos, realizar testes e tomar decisões sobre que elementos esconder ou mostrar no documento de saída. Um documento xsl contém a declaração xml, um elemento raiz <xsl:stylesheet> (ou <xsl:transform>) o qual contém templates, que são regras de estilo a aplicar ao documento xml. Os elementos <xsl:stylesheet> e <xsl:transform> são sinónimos e qualquer um pode ser usado. O modo correcto para declarar um documento xsl é: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform">......... </ xsl:stylesheet> A declaração de namespace xmlns:xsl="http://www.w3.org/1999/xsl/transform" é necessária para ter acesso aos elementos e atributos xslt. O atributo version="1.0" também deve ser incluído. Exemplo de documento xml (ola.xml) e correspondente documento xslt (ola.xsl): Ficheiro ola.xml: <?xml version="1.0" encoding="utf-8"?> <?xml-stylesheet type="text/xsl" href="ola.xsl"?> <cumprimento> Bom dia </cumprimento>

Ficheiro ola.xsl: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/xsl/transform"> <xsl:output method="html"/> <xsl:template match="/"> <xsl:apply-templates select="cumprimento"/> <xsl:template match="cumprimento"> <html> <body> <h1> <xsl:value-of select="."/> </h1> </body> </html> </xsl:stylesheet> Saída produzida: <html> <body> <h1> Bom dia </h1> </body> </html> Árvore documental abstracta O processo de transformação ou formatação de um documento xml, que referencia um documento xsl, começa por construir uma árvore, designada árvore documental abstracta. A árvore documental abstracta tem 1 nó raiz (/), que representa todo o documento xml. Este nó raiz possui nós filhos que são pelo menos a declaração xml (que é uma instrução de processamento), e o nó elemento raiz do documento xml. A raiz da árvore do documento (/) situa-se antes do elemento raiz do documento xml.

Um nó da árvore, correspondente a um elemento do documento xml, poderá ter como filhos: Nós elemento - correspondentes a elementos do documento xml. Nós atributo - correspondentes a atributos de elementos do documento xml. Nós texto correspondentes ao conteúdo textual de elementos do docum.x. Nós comentário correspondentes a comentários do documento xml. Nós instrução de processamento correspondentes a instr. de processamento. Nós namespace correspondentes a atributos para declaração de namespaces. Documento xsl Um documento XSL contém a declaração xml, um elemento raiz xsl:stylesheet contendo por sua vez templates, que são regras de estilo a aplicar ao documento xml. Um documento XSL (ou folha de estilo XSL) é essencialmente composto por um conjunto de templates (modelos). <xsl:template match = expressão-xpath > [ bloco de instruções XSL ] Cada template tem 2 partes: 1. Um selector de nós. O atributo match contém uma expressão XPath com os elementos da árvore fonte aos quais o template se aplica. Esta parte do template é usada para seleccionar os nós que se pretende transformar. 2. O corpo do template com as instruções de transformação a aplicar aos nós indicados no selector. O conteúdo do template lista os elementos a inserir e as acções a efectuar. Processo de Transformação No início da transformação o processador XSL posiciona-se na raiz da árvore do documento fonte. Procura um template que se aplique à raiz. Os nós aos quais um template se aplica são especificados através do atributo match de cada template. Se o processador encontra um template que se aplica à raiz, esse template coordena toda a transformação. O processador de XSLT quando encontra: <xsl:apply-templates /> move-se para os filhos do nó corrente, excepto nós atributo, (visitando-os da esquerda para a direita) e tenta encontrar um template que se aplique. <xsl:apply-templates select= expressão-xpath /> move-se para os nós incluídos na expressão XPath relativamente ao nó corrente. Só visita os elementos especificados no XPath para o contexto corrente, e para cada um tenta aplicar os templates aplicáveis.

Existem templates por omissão, pré-definidos, que se aplicam aos nós para os quais não se define qualquer template explícito. Templates por omissão: 1. Template por omissão para o nó raiz e para os nós elementos. O uso deste template no processamento de um nó resulta na acção indicada por <xsl:apply-templates/> que consiste em aplicar os templates aplicáveis a todos os nós filhos, excepto atributos. <xsl:template match = * / > <xsl:apply-templates /> 2. Template por omissão para nós texto e para nós atributo. O uso deste template no processamento de um nó resulta na acção indicada por <xsl:value-of select=. /> que consiste em enviar para a saída o conteúdo do nó texto ou o valor do atributo. <xsl:template match = text() @* > <xsl:value-of select =. /> 3. Template por omissão para instruções de processamento, comentários, e namespaces. Estes templates não produzem qualquer acção ou saída. Como não há nenhuma maneira de representar um padrão que unifique com um nó namespace, não há template por omissão para namespaces. <xsl:template match="processing-instruction() comment()"/> 4. Template por omissão para o nó raiz e para os nós elementos que são processados com o atributo mode. Quando a folha de estilos tem templates que usam o atributo mode, este template por omissão permite que o processamento para cada nó continue, mesmo se o nó não é explicitamente seleccionado pelo template com esse mode. <xsl:template match = * / mode="modea" > <xsl :apply-templates mode="modea"/> Os templates por omissão são usados como os templates explícitos, contudo têm menor prioridade. Os templates explícitos reescrevem os templates por omissão para o mesmo padrão do atributo match.

O template <xsl:template match = * / > <xsl:apply-templates /> não cria elementos novos, mas chama recursivamente os filhos do elemento corrente, constituindo um algoritmo de pesquisa primeiro em profundidade. Sem este template por omissão o processador xsl não se moveria para outros nós e o processamento dos elementos pararia. É possível reescrever o template por omissão, para parar o processamento para elementos para os quais não se definam regras de transformação: <xsl :template match = * / /> Quando o processador está a visitar um dado nó, o contexto é o nó pai. No exemplo apresentado o 1.º e único filho do nó <cumprimento> é um nó texto. A folha de estilos (stylesheet) apresentada não tem regras que se apliquem a nós texto, mas existe um template por omissão que copia o texto para a saída. O nó texto não tem filhos, portanto o processador xsl efectua backtracking até ao elemento <cumprimento> e move-se para o próximo filho. Elementos xsl de topo, filhos do elemento xsl:stylesheet: xsl:template xsl:output Elementos xsl que criam novos elementos durante a transformação: xsl:element xsl:attribute xsl:text xsl:copy xsl:value-of xsl:if cria um elemento com um nome obtido durante a execução. cria um atributo com um valor calculado em tempo de execução. cria um nó texto. copia o nó corrente. cria texto extraído da árvore fonte. se a expressão for verdadeira executa o conteúdo. Prioridades dos templates: Templates com uma expressão XPath mais específica tomam precedência sobre os templates menos específicos.

XPath O processo de transformação ou formatação de um documento xml, que referencia um documento xsl, começa por construir uma árvore, designada árvore documental abstracta. A linguagem XPath permite-nos seleccionar fragmentos dessa árvore e manipular alguns elementos. É uma linguagem de definição de caminhos em documentos inspirada nos nomes-caminhos dos sistemas de ficheiros. A árvore documental abstracta tem 1 nó raiz, cujos nós filhos são pelo menos a declaração xml, e o nó raiz do documento xml. Para o XPath há 7 tipos de nós: 1. O nó raiz um por documento. 2. Nós elemento correspondentes a elementos do documento xml. 3. Nós atributo - correspondentes a atributos do documento xml. 4. Nós texto 5. Nós comentário. 6. Nós instrução de processamento. 7. Nós namespace. Um nó da árvore correspondente a um elemento do documento xml poderá ter como filhos qualquer um dos nós 2 a 7. Sintaxe: / refere-se à raiz, indica um caminho absoluto // substitui qualquer caminho desde a raiz Sem barra inicial caminho relativo ao elemento corrente do contexto * qualquer elemento.. nó pai @ permite aceder a um atributo Operadores aritméticos: +, -, *, div, mod A barra ( / ) não é usada para divisão, porque significa separador de caminhos. Ao usar o operador de subtracção ( - ) é necessário deixar um espaço entre nomes e este operador, porque também pode ser usado como parte de um nome. Operadores de igualdade: =,!= Operadores relacionais: < > <= >= Operadores booleanos: and or

Consideremos o seguinte documento xml: <a> </a> <b/> <c/> <b/> <d> </d> <c/> <b/> Expressões XPath: /a elemento a raiz /a/c todos os elementos c filhos de da raiz a /a/d/b todos os elementos b filhos de d filhos da raiz a // todos os caminhos a partir da raiz //b todos os elementos b //d/b todos os elementos b filhos de d /a/* todos os elementos descendentes da raiz a //* todos os elementos /*/*/* todos os elementos filhos de um filho da raiz /a/b[1] o 1.º elemento b filho da raiz a /a/b[last()] o último elemento b filho da raiz a Uma expressão dentro de parêntesis rectos designa-se por predicado. Um predicado serve para especificar um elemento na árvore através da sua posição ou do seu conteúdo. Funções: 1. count(elem1) n.º de elementos elem1. 2. name() retorna o nome do elemento. 3. starts-with(str1, str2) retorna verdadeiro se str1 começa por str2. 4. contains(str1, str2) retorna verdadeiro se str1 contem str2. 5. string-length(str) retorna o número de caracteres do argumento.

Consideremos outro documento xml: <a> </a> <b id= 1 /> <b id= 2 /> <b cor= branca /> Expressões XPath: Os atributos são especificados pelo símbolo arroba @ //b[@id] todos os elementos b com o atributo id //b[@*] todos os elem. b com pelo menos 1 atributo //b[not@*] todos os elem. b que não tenham nenhum atributo //b[@id= 1 ] todos os elem. b que têm o atr. id com o valor 1 //b[normalize-space( @id ) = 1 ] todos os elem. b que têm o atr. id com o val. 1 depois de filtrar espaços iniciais e finais //*[count(b)=2] //*[count(*)=2] //*[name()=b] //*[starts-with( name(), b ] //*[contains( name(), b ] //*[string-length( name() = 4] //*[string-length( name() < 4] //*[string-length( name() > 4] todos os elementos que têm 2 filhos b todos os el.. que tenham exactam. 2 filhos todos os elementos com nome igual a b todos os elementos cujo nome começa por b todos os elem. cujo nome contém a string b todos os elem. cujo nome tenha 4 caracteres todos os el. cujo nome tenha menos de 4 car. todos os el. cujo nome tenha mais de 4 car. Operador usado num selector significa alternativa. //b //c //b //a/c todos os elementos b e elementos c todos os elementos b e todos os elem. c filhos de a