Post on 07-Apr-2016
1
XSL - eXtensible Stylesheet Language
2
XSL - Motivação Vantagens de separar apresentação de
conteúdo: Múltiplos formatos de saída: tamanhos diferentes,
mídias diferentes (papel, online), dispositivos diferentes (PDA, celular, PC)
Interface voltada para usuário (ex.: acessabilidade), cores, fontes, etc.
Uso de estilos padrões Liberdade do autor não se preocupar com
apresentação, que será tratada depois por um profissional.
3
Opções para mostrar XML
4
O que faz uma folha de estilo? Especifica a apresentação de XML
em duas categorias: Uma transformação opcional do
documento de entrada em outra estrutura
Uma descrição de como apresentar a informação transformada
5
O que faz um folha de estilo? geração de texto supressão de conteúdo mover texto duplicar texto ordenação transformações mais complexas
que computam nova informação baseada na informação existente.
6
Revisão de CSS CSS - Cascade Style Sheet Define o estilo de um documento
para apresentação Pode ser inline ou externa ao
documento Precedência de estilos:
Autor > Usuário > Web Browser
7
External Style Sheets
External Style SheetsContidas num arquivo.css Único style sheet usado por múltiplas páginasUsado com o elemento link
8
Exemplo de um CSS/* styles.css *//* An external stylesheet */a { text-decoration: underline; color: red; background-color: #ccffcc }
li em { color: red; font-weight: bold}
ul { margin-left: 2cm }
<html><!-- Linking external style sheets --><head><title>Exemplo de CSS</title><link rel = "stylesheet" type = "text/css”
href = "styles.css"></head>
9
XSL - Princípios gerais
Como CSS, funcionamento a base de regras
CSS não modifica a estrutura de um documento, XSL sim
XSL utiliza a sintaxe XML
10
XSL - Histórico
XML derivada de SGMLPadronizada pelo W3CXSL derivada de DSSSL (Document Style Semantics and Specification Language)Primeira proposta formal em 1997 pela W3C (já continha conceitos de XSLT, como uso de templates)Novembro de 1999 XSLT tornou-se uma recomendação da W3CÚltima versão de XSL: Outubro de 2001 (incluindo XSL-FO)
11
Componentes de XSL
XSL consiste logicamente de 3 componentes:
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
XSL-FO: uma descrição de um conjunto de Formatting Objects e Formatting Properties
12
XSLT - Características
Linguagem declarativaDescreve 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
Uso de XSL Namespaces - O W3C provê um namespace para tags XSL
13
XSLT - Características
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
14
XSLT - Estrutura de uma folha XSL
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
15
XSLT - CaracterísticasElemento raiz de um documento XSL é <xsl:stylesheet> ou <xsl:transform>
<xsl:stylesheet version=“1.0” xmlns:xsl=http://www.w3.org/1999/XSL/Transform>
<?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>
Documento XSL: Cabeçalho XML + <xsl:stylesheet> ou <xsl:transform> + Conjunto de regras de template
16
XSLT - Características
O corpo das regras de template é constituído por:Expressões XPathElementos XSLTFunçõ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
17
<?xml version=“1.0” encoding=“iso-8859-1”?><saudacao>Bem-vindo a Maceió!</saudacao>
Saudacao.xml
<html><head>
<title>Saudação de Hoje</title></head><body>
<p>Bem-vindo a Maceió!</p></body></html>
Saudacao.html
18
<?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>
Saudacao.xsl
Linha de comando para transformar Saudacao.xml em Saudacao.html via Saudacao.xsl:C:>saxon Saudacao.xml Saudacao.xsl > Saudacao.html
19
<?xml version=“1.0” encoding=“iso-8859-1”?><?xml-stylesheet type=“text/xsl” href=“saudacao.xsl”?><saudacao>Bem-vindo a Maceió!</saudacao>
Saudacao.xml
Inclusão de uma referência ao arquivo xsl no próprio arquivo xml:
20
Exemplo 2Stylesheet que transforma elementos <para> e <emphasis>
para HTML:<?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>
21
Exemplo 2(cont)
Com a stylesheet anterior, o documento XML:<?xml version='1.0'?><para>Isto é um <emphasis>teste</emphasis>.</para>
seria transformado em:<?xml version="1.0" encoding="utf-8"?><p>Isto é um <i>teste</i>.</p>
22
Exemplo 3:<capitulo titulo = introducao>
Texto do capitulo
</capitulo>
<xsl:template match=“capitulo”>
<H1> <xsl:value-of select=“./@titulo”> </H1>
<xsl:apply-templates/>
</xsl:template>
<xsl:template match=“text()”>
<xsl:value-of select=“.”/>
</xsl:template>
<H1> Introducao </H1>
Texto do capitulo
XML
XSL
HTML
23
Templates
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
Elementos XSLT vêm do XSL namespace
24
XSLT – Expressões XPath XPath é usado para endereçar (select) partes de
documentos XML usando path expressions Uma path expression é uma sequência de passos
separados por “/” Análogo a nomes de arquivos numa hierarquia
de diretórios Resultado de uma path expression: um conjunto de
valores que juntamente com seus elementos/atributos casam com o path especificado
Ex. /banco-2/cliente/nomeCliente :<nomeCliente>José</nomeCliente><nomeCliente>Maria</nomeCliente>
Ex2 /banco-2/cliente/nomeCliente/text( )retorna os mesmos nomes,
mas sem as tags envolventes.
25
XSLT – Expressões XPath O “/” inicial denota a raiz do documento
(acima da tag do topo ) Path expressions são avaliadas da esquerda
para direita Predicados de seleção podem seguir
qualquer passo num path, usando [ ] Ex. /banco-2/conta[saldo > 400]
retorna elementos de conta com saldo > 400 /banco-2/conta[saldo] retorna elementos
conta contendo um sub-elemento saldo Atributos são acessados usando “@”
Ex /banco-2/conta[saldo > 400]/@numero retorna os números das contas com saldo>400
26
XSLT – Funções XPath XPath provê várias funções A função count() no final de um path
conta o número de elementos no conjunto gerado pelo path.
Ex /banco-2/conta[cliente/count() > 2] Retorna contas com > 2 clientes
Conectores Booleanos and e or e a função not() podem ser usados em predicados
IDREFs podem ser referenciados usando a função id()
E.g. /banco-2/conta/id(@proprietarios) retorna todos clientes referenciados pelo
atributo proprietarios do elemento conta.
27
Xpath - Exemplo de patterns (1)
para associa todos filhos <para> no contexto corrente
para/emphasis associa com todos elementos <emphasis> que têm um pai <para>
/ associa com a raiz do documento
para//emphasis associa com todos elementos <emphasis> que têm um ancestral <para>
section/para[1] associa o primeiro filho <para> de todos os filhos <section> no contexto corrente
//title associa todos elementos <title> em qualquer lugar no documento
.//title associa todos elementos <title> que são descendentes do contexto corrente
28
XPath- Exemplo de patterns (2)
section/*/note associa elementos <note> que tenham <section> como avós.
stockquote[@symbol] associa elementos <stockquote> que têm um atributo "symbol"
stockquote[@symbol="XXXX"] associa elementos <stockquote> que têm um atributo "symbol" com valor "XXXX"
emphasis|strong associa elementos <emphasis> ou <strong>
29
XSLT - Elementos
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
Nem todos os elementos XSLT estão disponíveis para todos os processadores XSLT
Forma:<xsl: element_name>
30
XSLT - Elementos
<?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>
Exemplo Base de XML:
31
XSLT - Elementos
<xsl:template>Contém regras que serão aplicadas a um nó específicoPossui 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çãoPossui o atributo “select”, que contém uma expressão Xpath que calcula o valor a ser adicionado ao documento resultado
32
<?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>
33
Resultado
34
XSLT - Elementos
<xsl:for-each>Permite a construção de loopsPossui 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ídaPossui o atributo “select”, que indica qual elemento XML ordenarPossui o atributo “order”, que indica o tipo da ordenação: ascending ou descending.
35
<?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>
36
Resultado
37
XSLT - Elementos
<xsl:if>Aplica um conteúdo apenas se uma condição especificada for verdadeiraPossui o atributo “test”, que contém a expressão a ser avaliada
<xsl:if test=“price>‘10’>conteúdo ...
</xsl:if>
38
<?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>'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>
39
XSLT - Elementos
40
XSLT - Elementos<xsl:attribute>
É usado para adicionar atributos aos elementos
<picture><xsl:attribute name=“source”/>
<picture>
<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>
<xsl:element> cria um elemento (node) na saída
41
XSLT - Elementos
<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)
42
<?xml version = "1.0"?><!-- Banco de Dados Esporte --><esportes> <jogo titulo = "cricket">
<id>243</id> <para> Mais popular na Inglaterra </para>
</jogo> <jogo titulo = ”baseball">
<id>431</id> <para> Mais popular nos EUA </para>
</jogo> <jogo titulo = ”futebol">
<id>123</id> <para> Mais popular no Brasil </para>
</jogo></esportes>
Exemplo: Seja o DB XML:
43
match elemento esportes e aplica os templates aos nodes
filhos esportes
<?xml version = "1.0"?><!-- Usando xsl:element e xsl:attribute --><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 = ”esportes"> <esportes> <xsl:apply-templates/> </esportes> </xsl:template> <xsl:template match = ”jogo"> <xsl:element name = "{@titulo}"> <xsl:attribute name = "id">
<xsl:value-of select = "id"/> </xsl:attribute> <comment>
<xsl:value-of select = "para"/> </comment>
</xsl:element> </xsl:template></xsl:stylesheet>
Use o atributo match para selecionar a raiz do documento XML
Cria elemento titulo
Cria atributo id para elemento titulo
Cria comentário com o conteúdo do elemento
para
Exemplo (cont): XSL
44
<?xml version = "1.0" ?><esportes> <cricket id = "243">
<comment> Mais popular na Inglaterra</comment>
</cricket> <baseball id = "432">
<comment> Mais popular nos EUA</comment>
</baseball> <futebol id = ”123">
<comment> Mais popular no Brasil</comment>
</futebol></esportes>
Resultado produzido
45
XSLT - Elementos <xsl:param>
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
46
<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> 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
XSLT - Elementos
47
XSLT - Elementos<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>
48
XSLT - Elementos <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>
49
XSLT - Funções 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: 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>
50
XSLT - Funções 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>>
51
XSLT - Funções current()
Retorna o nó corrente
document() Retorna o nó raiz de um documento XML externo document(uri) => nó<<document(‘data.xml’)>>
52
XSLT - Funções 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’)>>
53
XSLT - Funções count(arg1)
retorna o número de nodes presentes no conjunto de nós passados como argumento
sum(arg1) 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
54
XSLT - Exemplo Completo (Doc1 – Documento Origem 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="UK" 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>
55
<?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 (Doc1 – Documento Resultado XML)
56
<?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>
XSLT - Exemplo Completo (Documento XSLT para conversão Doc1 => Doc2)
57
XSL: Extensible Stylesheet Language Formatting Objects Formatting objects
Usado para formatar documentos XML para apresentação
Tipicamente usado quando o resultado da transformção é para mídia impressa
livros, revistas, encartes, etc. FOP
Ferramenta em Java da Apache Transforma documentos XSL que contêm
formatting objects Download em xml.apache.org/fop
58
XSLFO Exemplos de ferramentas
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
59
Exemplos de XSLT para Aplicação de Banco
<xsl:template match=“/banco2/cliente”> <cliente> <xsl:value-of select=“nomeCliente”/> </cliente>
</xsl:template> <xsl:template match=“*”/>
Produz o resultado: <cliente> José </cliente> <cliente> Maria </cliente>
60
Exercício 5Supondo que existem cadastrados os clientes Ana e Mauro, qual seria a saída produzida pelo XSLT :<xsl:template match=“/banco”>
<clientes> <xsl:template apply-templates/>
</clientes > </xsl:template>
<xsl:template match=“/cliente”> <cliente>
<xsl:value-of select=“nomeCliente”/> </cliente>
</xsl:template> <xsl:template match=“*”/>
61
Exercício 5Resposta:<clientes> <cliente> Ana </cliente> <cliente> Mauro </cliente></clientes>
62
Consulta a dados semi-estruturados
63
Requisitos desejáveis (Maier ’98) Expressividade
linguagem de consulta ao estilo SQL possibilitar a restruturação de dados semi-estruturados
Semântica precisa muito importante para XML
Composição o resultado de uma consulta deve poder ser
utilizado dentro de uma outra consulta Consulta ao esquema
visando otimização Facilitar a geração automática de consultas
Consulta
64
Expressões de caminho (Path expressions)
Expressões que permitem navegar no grafo de dados
Expressões de caminho simples sequências de labels exemplos
root.pessoas {&p1,&p2,&p3}root.pessoas.filhos {&p2,&p3}
semântica o resultado de uma expressão de caminho r.l1. … .ln,
onde l1,…,ln são os labels e r um objeto, é o conjunto de nodos do grafo acessíveis de r por um caminho do grafo tal que os arcos percorridos passam sucessivamente pelos labels l1,…,ln.
65
Expressões de caminho Expressões de caminho generalizadas Idéia: além de especificar completamente um caminho,
permite exprimir restrições (constraints) sobre o caminho
Utilização de expressões regulares Exemplos
_ é um caracter coringa que designa um label qualquer
(pessoa|estudante)._.idade As expressões de caminho definidas até o presente
retornam os conjuntos de objetos e não de dados semi-estruturados
Consulta
66
Linguagem de Consulta
X-Query
67
XQuery Baseda em Quilt
(que é baseda em XML-QL) http://www.w3.org/TR/xquery/
2/2001 XML Query data model
68
FLWR (“Flower”) ExpressionsFOR ... LET... WHERE...RETURN...
69
XQueryEncontre os títulos dos livros
publicados após 1995:FOR $x IN document("bib.xml")/bib/book
WHERE $x/year > 1995
RETURN $x/titleResultado: <title> abc </title> <title> def </title> <title> ghi </title>
70
XQueryPara cada autor de um livro publicado pela
Morgan Kaufmann, listar os livros publicados:FOR $a IN distinct(document("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)
RETURN <result>
$a,
FOR $t IN /bib/book[author=$a]/title
RETURN $t
</result>
distinct = elimina duplicatas
71
XQueryResultado: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result>
72
XQuery FOR $x in expr -- liga $x a cada
valor na lista expr
LET $x = expr -- liga $x à inteira lista expr Usado para subexpressões comuns e
para agregações
73
XQuery
count = função (aggregate) que retorna o número de elementos
<big_publishers> FOR $p IN distinct(document("bib.xml")//publisher) LET $b := document("bib.xml")/book[publisher = $p] WHERE count($b) > 100 RETURN $p </big_publishers>
74
XQueryEncontre os livros cujos preços são
maiores do que a média de preços:FOR $b in document("bib.xml")/bib/book
LET $a=avg(document("bib.xml")/bib/book/price)
WHERE $b/price > $a
RETURN $b
75
XQuerySumário: FOR-LET-WHERE-RETURN = FLWR
FOR/LET Clauses
WHERE Clause
RETURN Clause
Lista de tuplas
Lista de tuplas
Instância do modelo de dados Xquery
76
FOR versus LET
FOR liga variáveis nodo iteration
LET liga variáveis coleção one value
77
FOR versus LET
FOR $x IN document("bib.xml")/bib/book
RETURN <result> $x </result>
Retorna: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ...
LET $x IN document("bib.xml")/bib/book
RETURN <result> $x </result>
Retorna: <result> <book>...</book> <book>...</book> <book>...</book> ...</result>
78
Coleções em XQuery Conjuntos e Bags
/bib/book/author = uma coleção do tipo Bag Distinct(/bib/book/author) = uma coleção do
tipo conjunto (Set) LET $a = /bib/book $a é uma coleção $b/author uma coleção (vários
autores...)RETURN <result> $b/author </result>Retorna: <result> <author>...</author> <author>...</author> <author>...</author> ...</result>
79
Ordenação em XQuery<publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher> SORTBY(name) </publisher_list>
Argumentos de sort referem-se ao namespace da cláusula RETURN e não da cláusula FOR
80
If-Then-ElseFOR $h IN //holding
RETURN <holding>
$h/title,
IF $h/@type = "Journal"
THEN $h/editor
ELSE $h/author
</holding> SORTBY (title)
81
Quantificador ExistencialFOR $b IN //book
WHERE SOME $p IN $b//para SATISFIES
contains($p, "sailing")
AND contains($p, "windsurfing")
RETURN $b/title
82
Quantificador Universal
FOR $b IN //book
WHERE EVERY $p IN $b//para SATISFIES
contains($p, "sailing")
RETURN $b/title