Upload
internet
View
111
Download
1
Embed Size (px)
Citation preview
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
D ocum en to deen trada
X S LT P rocesso rD ocum en to de
sa ída
X S LTtem p la tes
X S LT s ty leshee t
X M L
P D F
X H T M L
X M L
...
<?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>
Referenciar uma folha de estilos XSLT num XML
Documento
catalog.xsl
output
Root (/)
<?xml-stylesheettype="text/xsl" href="temp.xsl"?> <catalog>
<book>
id=”12"<title> <Authors> <publisher> <ISBN> <price> <pubdate>
<author>Discover Java
Ed TittelIDG Books Worldwide
<author>
Bill Brogden
0-7645-8024-8
24.99 1997
<book>
...
Um processador XSLT trabalha sobre uma representação em árvore da estrutura hierárquica de um documento XML
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 catalog.xsloutput
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 aplica-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:template inicia 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
/ - representa a raiz ou uma relação pai/filho
. - representa o nó corrente
.. - representa o nó pai do nó corrente
@ - modo de aceder a atributos @nomedoatributo
* - representa qualquer nó
// - todos os nós descendentes de um nó ou no principio de um caminho todos os descendentes da raiz
../../title selecciona o elemento title do pai do pai do nó corrente
//author
selecciona todos os nós author independentemente da sua posição na árvore
@* selecciona todos os atributos no contexto actual.
/catalog/book/@id seleciona o atributo id do nó book, filho de catalog debaixo da raiz.
./author selecciona todos os nós author filhos do nó corrente
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
Anotação e Texto para o documento de saida
...
<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>
Elementos xsl para extrair informação
catalogtohtmlexemplo
Elementos XSLT xsl:for-eachdefine 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>
catalogfor.xslresultado
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.xslresultado
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
atributo name. 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
exemplo catalogcopy.xsl
<xsl:template match="book">
<xsl:copy-of select=".">
</xsl:copy-of>
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>...
autores
obra
nome
autor
autor...
“isbn”
novaestrutura.xsl
exemplo