XSLT Padrão para Xtensible Stylesheet Language, e é uma linguagem de folha de estilos para...

Post on 07-Apr-2016

217 views 0 download

Transcript of XSLT Padrão para Xtensible Stylesheet Language, e é uma linguagem de folha de estilos para...

XSLT

Padrão para Xtensible Stylesheet Language, e é uma linguagem de folha

de estilos para dcoumentos XML

XSL = Style Sheets for XML

• XSL descreve como um documento XML deve ser exibido.

• XSL é mais que uma folha de estilo:– XSL é uma linguagem para transformar

documentos XML– XPATH uma linguagem que permite navegar

entre documentos XML– XSL-FO, uma linguagem para formatar

documentos XML.

XSLT

• XSLT é uma linguagem para transformar documentos XML em documentos HTML ou para outros documentos XML.

• XSLT é a parte mais importante da XSL.• XSLT é uma recomendação da W3C.

XSLT = XSL Transformations

• XSLT é a mais importante parte da XSL.• XSLT é utilizada para transformar um

documento XML em outro documento XML ou em outro tipo de documento que possa ser reconhecido por um navegador, como HMTL ou XHTML.

• Normalmente isso é realizado pela transformação de cada elemento XML em um elemento (X)HTML.

XSLT usa XPATH

• XSLT utiliza XPATH para encontrar informações em um documento XML.

• XPATH é utilizado para navegar através dos elementos e atributos XML.

• No processo de transformação XSLT usa XPATH para encontrar dados pré definidos em um template.

NAVEGADORES XSLT

• Mozilla Firefox • Internet Explorer 6 • Google Chrome• Opera• Apple Safari

XSLT - Transformação

• Declaração de estilo, de acordo com a recomendação W3C XSLT.

• <xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

• Ou• <xsl:transform version="1.0"

xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

Exemplo

• Crie um xml para catalogar coleções de uma loja de CD, com os elementos catalogo (raiz), cd, titulo, artista, país, gravadora, preço, ano.

• Insira pelo menos 5 artistas e seus dados.• Salve como catalogo_cd.xml• Teste seu novo xml.

<?xml version="1.0" encoding="ISO-8859-1"?><catalogo>

<cd><titulo> </titulo><artista> </artista><pais> </pais><gravadora> </gravadora><preco> </preco><ano> </ano></cd><cd>

..........</cd>

</catalogo>Exemplo em www.ezmail.com.br/xml/catalogo.zip

<?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>Minha coleção</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html></xsl:template></xsl:stylesheet>

Salve como catalogo.xsl

O elemento <xsl:template>O elemento <xsl:stylesheet> define que odocumento é um folha de estilos XSLT,sua versão e o atributo namespace doXSLT.<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0"<xsl:stylesheet version="1.0"xmlns:xsl="http://www.w3.org/1999/XSL/Transform">xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/"> <html> <body> <h2>Minha coleção</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html></xsl:template></xsl:stylesheet>

O elemento <xsl:template>• Um folha de estilos XSL consiste em um ou mais conjunto

de regras que são chamados de TEMPLATES.• Um template contem regras a serem aplicados quando um

nó especificado é encontrado.• O elemento <xsl:template> é utilizado para construir um

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 <xsl:template match="/"> <html> <body> <h2>Minha coleção</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html></xsl:template></xsl:stylesheet>

<xsl:template match="/">

• O elemento <xsl:template define um template e match=“/” associa o atributo ao template com a raiz da fonte XML.

• O conteúdo dentro do atributo<?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="/"> match="/"> <html> <body> <h2>Minha coleção</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html></xsl:template></xsl:stylesheet>

<?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><html> <body><body> <h2>Minha coleção</h2><h2>Minha coleção</h2> <table border="1"><table border="1"> <tr bgcolor="#9acd32"><tr bgcolor="#9acd32"> <th>Titulo</th><th>Titulo</th> <th>Artista</th><th>Artista</th> </tr></tr> <tr> <td>.</td> <td>.</td> </tr> </table> </body> </html></xsl:template></xsl:stylesheet>

<?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>Minha coleção de CDs</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr> <xsl:for-each select="catalogo/cd"><xsl:for-each select="catalogo/cd"> <tr><tr> <td><xsl:value-of select="titulo"/></td><td><xsl:value-of select="titulo"/></td> <td><xsl:value-of select="artista"/></td><td><xsl:value-of select="artista"/></td> </tr></tr> </xsl:for-each></xsl:for-each> </table> </body> </html></xsl:template></xsl:stylesheet>

O elemento <xsl:value-of> extrai o O elemento <xsl:value-of> extrai o valor de um nó selecionado. valor de um nó selecionado.

O valor do atributo select contém uma O valor do atributo select contém uma expressão XPath. Ela funciona como a expressão XPath. Ela funciona como a navegação num sistema de arquivos navegação num sistema de arquivos onde uma barra à frente (/) seleciona onde uma barra à frente (/) seleciona subdiretórios. subdiretórios.

Juntando xsl ao xml

• Abra o catalogo.xml e adcione:<?xml version="1.0" encoding="ISO-8859-

1"?>

<?xml-stylesheet type="text/xsl" <?xml-stylesheet type="text/xsl" href="catalogo.xsl"?> href="catalogo.xsl"?>

<catalogo> Salve e verifique a modificação

XSL = Style Sheets for XML

• Recordando• XSL descreve como um documento XML deve

ser exibido.• XSL é mais que uma folha de estilo:

– XSL é uma linguagem para transformar documentos XML

– XPATH uma linguagem que permite navegar entre documentos XML

– XSL-FO, uma linguagem para formatar documentos XML.

O elemento <xsl:for-each>• elemento XSL <xsl:for-each> pode ser

usado para selecionar todo elemento XML de um conjunto de nós específico.

• Funciona como o laço for de uma linguagem de programação.

<?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>Minha coleção de CDs</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr>

<xsl:for-each select="catalogo/cd"><xsl:for-each select="catalogo/cd"> <tr><tr> <td><xsl:value-of select="titulo"/></td><td><xsl:value-of select="titulo"/></td> <td><xsl:value-of select="artista"/></td><td><xsl:value-of select="artista"/></td> </tr></tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

Filtrando a saída• Nós podemos filtrar a saída de um arquivo XML

adicionando um critério ao atributo select de um elemento <xsl:for-each>.

• <xsl:for-each select="catalog/cd[artist='Bob Dylan']">

• Operadores de filtragem válidos são: • = (igual) • != (diferente) • &lt; (menor que) • &gt; (maior que)

Exemplo<?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>Minha coleção de CD</h2> <table border="1"> <tr> <th>Titulo</th> <th>Artista</th> </tr>

<xsl:for-each select="catalogo/cd[artista='Bob Dylan']"><xsl:for-each select="catalogo/cd[artista='Bob Dylan']"> <tr><tr> <td><xsl:value-of select="titulo"/></td><td><xsl:value-of select="titulo"/></td> <td><xsl:value-of select="artista"/></td><td><xsl:value-of select="artista"/></td> </tr></tr> </xsl:for-each></xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

O elemento <xsl:sort>

• O elemento <xsl:sort> é usado para ordenar o resultado.

• Onde colocar a Informação de Ordenação ?• Para gerar um arquivo XML como um

arquivo XHTML, e ordená-lo ao mesmo tempo, simplesmente adicione um elemento sort dentro de um elemento for-each no seu arquivo 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> <body> <h2>Minha coleção CDs</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr> <xsl:for-each select="catalogo/cd">

<xsl:sort select="artista"/><xsl:sort select="artista"/> <tr> <td><xsl:value-of select="titulo"/></td> <td><xsl:value-of select="artista"/></td> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

O atributo select indica qual O atributo select indica qual elemento XML a ordenar. elemento XML a ordenar.

O elemento <xsl:if>• O elemento <xsl:if> contém um padrão que só será

aplicado se uma condição específica for verdadeira. • Onde colocar a condição IF• Para colocar um teste condicional frente ao conteúdo de

um arquivo, simplesmente adicione um elemento <xsl:if> no documento XSL como abaixo:

• <xsl:if test="preco &gt; 10"> alguma saida... </xsl:if> • O valor do atributo obrigatório test da expressão a ser

avaliada.

<?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>Minha coleção de CD</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr>

<xsl:for-each select="catalogo/cd"><xsl:for-each select="catalogo/cd"> <xsl:if test="preco &gt; 10"><xsl:if test="preco &gt; 10"> <tr> <td><xsl:value-of select="titulo"/></td> <td><xsl:value-of select="artista"/></td> </tr> </xsl:if> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

O elemento <xsl:choose>• O elemento <xsl:choose> é usado em conjunto

com <xsl:when> e <xsl:otherwise> para expressar múltiplos testes condicionais.

• Onde colocar a condição Choose:• Para inserir o teste condicional choose frente ao

conteúdo de um arquivo XML, simplesmente adicione os elementos <xsl:choose>, <xsl:when> e <xsl:otherwise> no seu arquivo XSL como abaixo:

• <xsl:choose> <xsl:when test="price &gt; 10"> ...algum código... </xsl:when> <xsl:otherwise> ...algum código... </xsl:otherwise> </xsl:choose>

<?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>Minha coleção de CDs</h2> <table border="1"> <tr bgcolor="#9acd32"> <th>Titulo</th> <th>Artista</th> </tr>

<xsl:for-each select="catalogo/cd"><xsl:for-each select="catalogo/cd"> <tr><tr> <td><xsl:value-of select="titulo"/></td><td><xsl:value-of select="titulo"/></td> <xsl:choose><xsl:choose> <xsl:when test="preco &gt; 10"><xsl:when test="preco &gt; 10"> <td bgcolor="FF000FF"><td bgcolor="FF000FF"> <xsl:value-of select="artista"/><xsl:value-of select="artista"/> </td></td> </xsl:when></xsl:when> <xsl:otherwise><xsl:otherwise> <td><xsl:value-of select="artista"/></td><td><xsl:value-of select="artista"/></td> </xsl:otherwise></xsl:otherwise> </xsl:choose></xsl:choose> </tr> </xsl:for-each> </table> </body> </html> </xsl:template> </xsl:stylesheet>

O código irá colorir o fundo da coluna artista de rosa O código irá colorir o fundo da coluna artista de rosa QUANDO (WHEN) o preço do cd for maior que 10. QUANDO (WHEN) o preço do cd for maior que 10.

• <?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>Minha Coleção de CD</h2>• <table border="1">• <tr bgcolor="#9acd32">• <th>Titulo</th>• <th>Artista</th>• </tr>

• <xsl:for-each select="catalogo/cd"><xsl:for-each select="catalogo/cd">• <tr><tr>• <td><xsl:value-of select="titulo"/></td><td><xsl:value-of select="titulo"/></td>• <xsl:choose><xsl:choose>• <xsl:when test="preco &gt; 10"><xsl:when test="preco &gt; 10">• <td bgcolor="#ff00ff"><td bgcolor="#ff00ff">• <xsl:value-of select="artista"/><xsl:value-of select="artista"/>• </td></td>• </xsl:when></xsl:when>• <xsl:when test="preco &gt; 9 and preco &lt;= 10"><xsl:when test="preco &gt; 9 and preco &lt;= 10">• <td bgcolor="#CCCCCC"><td bgcolor="#CCCCCC">• <xsl:value-of select="artista"/><xsl:value-of select="artista"/>• </td></td>• </xsl:when></xsl:when>• <xsl:otherwise><xsl:otherwise>• <td><xsl:value-of select="artista"/></td><td><xsl:value-of select="artista"/></td>• </xsl:otherwise></xsl:otherwise>• </xsl:choose></xsl:choose>• </tr></tr>• </xsl:for-each>• </table>• </body>• </html>• </xsl:template>• </xsl:stylesheet>

O código acima irá colorir o fundo coluna artista de O código acima irá colorir o fundo coluna artista de rosa QUANDO (WHEN) o preço do cd for maior que rosa QUANDO (WHEN) o preço do cd for maior que 10 e irá colorir de cinza QUANDO (WHEN) o preço 10 e irá colorir de cinza QUANDO (WHEN) o preço do cd for maior que 9 e menor ou igual a 10. do cd for maior que 9 e menor ou igual a 10.

O elemento <xsl:apply-templates>

• O elemento <xsl:apply-templates> aplica uma regra de molde ao elemento corrente ou aos nós filhos do elemento corrente.

• Se nós adicionarmos um atributo de seleção ao elemento <xsl:apply-templates> ele irá processar somente o elemento filho que combinar com o valor do atributo. Nós podemos usar o atributo de seleção para especificar a ordem na qual os nós filhos são processados.

<?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>Minha coleção de CD</h2> <xsl:apply-templates /> </body> </html>

</xsl:template></xsl:template> <xsl:template <xsl:template match="cd">match="cd"> <p><p> <xsl:apply-templates <xsl:apply-templates select="titulo" /> select="titulo" /> <xsl:apply-templates <xsl:apply-templates select="artista" /> select="artista" /> </p></p> </xsl:template></xsl:template> <xsl:template <xsl:template match="titulo">match="titulo"> Titulo: Titulo: <span<span

style="color:#ff0000">style="color:#ff0000"> <xsl:value-of select="." /> <xsl:value-of select="." /> </span></span> <br /> <br /> </xsl:template></xsl:template> <xsl:template <xsl:template match="artista">match="artista"> Artista: Artista: <span <span style="color:#00ff00">style="color:#00ff00"> <xsl:value-of select="." /> <xsl:value-of select="." /> </span></span> <br /> <br /> </xsl:template></xsl:stylesheet>

XSLT - No Cliente• Se o seu browser suporta XSLT, este pode ser usado

para transformar o documento em XHTML no seu browser.

• Anteriormente foi explicado como o XSLT pode ser usado para transformar um documento de XML para XHTML. Nós adicionamos uma folha de estilos XSL ao arquivo XML e deixamos o browser fazer a transformação.

• Mesmo que isso funcione bem, nem sempre é desejável incluir uma referência a uma folha de estilos no arquivo XML (isto é, não funcionará num browser que não reconhece XSLT.)

• Uma solução mais versátil seria usar um JavaScript para fazer a transformação XML em XHTML.

O JAVA SCRIPTUsando JavaScript nós podemos: • fazer testes para browsers específicos • usar diferentes folhas de estilos de acordo com o

browser e com as necessidades do usuário Essa é a beleza do XSLT. Um dos objetivos desenhados

para o XSLT era o de tornar possível transformar dados de um formato para outro, suportando browsers diferentes e necessidades de usuários diferentes.

A transformação XSLT do lado do cliente está para ser uma das maiores tarefas para os browsers no futuro, como nós veremos um crescimento no mercado de browsers especializados (Braille, browsers para deficientes auditivos, impressoras web, dispositivos handhelds, etc.)

Exemplo

• www.ezmail.com.br/xml/java.zip

• <head>• <script>• function loadXMLDoc(fname)• {• var xmlDoc;• // code for IE• if (window.ActiveXObject)• {• xmlDoc=new ActiveXObject("Microsoft.XMLDOM");• }• // code for Mozilla, Firefox, Opera, etc.• else if (document.implementation &&

document.implementation.createDocument)• {• xmlDoc=document.implementation.createDocument("","",null);• }• else• {• alert('Your browser cannot handle this script');• }• xmlDoc.async=false;• xmlDoc.load(fname);• return(xmlDoc);• }

function displayResult(){xml=loadXMLDoc("catalogo_cd.xml");xsl=loadXMLDoc("catalogo.xsl");// code for IEif (window.ActiveXObject) { ex=xml.transformNode(xsl); document.getElementById("exemplo").innerHTML=ex; }// code for Mozilla, Firefox, Opera, etc.else if (document.implementation && document.implementation.createDocument) { xsltProcessor=new XSLTProcessor(); xsltProcessor.importStylesheet(xsl); resultDocument = xsltProcessor.transformToFragment(xml,document); document.getElementById("exemplo").appendChild(resultDocument); }}</script></head><body onload="displayResult()"><div id="exemplo" /></body></html>

XSLT - No Servidor• Como nem todos os browsers suportam XSLT, uma solução é

transformar o XML em XHTML no servidor. • Para fazer os dados XML disponíveis para todo tipo de browser,

nós temos que transformar o documento XML no SERVIDOR e enviá-lo como XHTML puro para o BROWSER.

• Essa é uma outra beleza do XSLT. Um dos objetivos desenhados para o XSLT era o de tornar possível transformar dados de um formato para outro em um servidor, retornando dados legíveis para todos os tipos de browsers futuros.

• A transformação XSLT no servidor está para ser uma das maiores tarefas do Servidor de Informações de Internet (Internet Information Server) no futuro, assim como veremos um crescimento no mercado de browsers especializados (Braille, browsers para deficientes auditivos, impressoras web, dispositivos handheld, etc.)

Editor XML

• http://rs474.rapidshare.com/files/197187589/altxmol.zip

• Tutorial http://www.altova.com/documents/XMLSpyTutorial.pdf

• Slide da aula: • www.ezmail.com.br/xml/xls.zip

Próxima aula

• Revisão do conteúdo HTML/XML• Avaliação em 05/10/2009• Conteudo :• Avaliação conceitual de

XML/DTD/CSS/XSL• 10 QUESTÕES DE MULTIPLA

ESCOLHA.

Exercicio

• Crie uma página em html que exiba uma opção para o usuário selecionar o tipo de dados que deseja ver

• 1 – Artistas por nome em ordem alfabética• 2 – Cd em ordem alfabética.• 3 – Que exiba todo o conteúdo do xml em

tabelas.• Entregue no final da aula.