XSL e Xtensible Stylesheet Language 1 XSL Motivao
XSL - e. Xtensible Stylesheet Language 1
XSL - Motivação n Vantagens de separar apresentação de conteúdo: n n 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? n Especifica a apresentação de XML em duas categorias: n n 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? n n n 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 n n CSS - Cascade Style Sheet Define o estilo de um documento para apresentação Pode ser inline ou externa ao documento Precedência de estilos: n Autor > Usuário > Web Browser 6
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} <html> <!-- Linking external style sheets --> <head> <title>Exemplo de CSS</title> <link rel = "stylesheet" type = "text/css” href = "styles. css"> </head> ul { margin-left: 2 cm } 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 W 3 C XSL derivada de DSSSL (Document Style Semantics and Specification Language) Primeira proposta formal em 1997 pela W 3 C (já continha conceitos de XSLT, como uso de templates) Novembro de 1999 XSLT tornou-se uma recomendação da W 3 C Última versão de XSL: Outubro de 2001 (incluindo XSL-FO) 10
Componentes de 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 W 3 C 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, MSXML 3, 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. w 3. 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. w 3. 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. w 3. 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. w 3. 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”> <H 1> <xsl: value-of select=“. /@titulo”> </H 1> <xsl: apply-templates/> </xsl: template> <xsl: template match=“text()”> <xsl: value-of select=“. ”/> </xsl: template> HTML <H 1> Introducao </H 1> 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 n n n XPath é usado para endereçar (select) partes de documentos XML usando path expressions Uma path expression é uma sequência de passos separados por “/” n 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 n Ex. /banco-2/cliente/nome. Cliente : <nome. Cliente>José</nome. Cliente> <nome. Cliente>Maria</nome. Cliente> n Ex 2 /banco-2/cliente/nome. Cliente/text( ) retorna os mesmos nomes, mas sem as tags envolventes. 24
XSLT – Expressões XPath n n n 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 [ ] n n Ex. /banco-2/conta[saldo > 400] n retorna elementos de conta com saldo > 400 n /banco-2/conta[saldo] retorna elementos conta contendo um sub-elemento saldo Atributos são acessados usando “@” n n Ex /banco-2/conta[saldo > 400]/@numero retorna os números das contas com saldo>400 25
XSLT – Funções XPath n n 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. n n 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() n E. g. /banco-2/conta/id(@proprietarios) n 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 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> <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. w 3. org/1999/XSL/Transform”> <xsl: template match="/"> <html> <body> -<h 2>My CD Collection</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <th>Title</th> <th>Artist</th> </tr> <td> <xsl: value-of select="catalog/cd/title" /> </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. w 3. org/1999/XSL/Transform"><xsl: template match="/"> <html><body> <h 2>My CD Collection</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <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> </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> ‘ 10’> conteúdo. . . </xsl: if> 37
<? xml version="1. 0" encoding="ISO-8859 -1" ? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. org/1999/XSL/Transform"> <xsl: template match="/"> <html><body> <h 2>My CD Collection</h 2> <table border="1"> <tr bgcolor="#9 acd 32"> <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> <xsl: value-of select="artist" /> </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> </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: template> n<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. w 3. 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 n <xsl: param> n n 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> n n Elemento que chama um determinado template Possui o atributo “name” para assinalar o nome do template 45
XSLT - Elementos n <xsl: with-param> n n 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> n n n 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 n <xsl: text> n 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 n n 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: n n n 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: f 1”> <xsl: functions ns=“funcs” type=“text/javascript”> function f 1() { return “Funcao 1”; } </xsl: functions> 49
XSLT - Funções n format-number() É usada para converter números em strings de acordo com algum padrão de formato n format-number(value, format) => string <<format-number(12. 5, ‘$#. 00’)>> <<$12. 50>> <<format-number(0. 25, ‘#00%’)>> <<25%>> n n generate-id() Gera um string, na forma de um nome XML, que unicamente identifica um nó. n generate-id(nó) => string n o código retornado depende do XSLT processor <<generate-id(book)>> <<N 015732>> n 50
XSLT - Funções n current() n n Retorna o nó corrente document() n n Retorna o nó raiz de um documento XML externo document(uri) => nó <<document(‘data. xml’)>> 51
XSLT - Funções n id() Retorna o nó com um determinado valor para seu atributo ID n id(value) => nó <<id(‘A 321 -780’)>> <product code=“A 321 -780”> n n element-available() É usada para testar se um determinada instrução XSLT está disponível para uso. n Element-available(name) => boolean <<element-available(‘xsl: text’)>> n 52
XSLT - Funções n count(arg 1) n n sum(arg 1) n n 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 nodes do conjunto de nodes passados como argumento contains(arg 1, arg 2) n n testa se arg 1 contém arg 2 como substring é case sensitive n Ex: contains (‘Paris’, ‘A’) retorna false 53
XSLT - Exemplo Completo (Doc 1 – Documento Origem XML) <? xml version="1. 0" encoding="utf-8" ? > <customers> <customer Customer. ID="ALFKI" Company. Name="Alfreds Futterkiste" Contact. Name="Maria Anders" Contact. Title="Sales Representative" Address="Obere Str. 57" City="Berlin" Postal. Code="12209" Country="Germany" Phone="030 -0074321" Fax="030 -0076545" /> <customer Customer. ID="ANATR" Company. Name="Ana Trujillo Emparedados y helados" Contact. Name="Ana Trujillo" Contact. Title="Owner" Address="Avda. de la Constitución 2222" City="México D. F. " Postal. Code="05021" Country="Mexico" Phone="(5) 555 -4729" Fax="(5) 555 -3745" /> <customer Customer. ID="AROUT" Company. Name="Around the Horn" Contact. Name="Thomas Hardy" Contact. Title="Sales Representative" Address="120 Hanover Sq. " City="London" Postal. Code="WA 1 1 DP" Country="UK" Phone="(171) 555 -7788" Fax="(171) 555 -6750" /> <customer Customer. ID="BERGS" Company. Name="Berglunds snabbköp" Contact. Name="Christina Berglund" Contact. Title="Order Administrator" Address="Berguvsvägen 8" City="Luleå" Postal. Code="S-958 22" Country="Sweden" Phone="0921 -12 34 65" Fax="0921 -12 34 67" />. . . </customers> 54
XSLT - Exemplo Completo (Doc 1 – Documento Resultado XML) <? xml version="1. 0" encoding="UTF-16" ? > <customers> <customer Company. Name="Cactus Comidas para llevar" Customer. ID="CACTU" Country="Argentina" /> <customer Company. Name="Océano Atlántico Ltda. " Customer. ID="OCEAN" Country="Argentina" /> <customer Company. Name="Ernst Handel" Customer. ID="ERNSH" Country="Austria" /> <customer Company. Name="Piccolo und mehr" Customer. ID="PICCO" Country="Austria" /> <customer Company. Name="Maison Dewey" Customer. ID="MAISD" Country="Belgium" /> <customer Company. Name="Comércio Mineiro" Customer. ID="COMMI" Country="Brazil" /> . . . <customer Company. Name="Save-a-lot Markets" Customer. ID="SAVEA" Country="USA" /> <customer Company. Name="The Big Cheese" Customer. ID="THEBI" Country="USA" /> </customers> 55
XSLT - Exemplo Completo (Documento XSLT para conversão Doc 1 => Doc 2) <? xml version="1. 0" encoding="utf-8" ? > <xsl: stylesheet version="1. 0" xmlns: xsl="http: //www. w 3. 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="Company. Name"> <xsl: value-of select="@Company. Name" /> </xsl: attribute> <xsl: attribute name="Customer. ID"> <xsl: value-of select="@Customer. ID" /> </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 n Formatting objects n n Usado para formatar documentos XML para apresentação Tipicamente usado quando o resultado da transformção é para mídia impressa n n livros, revistas, encartes, etc. FOP n n n Ferramenta em Java da Apache Transforma documentos XSL que contêm formatting objects Download em xml. apache. org/fop 57
XSLFO n Exemplos de ferramentas n n http: //xml. apache. org/fop - FOP para PDF http: //www. unicorn-enterprises. com/ - Te. X 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=“/banco 2/cliente”> <cliente> <xsl: value-of select=“nome. Cliente”/> </cliente> </xsl: template> <xsl: template match=“*”/> n 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=“nome. Cliente”/> </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) n Expressividade n n n Semântica precisa n n o resultado de uma consulta deve poder ser utilizado dentro de uma outra consulta Consulta ao esquema n n muito importante para XML Composição n n 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) n n Expressões que permitem navegar no grafo de dados Expressões de caminho simples n n sequências de labels exemplos root. pessoas. filhos n {&p 1, &p 2, &p 3} {&p 2, &p 3} semântica n o resultado de uma expressão de caminho r. l 1. …. ln, onde l 1, …, 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 l 1, …, ln. 64
Consulta Expressões de caminho n n 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 n (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 n n n Baseda em Quilt (que é baseda em XML-QL) http: //www. w 3. 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> <author> Smith </author> <title> ghi </title> </result> 71
XQuery n n FOR $x in expr -- liga $x a cada valor na lista expr LET $x = expr -- liga $x à inteira lista expr n 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: n 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 n liga variáveis nodo iteration LET n 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>. . . Retorna: <result> <book>. . . </book> <book>. . . </result> 77
Coleções em XQuery n Conjuntos e Bags n n /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>. . . </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
- Slides: 82