XML e dados semi

Download Report

Transcript XML e dados semi

XSL - eXtensible Stylesheet
Language
1
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.
2
Opções para mostrar XML
3
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
4
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.
5
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
6
External Style Sheets
External Style Sheets
Contidas num arquivo.css
Único style sheet usado por múltiplas páginas
Usado com o elemento link
7
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>
8
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
9
XSL - Histórico
XML derivada de SGML
Padronizada pelo W3C
XSL 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)
10
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
11
XSLT - Características
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
Uso de XSL Namespaces - O W3C provê um namespace para
tags XSL
12
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
13
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
14
XSLT - Características
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>
15
XSLT - Características
O corpo das regras de template é constituído por:
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
16
<?xml version=“1.0” encoding=“iso-8859-1”?>
<saudacao>Bem-vindo a Maceió!</saudacao>
Saudacao.xml
<html>
<head>
<title>Saudação de Hoje</title>
Saudacao.html
</head>
<body>
<p>Bem-vindo a Maceió!</p>
</body>
</html>
17
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>
Linha de comando para transformar Saudacao.xml em
Saudacao.html via Saudacao.xsl:
C:>saxon Saudacao.xml Saudacao.xsl > Saudacao.html
18
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>Bem-vindo a Maceió!</saudacao>
Saudacao.xml
19
Exemplo 2
Stylesheet 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>
20
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>
21
Exemplo 3:
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>
<xsl:template match=“text()”>
<xsl:value-of select=“.”/>
</xsl:template>
HTML
<H1> Introducao </H1>
Texto do capitulo
22
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
23
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.
24
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
25
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.
26
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
27
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>
28
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>
29
XSLT - Elementos
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>
30
XSLT - Elementos
<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
31
<?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>
32
Resultado
33
XSLT - Elementos
<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.
34
<?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> <xsl:value-of select="artist" />
</td>
</td>
</tr>
</xsl:for-each>
</table>
</body> </html>
</xsl:template> </xsl:stylesheet>
35
Resultado
36
XSLT - Elementos
<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>
37
<?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> <xsl:value-of select="artist" />
</td>
</td>
</tr>
</xsl:if>
</xsl:for-each>
</table>
</body> </html> </xsl:template> </xsl:stylesheet>
38
XSLT - Elementos
39
XSLT - Elementos
<xsl:attribute>
É usado para adicionar atributos aos elementos
<picture>
<xsl:attribute name=“source”/>
<picture>
<xsl:element> cria um elemento (node) 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>
40
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)
41
Exemplo: Seja o DB XML:
<?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>
42
Exemplo (cont): XSL
<?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
match elemento esportes e
aplica os templates aos nodes
filhos esportes
Cria elemento titulo
Cria atributo id para elemento
titulo
Cria comentário com o
conteúdo do elemento
para
43
Resultado produzido
<?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>
44
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
45
XSLT - Elementos

<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
46
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>
47
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>
48
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>
49
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>>

50
XSLT - Funções

current()


Retorna o nó corrente
document()


Retorna o nó raiz de um documento XML externo
document(uri) => nó
<<document(‘data.xml’)>>
51
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’)>>

52
XSLT - Funções

count(arg1)


sum(arg1)


retorna o número de nodes presentes no conjunto de nós
passados como argumento
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
53
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>
54
XSLT - Exemplo Completo (Doc1 –
Documento Resultado 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>
55
XSLT - Exemplo Completo (Documento
XSLT para conversão Doc1 => Doc2)
<?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>
56
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
57
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
58
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>
59
Exercício 5
Supondo 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=“*”/>
60
Exercício 5
Resposta:
<clientes>
<cliente> Ana </cliente>
<cliente> Mauro </cliente>
</clientes>
61
Consulta a dados
semi-estruturados
62
Consulta
Requisitos desejáveis (Maier ’98)

Expressividade



Semântica precisa


o resultado de uma consulta deve poder ser
utilizado dentro de uma outra consulta
Consulta ao esquema


muito importante para XML
Composição


linguagem de consulta ao estilo SQL
possibilitar a restruturação de dados semi-estruturados
visando otimização
Facilitar a geração automática de consultas
63
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
root.pessoas.filhos

{&p1,&p2,&p3}
{&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.
64
Consulta
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
65
Linguagem de Consulta
X-Query
66
XQuery



Baseda em Quilt
(que é baseda em XML-QL)
http://www.w3.org/TR/xquery/2/2001
XML Query data model
67
FLWR (“Flower”) Expressions
FOR ...
LET...
WHERE...
RETURN...
68
XQuery
Encontre os títulos dos livros publicados
após 1995:
FOR $x IN document("bib.xml")/bib/book
WHERE $x/year > 1995
RETURN $x/title
Resultado:
<title> abc </title>
<title> def </title>
<title> ghi </title>
69
XQuery
Para 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
70
XQuery
Resultado:
<result>
<author>Jones</author>
<title> abc </title>
<title> def </title>
</result>
<result>
<author> Smith </author>
<title> ghi </title>
</result>
71
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
72
XQuery
<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>
count = função (aggregate) que retorna o número de elementos
73
XQuery
Encontre 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
74
XQuery
Sumário:
 FOR-LET-WHERE-RETURN = FLWR
FOR/LET Clauses
Lista de tuplas
WHERE Clause
Lista de tuplas
RETURN Clause
Instância do modelo de dados Xquery
75
FOR versus LET
FOR
 liga variáveis nodo  iteration
LET
 liga variáveis coleção  one value
76
FOR versus LET
FOR $x IN document("bib.xml")/bib/book
RETURN <result> $x </result>
LET $x IN document("bib.xml")/bib/book
RETURN <result> $x </result>
Retorna:
<result> <book>...</book></result>
<result> <book>...</book></result>
<result> <book>...</book></result>
...
Retorna:
<result> <book>...</book>
<book>...</book>
<book>...</book>
...
</result>
77
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>
78
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
79
If-Then-Else
FOR $h IN //holding
RETURN <holding>
$h/title,
IF $h/@type = "Journal"
THEN $h/editor
ELSE $h/author
</holding> SORTBY (title)
80
Quantificador Existencial
FOR $b IN //book
WHERE SOME $p IN $b//para SATISFIES
contains($p, "sailing")
AND contains($p, "windsurfing")
RETURN $b/title
81
Quantificador Universal
FOR $b IN //book
WHERE EVERY $p IN $b//para SATISFIES
contains($p, "sailing")
RETURN $b/title
82