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/Tr
ansform">
• Ou
• <xsl:transform version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Tr
ansform">
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 o
documento é um folha de estilos XSLT,
sua versão e o atributo namespace do
XSLT.
<?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>
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 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>
<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="/">
<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>
<?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>
<?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>
O elemento <xsl:value-of> extrai o
valor de um nó selecionado.
<xsl:for-each select="catalogo/cd">
<tr>
<td><xsl:value-of select="titulo"/></td>
<td><xsl:value-of select="artista"/></td>
</tr>
O valor do atributo select contém uma
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
expressão XPath. Ela funciona como a
navegação num sistema de arquivos
onde uma barra à frente (/) seleciona
subdiretórios.
Juntando xsl ao xml
• Abra o catalogo.xml e adcione:
<?xml version="1.0" encoding="ISO-88591"?>
<?xml-stylesheet type="text/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">
<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>
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']">
<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 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"/>
<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
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: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">
<tr>
<td><xsl:value-of select="titulo"/></td>
<xsl:choose>
<xsl:when test="preco &gt; 10">
<td bgcolor="FF000FF">
<xsl:value-of select="artista"/>
</td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artista"/></td>
</xsl:otherwise>
</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
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">
<tr>
<td><xsl:value-of select="titulo"/></td>
<xsl:choose>
<xsl:when test="preco &gt; 10">
<td bgcolor="#ff00ff">
<xsl:value-of select="artista"/>
</td>
</xsl:when>
<xsl:when test="preco &gt; 9 and preco &lt;= 10">
<td bgcolor="#CCCCCC">
<xsl:value-of select="artista"/>
</td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="artista"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
O código acima irá colorir o fundo
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
coluna artista de
rosa QUANDO (WHEN) o preço do cd for maior que
10 e irá colorir de cinza QUANDO (WHEN) o preço
do cd for maior que 9 e menor ou igual a 10.
O elemento <xsl:applytemplates>
• 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
match="cd">
<p>
<xsl:apply-templates
select="titulo" />
<xsl:apply-templates
select="artista" />
</p>
</xsl:template>
<xsl:template
match="titulo">
Titulo:
<span
style="color:#ff0000">
<xsl:value-of select="." />
</span>
<br />
</xsl:template>
<xsl:template
match="artista">
Artista:
<span
style="color:#00ff00">
<xsl:value-of select="." />
</span>
<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 SCRIPT
Usando 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)
{
function displayResult()
{
xml=loadXMLDoc("catalogo_cd.xml");
xsl=loadXMLDoc("catalogo.xsl");
// code for IE
if (window.ActiveXObject)
{
ex=xml.transformNode(xsl);
document.getElementById("exemplo").innerHTML=ex;
}
// code for Mozilla, Firefox, Opera, etc.
else if (document.implementation &&
xmlDoc=document.implementation.createDocument("","",nudocument.implementation.createDocument)
ll);
{
xsltProcessor=new XSLTProcessor();
}
xsltProcessor.importStylesheet(xsl);
else
resultDocument =
{
xsltProcessor.transformToFragment(xml,document);
alert('Your browser cannot handle this script');
}
xmlDoc.async=false;
xmlDoc.load(fname);
return(xmlDoc);
}
document.getElementById("exemplo").appendChild(result
Document);
}
}
</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/19718758
9/altxmol.zip
• Tutorial
http://www.altova.com/documents/XMLSpy
Tutorial.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.
Download

xsl:template