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&gt;‘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&gt;'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 &amp; 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
&amp;
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&apos;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

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