XSLT/XPath
Transcrição
XSLT/XPath
XSLT/XPath Profs. Maria Luiza M.Campos Paulo Pires DCC-IM/NCE-UFRJ Sumário M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Introdução a XSL ? XPath ? XSL ? ? ? DBC Transformação de documentos HTML Transformação de documentos XML 1 Introdução M.L.M.Campos & Paulo Pires ? Conceito: ? ? Linguagem de Formatação independente de Plataforma. Parte I: ? Linguagem de transformação: XML -> árvore de objetos de Transformação ? ? Aplicações Baseadas em XML XSL Transformation [XSLT] Parte II: ? Representar construtores de alto nível (<page>, <block> or <table>) ? Representação genérica de um documento ? ? XSL Formatting Objects Adicionar informação de layout a documentos XML Modelo de Processamento M.L.M.Campos & Paulo Pires DBC Aplicações Baseadas em XML 2 Possibilidades de transformações M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Geração de texto constante ? Supressão de conteúdo ? Movimentação de texto ? ? Exemplo: ? ? mudança de ordem de nome e sobrenome Duplicação de texto ? Exemplo: ? cópia de títulos para produção de um índice) Ordenação ? Transformações mais complexas: ? ? Novas informações em função das informações existentes. Descrição da informação M.L.M.Campos & Paulo Pires ? A descrição de como apresentar os dados (possivelmente transformados) inclui três níveis de informações de formatação: ? ? ? DBC Aplicações Baseadas em XML Especificação do layout da tela em geral ou da página (ou mesmo do áudio) Atribuição do conteúdo transformado a “tipos de containers de conteúdo” (como listas, parágrafos, texto inline, títulos, subtítulos, etc.) Especificação de propriedades de formatação (espaçamento, margens, alinhamento, fontes, etc. ) para cada container resultante. 3 Onde acontece a transformação? M.L.M.Campos & Paulo Pires ? ? ? Aplicações Baseadas em XML No cliente (Web browser). No servidor (transformando-o possivelmente em um documento XML). Antes de ser colocado no servidor, um programa pode transformar o documento XML (geralmente p/ um documento HTML). Nesse caso tanto servidor com cliente só cuidam do documento já na versão transformada. Componentes da linguagem XSL M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML A especificação completa da linguagem XSL consiste de três componentes, descritos em recomendações do W3C: ? ? ? DBC XPath: XML Path Language -- linguagem para referenciar partes específicas de um documento XML XSLT: XSL Transformations -- linguagem para descrever como transformar um documento XML (representado como uma árvore) em outro documento (outra árvore) XSL: Extensible Stylesheet Language -- XSLT mais a descrição de um conjunto de Objetos de Formatação e Propriedades de Formatação. 4 XPath XPATH - localizando elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Uma das habilidades essenciais de uma linguagem de folha de estilo é localizar os elementos a serem estilizados. XSLT realiza essa tarefa com "match patterns" definidos por XML Path Language (XPath) (http://www.w3.org/TR/xpath). XPath possui um sintaxe baseada em strings ? Descreve "location paths" entre partes de um documento ou de documentos. ? Inspirado na sintaxe comum "path/file" de sistemas de arquivos. ? DBC 5 XPath (XML Path Language) M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Trata um documento XML como uma árvore lógica; ? A árvore consiste de 7 nós: ? ? ? Root Node – a raiz do documento Element Nodes – um para cada elemento do documento ? ? ? ? ? ? ? ID único Attribute Nodes Namespace Nodes Processing Instruction Nodes Comment Nodes Text Nodes A estrutura da árvore é ordenada e lida de cima para baixo e da esquerda para a direita. XPath (XML Path Language) M.L.M.Campos & Paulo Pires ? Visão abstrata, porém informal ? ? ? ? DBC Aplicações Baseadas em XML Um padrão Xpath especifica um ‘location path’; Um location path é absoluto, se começar com uma barra (“/”) ou relativo, caso contrário. Um location path relativo consiste de uma série de passos separados por barras. Um passo é um especificador de eixo, um nó de teste e um predicado. 6 XPath (XML Path Language) M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML Tem um ponto inicial definido (context node), uma direção (axis) e alguma descrição do destino final (predicate); ? ? ? axis (especifica o relacionamento entre os nós selecionados e o nó contexto) test node (especifica o tipo de nó e o nome) 0 ou mais predicados (expressões arbitrárias para refinar o conjunto selecionado de nós) ex: child::para[position( )=1] =>child é o nome do axis, para é o nó teste, e [position()=1] é um predicado ex: descendant::para =>seleciona o elemento para descendente do nó contexto. XPath - Exemplos de caminhos M.L.M.Campos & Paulo Pires ? Sintaxe: LocationPath ? ::= RelativeLocationPath | AbsoluteLocationPath Exemplos ? ? ? ? ? ? ? DBC Aplicações Baseadas em XML child::para child::* attribute::name ancestor::div self::para child::*/child::para / seleciona o elemento para filho do nó contexto seleciona todos os elementos filhos do nó contexto seleciona o atributo name do nó contexto seleciona todos os ancestrais de div do nó contexto seleciona o nó contexto se ele é um elemento para seleciona todo para neto do nó contexto seleciona a raiz do documento 7 XPath – Tipos de Retorno M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML XPath é expressa em expressões que podem resultar em 4 tipos de objetos: ? nodeset => coleção não ordenada de nós sem duplicidade ? boolean => true ou false ? number => número em ponto flutuante ? string => uma sequência de caracteres Unicode XPath - Exemplo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Considerando: <?xml version=‘1.0’?> <book> <chapter number=“1”> Why Meta Data Why XML </chapter> <chapter number=“2”> XML Schemas </chapter> <chapter number=“3”> XML Linking and querying XML </chapter> </book> Exibir o conteúdo do terceiro elemento filho do nó elemento <book>. (usando sintaxe de caminho de posição relativa não abreviada DBC 8 XPath - Exemplo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Assumindo que o context node é o nó representando o elemento <book> no documento XML. ? Caminho de posição relativa não abreviada: child::*[position( )=3] child:: significa que a direção é filho; ? * indica que qualquer nó elemento filho pode ser considerado; ? [position( )=3] é o predicado indicando que o conjunto de nós que satisfazem a esse caminho é um elemento simples na terceira posição. ? XPath - Sintaxe Abreviada M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML (child - default axis) ? div/para é equivalente a child::div/child::para attribute:: pode ser abreviado para: @ ? “//” é a abreviação de /descendant-orself::node()/ ? “.” é abreviação de self::node() ex: .//para é abreviação de: self::node()/descendant-orself::node()/child::para ? “..” é abreviação de parent::node() ? DBC 9 XPath - Posição relativa x absoluta M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML XPath tem 4 tipos de sintaxe: ? ? ? ? * * caminhos de posição relativa não abreviada; caminhos de posição absoluta não abreviada; caminhos de posição relativa abreviada; caminhos de posição absoluta abreviada. Caminhos de posição relativa: construídos com o context node sendo o ponto inicial; Caminhos de posição absoluta: usam seus pontos iniciais como sendo o nó raiz do documento que contém o context node. Xpath - Direções M.L.M.Campos & Paulo Pires ? Em XPath existem 13 direções (Axes) que começam o processo de filtragem dos nós no documento XML: ? Child => todos os filhos diretos do nó contexto; ? Parent => nó pai direto do nó contexto; ? ? DBC Aplicações Baseadas em XML Descendant => todos os filhos do nó contexto, filhos de seus filhos, etc. Ancestor => nó pai do nó contexto, nó pai de seu pai, etc, incluindo o nó raiz; ? Descendant-or-self => nós descendant incluindo o nó contexto; ? Ancestor-or-self => nós ancestor incluindo o nó contexto;. 10 XPath - Direções (cont.) M.L.M.Campos & Paulo Pires ? ? ? ? Aplicações Baseadas em XML Following => todos os nós que aparecem depois do nó contexto na ordem do documento, somente incluindo elementos cuja tag de abertura apareça após a tag de fechamento do nó contexto, não incluindo descendentes do nó contexto; Preceding => todos os nós que aparecem antes do nó contexto na ordem do documento, somente incluindo elementos que já foram fechados antes da abertura do nó contexto. Following-sibling => todos os nós irmãos que apareceram após o nó contexto na ordem do documento; Preceding-sibling => todos os nós irmãos que apareceram antes do nó contexto na ordem do documento; ? Attribute => todos os atributos do nó contexto; ? Namespace => todos os namespaces do nó contexto; ? Self => o próprio nó contexto. Xpath - Biblioteca de funções M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML XPath define um conjunto de funções e operadores ? Todas as implementações de Xpath devem implementar a biblioteca de funções ? Node Set Functions ? list/item[position() mod2 = 1] seleciona todos os números ímpares elementos de uma list id(“foo”)/child::para[position()=5] seleciona o quinto para filho do elemento cujo ID é foo ? Boolean Functions boolean true() returns “true” ? Number Functions number sum(node-set) retorna a soma dos nós DBC 11 Como funcionam os padrões de reconhecimento (pattern matching) no XPath? M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML O reconhecimento de padrões ocorre em contextos: expressões XPath podem alterar o contexto corrente. ? XPath é capaz de endereçar todos os elementos da árvore origem. ? Predicados podem ser utilizados para o refinamento ? Expressões Numéricas M.L.M.Campos & Paulo Pires DBC Aplicações Baseadas em XML Operator Descrição Exemplo Resultado + Addition 6+4 10 - Subtraction 6- 4 2 * Multiplication 6*4 24 div Division 8 div 4 2 mod Modulus (division remainder) 5 mod 2 1 12 Expressões Igualdade e Lógicas M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Operador Descrição Exemplo Resultado = Like (equal) price=9.80 true (if price is 9.80) != Not like (not equal) price!=9.80 False or or price=9.80 or price=9.70 true (if price is 9.80) and and price<=9.80 and price=9.70 false Expressões Relacionais M.L.M.Campos & Paulo Pires DBC Aplicações Baseadas em XML Operador descrição Exemplo Resultado < Less than price<9.80 false (if price is 9.80) <= Less or equal price<=9.80 true > Greater than price>9.80 false >= Greater or equal price>=9.80 true 13 Funções – Conjunto de Nós M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Nome Decrição Sintaxe count() Returns the number of nodes in a node-set number=count(node -set) id() Selects elements by their unique ID node-set=id(value) last() Returns the position number of the last node in the processed node list number=last() local -name() Returns the local part of a node. A node usually consists of a prefix, a colon, followed by the local name string=local- name(node) name() Returns the name of a node string=name(node) namespace- uri() Returns the namespace URI of a specified node uri=namespace- uri(node) position() Returns the position in the node list of the node that is currently being processed number=position() Funções - String M.L.M.Campos & Paulo Pires DBC Aplicações Baseadas em XML Nome Descrição Syntaxe & Exemplo concat() Returns the concatenation of all its arguments string=concat(val1, val2, ..) Exemplo : concat('The',' ','XML') Result: 'The XML' contains() Returns true if the second string is contained within the first string, otherwise it returns false bool=contains(val,substr) Exemplo : contains('XML','X') Result: true normalize-space() Removes leading and trailing spaces from a string string=normalize -space(string) Exemplo : normalize-space(' The XML ') Result: 'The XML' starts - with() Returns true if the first string starts with the second string, otherwise it returns false bool=starts - with(string,substr) Exemplo : starts - with('XML','X') Result: true string() Converts the value argument to a string string(value) Exemplo : string(314) Result: '314' 14 Funções - String M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML string- length() Returns the number of characters in a string number=string- length(string) Example: string- length('Beatles') - Result: 7 substring() Returns a part of the string in the string argument string=substring(string,start,length) Example: substring('Beatles',1,4) - Result: 'Beat' substring -after() Returns the part of the string=substring- after(string,substr) string in the string argument Example: that occurs after the substring -after('12/10','/') - Result: '10' substring in the substr argument substring - before() Returns the part of the string=substring- before(string,substr) string in the string argument Example: that occurs before the substring - before('12/10','/') - Result: '12' substring in the substr argument translate() Performs a character by character replacement. It looks in the value argument for characters contained in string1, and replaces each character for the one in the same position in the string2 string=translate(value,string1,string2) Examples: translate('12:30','30','45') - Result: '12:45' translate('12:30','03','54') - Result: '12:45' translate('12:30','0123','abcd') Result: 'bc:da' Funções Numéricas M.L.M.Campos & Paulo Pires DBC Aplicações Baseadas em XML Name Description Syntax & Example ceiling() Returns the smallest integer that is not less than the number argument number=ceiling(number) Example: ceiling(3.14) Result: 4 floor() Returns the largest integer that is not greater than the number argument number=floor(number) Example: floor(3.14) Result: 3 number() Converts the value argument to a number number=number(value) Example: number('100') Result: 100 round() Rounds the number argument to the nearest integer integer=round(number) Example: round(3.14) Result: 3 sum() Returns the total value of a set of numeric number=sum(nodeset) values in a node-set Example: sum(/cd/price) 15 Funções Booleanas M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Nome Descrição Sintaxe & Exemplo boolean() Converts the value argument to Boolean and returns true or false bool=boolean(value) false() Returns false false() Exemplo : number(false()) Result: 0 lang() Returns true if the language argument matches the language of the the xsl:lang element, otherwise it returns false bool=lang(language) not() Returns true if the condition argument is false, and false if the condition argument is true bool=not(condition) Exemplo : not(false()) true() Returns true true() Exemplo : number(true()) Result: 1 Tutorial XPath M.L.M.Campos & Paulo Pires ? ? http://www.zvon.org/xxl/XPathTutorial/General/exa mples.html Ferramenta: ? ? ? http://www.purpletech.com/xpe/xpe.jar java -jar xpe.jar Exercícios ? DBC Aplicações Baseadas em XML http://genesis.nce.ufrj.br/dataware/hp/pires/cursos/XML 16 XSLT (Extensible Stylesheet Language Transformation) XSL - Princípios gerais M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML XSL: eXtensible Stylesheet Language ? Como CSS, funcionamento a base de regras ? CSS não modifica a estrutura de um documento, XSL sim ? XSL possui duas partes: ? ? XSLT: uma linguagem de transformação. ? ? ? DBC Permite transformar uma árvore numa outra árvore, por exemplo XML em HTML, XML em XML XSL-FO (Formating Objects): uma linguagem de formatação, correspondente ao CSS XSL utiliza a sintaxe XML 17 Componentes de XSL M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML XSL logicamente consiste de 3 componentes: ? XPath: XML Path Language ? ? XSLT: XSL Transformations ? ? linguagem para referenciar partes específicas de um documento XML linguagem para descrever como transformar um documento XML (representado como uma tree) em outro XSL-FO: ? uma descrição de um conjunto de Formatting Objects e Formatting Properties XSLT - Características M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML Linguagem declarativa ? Descreve a transformação desejada, ao invés de prover uma sequência de instruções procedurais XSLT é essencialmente uma “ferramenta” para transformar documentos XML ? XSLT manipula árvores ? XSL Namespaces: ? ? DBC O W3C provê um stylesheet para tags XSL 18 XSLT - Características M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML Processadores XSLT ? ? ? Aplicam um stylesheet XSLT a um documento origem XML e produz um documento resultado. Tratam árvores Exemplos de processadores: ? ? Saxon, xt, MSXML3, Xalan (Apache) Web browsers já trazem tal processador sobretudo IE 6.0 e Netscape 6.0 Transformação de documentos XML com XSL M.L.M.Campos & Paulo Pires ? Existem diversas formas de transformar um documento XML, através de stylesheets XSL: 1. Associando uma stylesheet a um documento XML. ? 2. 3. Ex: <xml-stylesheet type="text/xsl" href="stylecontacts.xsl" ?> Utilizando script de cliente para selecionar, obter e aplicar a stylesheet. Aplicar a transformação com código em script no servidor. Aplicações Baseadas em XML <%@ Language="JavaScript" %> <% var userAgent = new String(Request.ServerVariables ("HTTP_USER_AGENT")); if (userAgent.indexOf("MSIE 5") >= 0) Response.Redirect("contacts.xml"); else Response.Write (OnServer()); function OnServer() { var doc, stylesheet; doc = Server.CreateObject(“Microsoft.XMLDOM"); stylesheet = Server.CreateObject("microsoft.xmldom"); if (doc != null && stylesheet != null) { doc.async = false; stylesheet .async = false; doc.load(Server.MapPath("contacts .xml")); stylesheet .load(Server.MapPath("stylecontacts.xsl")); if (doc. parseError == 0 && stylesheet.parseError == 0) return doc.transformNode(stylesheet); else return "<HTML><BODY>Error loading documents</BODY></HTML >"; } else return "<HTML><BODY>Error creating server-side components</BODY></HTML >"; } %> DBC 19 Estrutura de uma folha XSL M.L.M.Campos & Paulo Pires ? ? ? ? ? Aplicações Baseadas em XML Uma folha XSL é um conjunto de regras Uma regra associa um seletor a uma forma ou modelo O seletor define a estrutura a qual pode se aplicar esta regra A forma define a estrutura da sub-árvore gerada quando da ativação da regra Se várias regras se aplicam a um elemento, a mais específica é executada XSLT - Características M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Elemento raiz de um documento XSL é <xsl:stylesheet> ou <xsl:transform> <xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform> Documento XSL: Cabeçalho XML + <xsl:stylesheet> ou <xsl:transform> + Conjunto de regras de template <?xml version=“1.0” encoding=ISO-8859-1”?> <xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform> <xsl:template match=“”> corpo do template </xsl:template> … <xsl:template match=“”> corpo do template </xsl:template> </xsl:stylesheet> DBC 20 XSLT - Características M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML O corpo das regras de template: ? ? ? Expressões XPath Elementos XSLT Funções XSLT e XPath Permite manipular partes de um documento ? Duas formas de utilizar um arquivo xsl: ? ? ? Através de uma linha de comando, que referencia os documentos envolvidos na transformação (p.e, o xml origem, o html resultado e o xslt) Incluindo uma referência no próprio arquivo xml Exemplo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version=“1.0” encoding=“iso-8859-1”?> <saudacao>Brasil Penta Campeão!</saudacao> Saudacao.xml <html> <head> <title>Saudação de Hoje</title> Saudacao.html </head> <body> <p>Brasil Penta Campeão!</p> </body> </html> DBC 21 Exemplo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Saudacao.xsl <?xml version=“1.0” encoding=“iso-8859-1”?> <xsl:stylesheet version=“1.0” xmlns:xsl=“http://www.w3.org/1999/XSL/Transform”> <xsl:template match=“/”> <html> <head> <title>Saudação de Hoje</title> </head> <body> <p><xsl:value-of select=“saudacao”/></p> </body> </html> </xsl:template> </xsl:stylesheet> C:>saxon Saudacao.xml Saudacao.xsl > Saudacao.html Exemplo M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Inclusão de uma referência ao arquivo xsl no próprio arquivo xml: <?xml version=“1.0” encoding=“iso-8859-1”?> <?xml- stylesheet type=“text/xsl” href=“saudacao.xsl”?> <saudacao>Brasil Penta Campeão!</saudacao> Saudacao.xml DBC 22 Exemplo 2 M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML 1 2 3 4 <?xml version = "1.0"?> 5 6 7 Elemento raiz stylesheet XSLT namespace <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <!-- intro.xsl --> <!-- Simple XSLT document for intro.xml --> 8 9 <xsl:template match = "myMessage"> Expressão XPath no elemento template: seleciona qquer elemento myMessage 10 <html> 11 <body><xsl:value-of select = "message"/></body> 12 </html> 13 </xsl:template> 14 15 </xsl:stylesheet> Exemplo 2 M.L.M.Campos & Paulo Pires 1 Aplicações Baseadas em XML <?xml version = "1.0"?> Elemento stylesheet liga a folha de estilo ao doc. XML 2 3 <!-- 4 <!-- Simple introduction to XML markup --> intro.xml --> 5 6 <?xml:stylesheet type = "text/xsl" href = "intro.xsl"?> 7 8 9 <myMessage> <message>Welcome to XSLT!</message> 10 </myMessage> DBC 23 Exemplo 2 M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Exemplo 3 M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML XML <capitulo titulo = introducao> Texto do capitulo </capitulo> XSL <xsl:template match=“capitulo”> <H1> <xsl:value-of select=“./@titulo”> </H1> <xsl:apply-templates/> </ xsl:template> HTML <xsl:template match=“text()”> <xsl:value-of select=“.”/> </ xsl:template> DBC <H1> Introducao </H1> Texto do capitulo 24 Exemplo 4 M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Stylesheet que transforma elementos XML <para> e <emphasis> para as tags HTML <p> e <i> : <?xml version=“1.0”?> <xsl:stylesheet xmlns:xsl= “http://www.w3.org/1999/XSL/Transform” version="1.0"> <xsl:template match="para"> <p><xsl:apply-templates/></p> </xsl:template> <xsl:template match="emphasis"> <i><xsl:apply-templates/></i> </xsl:template> </xsl:stylesheet> Exemplo 4 M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Com a stylesheet anterior, o documento XML: <?xml version='1.0'?> <para>This is a <emphasis>test</emphasis>.</para> seria transformado em: <?xml version="1.0" encoding="utf-8"?> <p>This is a <i>test</i>.</p> DBC 25 Templates M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML A maioria dos templates têm a seguinte forma: <xsl:template match="emphasis"> <i><xsl:apply-templates/></i> </xsl:template> O elemento <xsl:template> é um template O match pattern determina onde este template se aplica XSLT elements vêm do namespace XSL XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Elementos XSLT possuem sintaxe e semântica bem definidos ? Existem muitos elementos pré-definidos no namespace XSLT e que são interpretados por processadores XSLT ? ? ? Forma: ? DBC Nem todos os elementos XSLT estão disponíveis para todos os processadores XSLT <xsl: element_name> 26 XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Exemplo Base de XML: <?xml version="1.0" encoding="ISO-8859-1" ?> <catalog> <cd> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <country>USA</country> <company>Columbia</company> <price>10.90</price> <year>1985</year> </cd> <cd> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <country>UK</country> <company>CBS Records</company> <price>9.90</price> <year>1988</year> </cd> ... </catalog> XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsl:template> Contém regras que serão aplicadas a um nó específico Possui o atributo “match”, que determina à qual elemento XML, a regra deve ser aplicada. <xsl:value-of> É usado para selecionar o valor de um elemento XML e adicioná-lo à saída da transformação Possui o atributo “select”, que contém uma expressão Xpath que calcula o valor a ser adicionado ao documento resultado DBC 27 XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0” xmlns:xsl="http://www.w3.org/1999/XSL/Transform”> <xsl:template match="/"> <html> <body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title </th> <th>Artist</th> </tr> <tr> <td> <xsl:value-of select="catalog/cd/title " /> </td><td> <xsl:value-of select="catalog/cd/artist"/> </td> </tr> </table> </body> </html> </xsl:template> </xsl:stylesheet> XSLT - Elementos M.L.M.Campos & Paulo Pires DBC Aplicações Baseadas em XML 28 XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsl:for-each> Permite a construção de loops Possui o atributo “select”, que contém uma expressão Xpath que vai determinar sobre que elemento será realizado o loop <xsl:sort> É usado para ordenar a saída Possui o atributo “select”, que indica qual elemento XML ordenar Possui o atributo “order”, que indica o tipo da ordenação: ascending ou descending. XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body> <h2>My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th>Artist</th> </tr> <xsl:for-each select="catalog/cd"> <xsl:sort select="artist" /> <tr> <td> <xsl:value-of select="title" /> </td> <td> <xsl:value-of select="artist" /> </td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet> DBC 29 XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsl:if> Aplica um conteúdo apenas se uma condição especificada for verdadeira Possui o atributo “test”, que contém a expressão a ser avaliada <xsl:if test=“price>‘10’> conteúdo ... </xsl:if> DBC 30 XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0" encoding="ISO-8859-1" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="/"> <html><body > <h2> My CD Collection</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Title</th> <th> Artist </th> </tr> <xsl:for-each select ="catalog/cd "> <xsl:if test="price>'10'"> <tr> <td> <xsl:value-of select ="title" /> </td> <td> <xsl:value-of select ="artist" /> </td> </tr> </xsl:if> </xsl:for-each> </table> </body > </html> </xsl:template> </xsl:stylesheet > XSLT - Elementos M.L.M.Campos & Paulo Pires DBC Aplicações Baseadas em XML 31 Exercício M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Fazer os exercícios de conversão XML para HTML ? http://genesis.nce.ufrj.br/dataware/hp/pires/ cursos/XML/index.html ? XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsl:attribute> –É usado para adicionar atributos aos elementos <picture> <xsl:attribute name=“source”/> <picture> <xsl:element> –Cria um nó elemento na saída <xsl:template match="/"> <xsl:for-each select="catalog/cd"> <xsl:element name="singer"> <xsl:value-of select="artist" /> </xsl:element> <br /> </xsl:for-each> </xsl:template> DBC 32 XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsl:copy> Cria uma cópia do nó corrente do documento origem para o documento destino <xsl:template match="message"> <xsl:copy> </xsl:copy> </xsl:template> ? <xsl:copy-of> –Cria uma cópia do nó corrente (inclusive os nós filhos e atributos) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 DBC <?xml version = "1.0"?> <!-- Fig. 12.4 : games.xml --> M.L.M.Campos Paulo Pires <!-- Sports &Database --> Aplicações Baseadas em XML Exemplo <sports> <game title = "cricket"> <id>243</id> <para> More popular among commonwealth nations. </para> </game> <game title = "baseball"> <id>431</id> <para> More popular in America. </para> </game> <game title = "soccer"> <id>123</id> <para> Most popular sport in the world. </para> </game> </sports> 33 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <?xml version = "1.0"?> <!-- Fig. 12.5 : elements.xsl --> <!-- Using xsl:element M.L.M.Campos & Paulo Pires and xsl:attribute --> Aplicações Baseadas em XML Exemplo <xsl:stylesheet version = "1.0" xmlns:xsl = "http://www.w3.org/1999/XSL/Transform"> <xsl:template match = "/"> <xsl:apply -templates/> </xsl:template> <xsl:template match = "sports"> <sports> <xsl:apply-templates/> </sports> </xsl:template> Atributo match p/ selecionar elemento raiz aplica Elemento apply-templates XSLT aos nós selecionados Seleciona elemento sports e aplica template para os filhos de sport <xsl:template match = "game"> <xsl:element name = "{@title}"> Cria elemento title <xsl:attribute name = "id"> <xsl:value -of select = "id"/> </xsl:attribute> Cria atributo id para title <comment> <xsl:value -of select = "para"/> </comment> Cria comentários para os elementos para </xsl:element> </xsl:template> </xsl:stylesheet > Exemplo - Resultado M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML 1 <?xml version = "1.0" encoding = "UTF-8"?> 2 <sports> 3 4 <cricket id = "243" > 5 <comment> 6 More popular among commonwealth nations. 7 </comment> 8 </cricket> 9 10 <baseball id = "431"> 11 <comment> 12 More popular in America. 13 </comment> 14 </baseball> 15 16 <soccer id = "123"> 17 <comment> 18 Most popular sport in the world. 19 </comment> 20 </soccer> 21 22 </sports> DBC 34 XSLT - Elementos M.L.M.Campos & Paulo Pires ? <xsl:param> ? ? ? ? Aplicações Baseadas em XML Elemento que define parâmetros Possui o atributo “name” para assinalar o nome do parâmetro Possui o atributo “select”, que armazena o valor do parâmetro <xsl:call-template> ? Elemento que chama um determinado template ? Possui o atributo “name” para assinalar o nome do template XSLT - Elementos M.L.M.Campos & Paulo Pires ? <xsl:with-param> ? ? ? ? Elemento que define os valores dos parâmetros quando da chamada de um template Possui o atributo “name” para assinalar o nome do parâmetro Possui o atributo “select”, que armazena o valor do parâmetro <xsl:variable> ? ? ? DBC Aplicações Baseadas em XML Elemento usado para declarar variáveis Possui o atributo “name” para assinalar o nome da variável Possui o atributo “select”, que armazena o valor do variável 35 XSLT - Elementos M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <xsl:template name=“parenthsize”> <xsl:param name=“string”/> <xsl:value-of select=“concat(‘(‘,$string,’)’)”/> </xsl: template> <xsl: variable name=“credit-in-paren”> <xsl:call-template name=“parenthsize”> <xsl:with-param name=“string” select=“@credit”/> </xsl:call-template> <xsl: variable> XSLT - Elementos M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML <xsl:text> ? Elemento usado para escrever texto na saída <xsl:template match="car"> <p> <xsl:value-of select="@year"/> <xsl:text>.</xsl:text> <xsl:value-of select="@color"/> </p> </xsl:template> DBC 36 XSLT - Funções M.L.M.Campos & Paulo Pires ? ? Juntamente com XPath e os elementos XSLT, formam o core XSLT Em um stylesheet XSLT podem ser usadas dois tipos de funções built-in: ? ? ? Aplicações Baseadas em XML Funções XPath Funções XSLT Existem ainda as funções que podem ser definidas pelo elemento XSLT <xsl:functions> <xsl:value-of select=“funcs:f1”> <xsl:functions ns=“funcs” type=“text/javascript”> function f1() { return “Funcao 1”; } </xsl:functions> XSLT - Funções M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML format-number() É usada para converter números em strings de acordo com algum padrão de formato ? format-number(value, format) => string <<format-number(12.5, ‘$#.00’)>> <<$12.50>> <<format-number(0.25, ‘#00%’)>> <<25%>> ? ? generate-id() ? Gera um string, na forma de um nome XML, que unicamente identifica um nó. generate-id(nó) => string ? o código retornado depende do XSLT processor <<generate-id(book)>> <<N015732>> ? DBC 37 XSLT - Funções M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML current() Retorna o nó corrente current() => conjunto de nós <<generate-id(current())>> ? ? ? document() ? Retorna o nó raiz de um documento XML externo ? document(uri) => nó <<document(‘data.xml’)>> XSLT - Funções M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML id() Retorna o nó com um determinado valor para seu atributo ID ? id(value) => nó <<id(‘A321-780’)>> <product code=“A321-780”> ? ? element-available() ? ? É usada para testar se um determinada instrução XSLT está disponível para uso. Element-available(name) => boolean <<element-available(‘xsl:text’)>> DBC 38 XSLT - Funções M.L.M.Campos & Paulo Pires ? count(arg1) ? ? retorna o número de nodes presentes no conjunto de nós passados como argumento sum(arg1) ? ? Aplicações Baseadas em XML calcula a soma de um conjunto de valores numéricos contidos nos nodes do conjunto de nodes passados como argumento contains(arg1, arg2) ? ? testa se arg1 contém arg2 como substring é case sensitive ? Ex: contains (‘Paris’, ‘A’) retorna false XSLT - Exemplo Completo– Documento Origem XML M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0" encoding="utf-8" ?> <customers> <customer CustomerID="ALFKI" CompanyName="Alfreds Futterkiste" ContactName="Maria Anders" ContactTitle="Sales Representative" Address="Obere Str. 57 " City=" Berlin" PostalCode="12209 " Country=" Germany " Phone="030-0074321 " Fax="030-0076545 " /> <customer CustomerID="ANATR" CompanyName="Ana Trujillo Emparedados y helados" ContactName="Ana Trujillo " ContactTitle=" Owner" Address="Avda. de la Constitución 2222" City="México D.F." PostalCode="05021 " Country="Mexico " Phone="(5) 555-4729" Fax="(5) 555-3745" /> <customer CustomerID="AROUT" CompanyName="Around the Horn" ContactName="Thomas Hardy " ContactTitle="Sales Representative" Address="120 Hanover Sq." City="London" PostalCode="WA1 1DP " Country="U K" Phone="(171) 555-7788" Fax="(171) 555-6750 " /> <customer CustomerID="BERGS" CompanyName=" Berglunds snabbköp " ContactName="Christina Berglund " ContactTitle="Order Administrator" Address="Berguvsvägen 8" City="Luleå" PostalCode="S- 958 22" Country="Sweden" Phone="0921-12 34 65 " Fax="0921-12 34 67" /> ... </customers> DBC 39 XSLT - Exemplo Completo – Documento Resultado XML M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0" encoding="UTF-16" ?> <customers> <customer CompanyName="Cactus Comidas para llevar" CustomerID="CACTU" Country="Argentina" /> <customer CompanyName="Océano Atlántico Ltda." CustomerID="OCEAN" Country="Argentina" /> <customer CompanyName="Ernst Handel" CustomerID="ERNSH" Country="Austria " /> <customer CompanyName="Piccolo und mehr" CustomerID="PICCO" Country="Austria " /> <customer CompanyName="Maison Dewey" CustomerID="MAISD" Country="Belgium " /> <customer CompanyName="Comércio Mineiro" CustomerID="COMMI" Country="Brazil" /> ... <customer CompanyName="Save-a-lot Markets" CustomerID="SAVEA" Country="USA" /> <customer CompanyName="The Big Cheese" CustomerID="THEBI" Country="USA" /> </customers> XSLT - Exemplo Completo - Documento XSLT para conversão Doc1 => Doc2) M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <?xml version="1.0" encoding="utf-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match=“customer"> <xsl:apply-templates /> </xsl:template> <xsl:template match="customers"> <xsl:for-each select="customer"> <xsl:sort select="@Country" order="ascending" /> <customer> <xsl:attribute name="CompanyName"> <xsl:value-of select="@CompanyName" /> </xsl:attribute> <xsl:attribute name="CustomerID"> <xsl:value-of select="@CustomerID" /> </xsl:attribute> <xsl:attribute name="Country"> <xsl:value-of select="@Country"/> </xsl:attribute> </customer> </xsl:for-each> </xsl:template> </xsl:stylesheet> DBC 40 Exercícios M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML Fazer Exercícios de transformação XML para XML ? http://genesis.nce.ufrj.br/dataware/hp/pires/ cursos/XML/index.html ? Formatting Objects - XSLFO M.L.M.Campos & Paulo Pires ? Aplicações Baseadas em XML Formatting objects Usado para formatar documentos XML para apresentação ? Tipicamente usado quando o resultado da transformção é para mídia impressa ? ? ? FOP ? ? ? DBC livros, revistas, encartes, etc. Ferramenta em Java da Apache Transforma documentos XSL que contêm formatting objects Download em xml.apache.org/fop 41 XSLFO M.L.M.Campos & Paulo Pires ? Exemplos de ferramentas ? ? ? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 DBC Aplicações Baseadas em XML http://xml.apache.org/fop - FOP para PDF http://www.unicorn-enterprises.com/ - TeX para PDF http://www.jfor.org/ - XSLFO para RTF http://www.xsmiles.org/ - browser XML que usa FOP <?xml version = "1.0"?> <!-- welcome.fo --> M.L.M.Campos Paulo Pires <!-- Simple &FO example --> Define root element fo:root and namespace prefix fo (these Aplicações Baseadas em XML do not affect document’s format) <fo:root xmlns:fo = "http://www.w3.org/1999/XSL/Format"> <fo:layout-master-set> <fo:simple -page-master master-name = "layout1" page-height = "4in" > Create simple page master (page template), which has five regions -header, body, footer, start and end <fo:region-body margin-top = "1in" margin-bottom = "1in" margin -left = "1.5in" margin-right = "1.5in" /> <fo:region-before extent = "1in" margin-top = "0.2in" margin-bottom = "0.2in" margin-left = "0.2in" margin-right = "0.2in" /> Define document body size Define document header </fo:simple-page-master> <fo:page-sequence-master master-name = "run"> <fo:repeatable-page-master-reference master-name = "layout1"/> </fo:page-sequence-master> Specify order in which master pages are created </fo:layout-master-set> <fo:page-sequence master-name = "run" > 42 31 32 33 34 35 36 37 38 39 40 41 42 43 <fo:static -content flow-name = "xsl-region-before"> Static text that appears on each document page’s header M.L.M.Campos & Paulo Pires Aplicações Baseadas em XML <fo:block font-size = "10pt" line-height = "12pt" font-family = "sans-serif"> Specify page <fo:page-number/> </fo:block> text font and size </fo:static-content> <fo:flow flow-name = "xsl-body"> Denote page content <fo:block font-size = "36pt" 44 45 46 47 48 font-family = "sans-serif" font-weight = "bold" space-after.optimum = "24pt" color = "blue" text-align = "center">Welcome! </fo:block> 49 50 51 <fo:block font-size = "12pt" font-family = "sans-serif" line-height = "14pt" space-after.optimum = "12pt" >Deitel & Associates, 52 53 54 55 Mark up 36 pt, sans-serif, bold, blue, centered text Inc. is an internationally recognized corporate training and publishing organization specializing in programming languages, Internet/World Wide Web technology and object technology education. 56 57 </fo:block> 58 <fo:block font-size = "12pt" 59 Mark up more text font-family = "sans-serif" line-height = "14pt" 60 M.L.M.Campos &space-after.optimum = "12pt" >Deitel & Associates, Paulo Pires Aplicações Baseadas em XML 61 Inc. is a member of the 62 <fo:inline -sequence font-weight = "bold" >World 63 Wide Web</fo:inline-sequence> 64 65 Consortium. </fo:block> Mark up more text 66 67 <fo:block font-size = "12pt" 68 font-family = "sans-serif" line-height = "14pt" 69 space-after.optimum = "12pt" >The company's 70 clients include some of the world& apos;s largest 71 computer companies, government agencies, branches 72 73 of the military and business organizations. </fo:block> 74 75 </fo:flow> 76 77 </fo:page-sequence> 78 79 </fo:root> DBC 43 Documento Resultante M.L.M.Campos & Paulo Pires DBC Aplicações Baseadas em XML 44
Documentos relacionados
XPath e XSLT - Marx Gomes Van der Linden
Não é baseada em XML Fácil incorporação em documentos XML Usada pela XSLT
Leia mais