200 likes | 310 Views
Tecnologias XML. Extensible Stylesheet Language Transformation - XSLT. XSLT. XSL - Extensible Stylesheet Language Linguagem para transformação e formatação de um documento XML XSL deu origem a 3 normas: XPath que define um modo de navegação e localização da informação num documento XML.
E N D
Tecnologias XML Extensible Stylesheet Language Transformation - XSLT
XSLT • XSL - Extensible Stylesheet Language • Linguagem para transformação e formatação de um documento XML • XSL deu origem a 3 normas: • XPath que define um modo de navegação e localização da informação num documento XML. • XSL-FO ( Formating Objects) que especifica a formatação dos documentos. • XSLT (Transformation) que especifica transformações sobre um documento XML
XSLT • XSLT – Transformações sobre um documento XML ...
Referenciar uma folha de estilos XSLT num XML <?xml version="1.0" encoding="ISO-8859-1"?><?xml-stylesheet type="text/xsl" href="catalog.xsl"?><catalog> <book id="12"> <title>Discover Java</title> <Authors> <author>Ed Tittel</author> <author>Bill Brogden</author> </Authors> <publisher>IDG Books Worldwide</publisher> <ISBN>0-7645-8024-8</ISBN> <price>24.99</price> <pubdate>1997</pubdate> </book><book id="23">…</book></catalog> Documento catalog.xsl
Um processador XSLT trabalha sobre uma representação em árvore da estrutura hierárquica de um documento XML output
Exemplo de uma folha de estilos <?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="/catalog" > <books> <xsl:apply-templates select="book"/> </books> </xsl:template> <xsl:template match="book" > <title_publisher> <xsl:value-of select="title" /> , <xsl:value-of select="publisher" /> </title_publisher> </xsl:template> </xsl:stylesheet> catalog.xml output catalog.xsl
XSLT • Uma folha de estilo XSLT consiste numa série de templates que, conjuntamente com expressões baseadas em XPath, determinam como o processador vai aplicá-las aos nós do documento fonte. • Para cada template, o processador procura no documento o nó que verifica o padrão definido e aplica as acções definidas nesse template • Os templates são instanciados para todos os nós onde é efectuado o match
Análise da folha catalog.xsl • Os documentos XSLT são documentos XML <?xml version="1.0" encoding="ISO-8859-1"?> • A raíz do documento é o elemento xsl:stylesheet <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> • xsl:templateinicia um template com um atributo match que indica os nós a que deve ser aplicado. <xsl:template match="/catalog" > <books> <xsl:apply-templates select="book"/> </books> </xsl:template> Expressão XPath
Análise da folha catalog.xsl • O elemento xsl:apply-templates faz chamada aos outros templates <xsl:apply-templates select="book"/> <xsl:template match="book" > <title_publisher> <xsl:value-of select="title" /> , <xsl:value-of select="publisher" /> </title_publisher> </xsl:template> • Todo o texto que não faz parte do espaço de nomes xsl: fará parte do documento resultado. <title_publisher> … </title_publisher> • xsl:value-of extrai o texto de um nó seleccionado: <title> e <publisher> Extracção de dados do documento de entrada
Navegação na árvore - XPath • O XSLT usa expressões XPath para localizar nós na árvore do documento de entrada • Expressões XPath são usadas nos atributos select e match • Semelhante à navegação numa árvore de directórios • Caminhos absolutos e relativos • Um caminho absoluto começa sempre pelo carácter '/', caso contrário são caminhos relativos ao nó corrente /catalog/book/title - absoluto authors/author - relativo
Navegação na árvore - XPath • Selectores de nós: • Exemplos de selecções de nós
Navegação na árvore - XPath • Predicados (filtros) • Os predicados são filtros para refinar a pesquisa • Os predicados são escritos entre [ ] • Exemplos: /book[@id] - selecciona o nó book se tiver um atributo id /catalog/book[2] - selecciona o segundo nóbook • Funções Xpath number position() – devolve a posição do nó actual book[position()=1] number last() – devolve o índice do ultimo nó no conjunto de nós. book[last()] number count(node-set) – devolve o número de nós do conjunto de nós argumento <xsl:value-of select="count(authors/author)" />
Exemplo de transformação XML - HTML ... <xsl:template match="/catalog" > <html><head><title>XML to HTML </title></head><body> <xsl:apply-templates /> </body></html> </xsl:template> <xsl:template match="book" > <h3><b>Título: <xsl:value-of select="title" /> </b></h3> <h5>Editora: <xsl:value-of select="publisher" /> </h5> </xsl:template> Anotação e Texto para o documento de saida Elementos xsl para extrair informação exemplo catalogtohtml
Elementos XSLT • xsl:for-each define um template que vai ser aplicado a todos os nós seleccionados pela expressão do atributo select. <xsl:template match="/" > <html><body><table border="1"> <xsl:for-each select="catalog/book"> <tr><td> <xsl:value-of select="title" /> </td> <td><xsl:for-each select="authors/author"> <br><xsl:value-of select="." /></br> </xsl:for-each></td> <td> <xsl:value-of select="publisher" /></td> <td> <xsl:value-of select="ISBN" /></td> <td> <xsl:value-of select="price" /></td> <td> <xsl:value-of select="pubdate" /></td> </tr> </xsl:for-each> </table></body></html> </xsl:template> </xsl:stylesheet> resultado catalogfor.xsl
Elementos XSLT • xsl:sort • A ordenação é especificada com elementos xsl:sort como filhos de elementos xsl:apply-templates ou xsl:for-each • A chave de ordenação é especificada pelo atributo select • Pode ser especificada mais de uma chave de ordenação usando vários xsl:sort. <xsl:template match="/" > <html><body><h3>Lista de autores </h3> <xsl:for-each select="catalog/book/authors/author"> <xsl:sort data-type="text" order="ascending" /> <br><xsl:value-of select="." /></br> </xsl:for-each> </body></html> </xsl:template> catalogsort.xsl resultado
Elementos XSLT • xsl:if <xsl:if test=" not(position()=last())" >… <xsl:if test=“ price < < 20 “ >… • Instrução condicional • O atributo test define a expressão a avaliar • Não tem else • xsl:choose (switch) <xsl:choose> <xsl:when test = boolean-expression> … </xsl:when> <xsl:otherwise>… </xsl:otherwise> </xsl:choose> exemplo catalogif.xsl exemplo catalogchoose.xsl
Elementos XSLT • xsl:element • insere elementos na árvore resultado da transformação • O nome do elemento é definido pelo atributo name • xsl:attribute • Insere atributos. O nome do atributo é definido pelo atributoname. • O valor do atributo é determinado pelo conteúdo do template <xsl:template match="/catalog" > <xsl:element name="books"> <xsl:apply-templates select="book"/> </xsl:element> </xsl:template> exemplo catalogelement.xsl
Elementos XSLT • xsl:copy • elemento para criar uma cópia do nó corrente • não copia atributos, nem filhos • xsl:copy-of • copia tudo o que for seleccionado pelo atributo select <xsl:template match="book"> <xsl:copy-of select="."> </xsl:copy-of> exemplo catalogcopy.xsl
Templates por omissão • Quando não existe nenhum template são aplicados templates por omissão. • Template por omissão para nós elemento e raíz: • Template por omissão para nós texto e atributo: <xsl:template match="*|/"> <xsl:apply-templates/> </xsl:template> <xsl:template match="text()|@*"> <xsl:value-of select="."/> </xsl:template> exemplo minimal.xsl
Nova estrutura XML • Criar um novo documento xml com outra estrutura <xsl:template match="/" > <autores> <xsl:apply-templates select="//author" > <xsl:sort select="." /> </xsl:apply-templates> </autores> </xsl:template> <xsl:template match="author" > <xsl:element name="autor"> <xsl:element name="nome"> <xsl:value-of select="." /> </xsl:element> <xsl:element name="obra"> <xsl:attribute name="ISBN" > <xsl:value-of select="../../ISBN" /> </xsl:attribute> <xsl:value-of select="../../title" /> </xsl:element></xsl:element> </xsl:template>... exemplo novaestrutura.xsl