XPath e XSLT - Marx Gomes Van der Linden
Transcrição
XPath e XSLT - Marx Gomes Van der Linden
XPath e XSLT Ferramentas para Internet Marx Gomes Van der Linden ( Material baseado no original de Marcelo José Siqueira Coutinho de Almeida ) XSL XSL → Extensible Stylesheet Language Uma família de linguagens que especifica métodos de transformação e manipulação de documentos escritos em linguagens baseadas em XML http://marx.vanderlinden.com.br 2 XPath Linguagem especialmente criada para acessar partes de um documento XML Surgiu da necessidade de se acessarem os documentos XML como se fossem árvores Não é baseada em XML Fácil incorporação em documentos XML Usada pela XSLT http://marx.vanderlinden.com.br 3 XPath XPath não é uma linguagem comum... Não se escreve documentos XPath XPath é usada dentro de folhas de estilo XSL a fim de auxiliar a transformação de documentos XML Linguagem de consulta baseada em árvores http://marx.vanderlinden.com.br 4 <videoteca> <filme cod="CLA-1112"> <titulo> E o vento levou </titulo> <diretor> Victor Fleming </diretor> <elenco> <ator> Clark Gable </ator> <atriz> Vivian Leigh </atriz> </elenco> </filme> <filme cod="FIC-0001"> <titulo> Matrix </titulo> <diretor> Andy Wachowski </diretor> <diretor> Larry Wachowski </diretor> <elenco> <ator> Keanu Reeves </ator> <atriz> Laurence Fishburne </atriz> </elenco> </filme> http://marx.vanderlinden.com.br 5 </videoteca> Visão de Árvore videoteca filme filme titulo diretor elenco titulo Matrix E o vento levou ator Victor Fleming atriz Vivian Leigh diretor diretor Andy Fleming ator Larry Wachowski elenco atriz Laurence Fishburne Clark Gable http://marx.vanderlinden.com.br Keanu Reeves 6 Caminho de Localização Define como cada elemento de uma árvore XML pode ser localizado Definido através de uma seqüência de passos de localização separados por barra (“/") Localização é indicada de modo semelhante a uma estrutura de diretórios Também chamado de Expressão de Caminho (“path”) http://marx.vanderlinden.com.br 7 videoteca 1 2 filme filme titulo elenco diretor E o vento levou Victor Fleming titulo diretor diretor elenco Matrix ator atriz Vivian Leigh Andy Fleming Larry Wachowski Clark Gable Caminho 1 /videoteca/filme/diretor ator atriz Laurence Fishburne Keanu Reeve Caminho8 2 /videoteca/filme/elenco/ator http://marx.vanderlinden.com.br Caminho de Localização Símbolos – /: raiz do documento – .: próprio elemento (elemento de contexto) – *: substitui qualquer elemento em um determinado nível capítulo/seção/parágrafo capítulo/introdução/parágrafo capítulo/*/páragrafo http://marx.vanderlinden.com.br 9 Caminho de Localização Símbolos – //: substitui múltiplos * capítulo/parágrafo capítulo/introdução/parágrafo capítulo/tópicos/introdução/parágrafo capítulo//páragrafo http://marx.vanderlinden.com.br 10 Caminho de Localização Cada nodo que resulta da avaliação de um passo é utilizado como contexto para a avaliação do próximo filme titulo elenco titulo diretor elenco diretor http://marx.vanderlinden.com.br 11 Predicados Expressões booleanas utilizadas para encontrar um determinado elemento @ indica um atributo Devem ser satisfeitos para que a instrução correspondente seja processada Agem como filtros de itens indesejados em uma lista – /filme[@cod='001'] – /livro/seção[@idsec='A12'] http://marx.vanderlinden.com.br 12 <?xml version="1.0"?> <bookstore specialty="novel"> <book style="autobiography"> <author> <first-name>Joe</first-name> <last-name>Bob</last-name> <award>Trenton Literary Review Honorable Mention</award> </author> <price>12</price> </book> <book style="textbook"> <author> <first-name>Mary</first-name> <last-name>Bob</last-name> <publication>Selected Short Stories of <first-name>Mary</first-name> http://marx.vanderlinden.com.br 13 (...) Exemplos(1/3) author → Todos os autores no contexto atual //author → Todos os autores no documento /bookstore → Tag bookstore na raiz author/* → Todos os filhos de author *[@specialty] → Todas as tags que contém o atributo speciality book[@style] → Todas as tags book que contém o atributohttp://marx.vanderlinden.com.br style 14 Exemplos (2/3) book/@style → Todos os atributos style pertencentes a uma tag book book[@style=/bookstore/@specialty] → Todas os atributos specialty pertencentes à tag livro, cujo valor seja igual ao valor de specialty da tag bookstore, na raiz. @* → Todos os atributos do contexto atual author[1] → O primeiro autor no contexto atual http://marx.vanderlinden.com.br 15 Exemplos (3/3) author[first-name][3] → O terceiro autor que tem um first-name (filho) bookstore//title → Todos os elementos title descendentes de bookstore bookstore/*/title → Todos os elementos title que são netos de bookstore http://marx.vanderlinden.com.br 16 XSLT Um documento XML por si só não apresenta muitas vantagens É “apenas” um contêiner de informações Como visualizá-lo? Qual aplicação irá processá-lo? Como utilizá-lo? http://marx.vanderlinden.com.br 17 Motivação Por que transformar um documento? Armazenar em um formato, exibir em outro Converter para um formato mais útil Tornar o documento mais compacto Usar o documento como front-end para consultas a BD http://marx.vanderlinden.com.br 18 Processo de Transformação DECLARAÇÕES XSLT (XSL) ARQUIVO DE ENTRADA Processador XSLT ARQUIVO DE SAÍDA (XML ou não) (XML) http://marx.vanderlinden.com.br 19 Processo de Transformação Observações Documento original não é modificado Formato resultante pode ser serializado ou não O resultado pode ser outro arquivo XML, XHTML, HTML, texto plano, etc. http://marx.vanderlinden.com.br 20 Transformação Uma especificação de transformação é composta de um conjunto de regras que combinam elementos Cada regra é aplicada de acordo com uma busca ou seleção no documento fonte Cada regra descreve o que deve ser gerado com base nos dados de entrada Funciona como um filtro http://marx.vanderlinden.com.br 21 Transformação Documentos XML são representados como árvores Cada parte da estrutura é representada como um nó e acessada através de pesquisas Utilização de XPath http://marx.vanderlinden.com.br 22 Folha de Estilo Toda Folha de Estilo XSLT deve estar armazenada em um arquivo .xsl O arquivo XML deve referenciar a folha de estilo usando uma instrução de processamento <?xml-stylesheet href="folha.xsl" type="text/xsl" ?> http://marx.vanderlinden.com.br 23 Folha de Estilo: Formato <?xml version="1.0"> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Format"> <!-- CONTEÚDO --> </xsl:sylesheet> http://marx.vanderlinden.com.br 24 Comandos Templates São utilizados para descrever como uma determinada parte de um documento XML deve ser transformada. Uma Folha de Estilo XSL deve ser composta por um ou mais templates. Semelhante à definição de uma função em uma linguagem de programação. Pode ter um comportamento recursivo. http://marx.vanderlinden.com.br 25 Comandos Templates Sintaxe <xsl:template match="nó de referência"> [diretiva de processamento] | [texto] </xsl:template> http://marx.vanderlinden.com.br 26 Comandos Templates O atributo match é utilizado para identificar a associação de um estilo com um documento ou parte de um documento em especial. Define o nó de referência, ou seja, onde começa a busca pelo elementos a serem transformados. Semelhante ao where em uma cláusula select de SQL http://marx.vanderlinden.com.br 27 Comandos Para processar todo o documento XML a busca deve iniciar pelo elemento raiz <xsl:template match="/"> ... </xsl:template> <xsl:template match="videoteca"> ... </xsl:template> <xsl:template match="*"> ... </xsl:template> http://marx.vanderlinden.com.br 28 value-of value-of Imprime o conteúdo de um elemento dentro da árvore de resultados. Elemento é escolhido através do atributo select. Relativo ao contexto atual <xsl:value-of select="elemento corrente" /> <xsl:template match="diretor"> <xsl:value-of select="." /> </xsl:template> http://marx.vanderlinden.com.br 29 apply-templates Insere na posição especificada o processamento associado ao nó especificado Análogo à chamada de uma função em uma linguagem de programação <xsl:template match="/"> <b> Filmes: </b> <xsl:apply-templates /> </xsl:template> http://marx.vanderlinden.com.br 30 Processamento Seletivo Permite selecionar certos elementos filhos mediante uma determinada condição Utilização do comando select em applytemplates http://marx.vanderlinden.com.br 31 Processamento Seletivo <xsl:template match="videoteca"> <xsl:apply-templates select="filme[@cod='001']"/> </xsl:template> <xsl:template match="filme"> <xsl:apply-templates select="diretor"/> </xsl:template> http://marx.vanderlinden.com.br 32 Exemplo - XML <?xml version="1.0"?> <arquivo> <cliente cat="A"> <nome>Fulano de Tal</nome> <end>Rua XYZ, 123</end> </cliente> <cliente cat="B"> <nome>Beltrano Segundo</nome> <end>Av. ABC, 2345</end> <tel>3222-2223</tel> </cliente> <produto cod="prodA"> <nome>Produto A</nome> <preco>50.00</preco> </produto> http://marx.vanderlinden.com.br (...) 33 XSLT Completo (1/4) <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transfor m" version="1.0" > <xsl:output method="html" /> <xsl:template match="/"> <html><body> <h1> Clientes - Categoria A </h1> <xsl:apply-templates select="arquivo/cliente[@cat='A']"/> http://marx.vanderlinden.com.br 34 XSLT Completo (2/4) <h1> Clientes - Categoria B </h1> <ul> <xsl:apply-templates select="//cliente[@cat='B']"/> </ul> <h1> Produtos </h1> <table> <tr><th>Código</th><th>Nome</th><th>Preço</th> </tr> <xsl:apply-templates select="//produto"/> </table> </body></html> http://marx.vanderlinden.com.br 35 </xsl:template> XSLT Completo (3/4) <xsl:template match="cliente[@cat='A']"> <h2> <xsl:value-of select="nome"/> </h2> <p> Endereço: <xsl:value-of select="end"/> </p> <p> Telefone: <xsl:value-of select="tel"/> </p> </xsl:template> <xsl:template match="cliente[@cat='B']"> <li> <xsl:value-of select="nome"/>, <xsl:value-of select="end"/>, <xsl:value-of select="tel"/> </li> </xsl:template> http://marx.vanderlinden.com.br 36 XSLT Completo (4/4) <xsl:template match="produto"> <tr> <td><xsl:value-of select="@cod"/></td> <td><xsl:value-of select="nome"/></td> <td><xsl:value-of select="preco"/></td> </tr> </xsl:template> </xsl:stylesheet> http://marx.vanderlinden.com.br 37 Saída (1/2) http://marx.vanderlinden.com.br 38 Saída (2/2) http://marx.vanderlinden.com.br 39
Documentos relacionados
xsl:template
tipo string de um tuplo numa base de dados relacional. Usando uma relação para guardar todos os elementos, ou Usando uma relação diferente para cada elemento de tipo
Leia maisXSLT/XPath
Documento XSL: Cabeçalho XML +
XML: Introdução - Marx Gomes Van der Linden
Uma estruturahttp://marx.vanderlinden.com.br armazenada em memória
Leia mais