Tópicos de Sistemas de Informação A

89
Tópicos de Sistemas de Informação A Carlos Oberdan Rolim Ciência da Computação

description

Tópicos de Sistemas de Informação A. Carlos Oberdan Rolim Ciência da Computação. XSL (eXtensible Stylesheet Language). XSL - Motivação. Vantagens de separar apresentação de conteúdo: - PowerPoint PPT Presentation

Transcript of Tópicos de Sistemas de Informação A

Page 1: Tópicos de Sistemas de Informação A

Tópicos de Sistemas de Informação A

Carlos Oberdan Rolim

Ciência da Computação

Page 2: Tópicos de Sistemas de Informação A

XSL

(eXtensible Stylesheet Language)

Page 3: Tópicos de Sistemas de Informação A

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.

Page 4: Tópicos de Sistemas de Informação A

Opções para mostrar XML

Page 5: Tópicos de Sistemas de Informação A

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

Page 6: Tópicos de Sistemas de Informação A

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.

Page 7: Tópicos de Sistemas de Informação A

Revisão de CSS

CSS - Cascade Style Sheet

Define o estilo de um documento para apresentação

Pode ser inline ou externa ao documento

Page 8: Tópicos de Sistemas de Informação A

External Style Sheets

External Style SheetsContidas num arquivo.css Único style sheet usado por múltiplas páginasUsado com o elemento link

Page 9: Tópicos de Sistemas de Informação A

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>

Page 10: Tópicos de Sistemas de Informação A

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

Page 11: Tópicos de Sistemas de Informação A

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)

Page 12: Tópicos de Sistemas de Informação A

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

Page 13: Tópicos de Sistemas de Informação A

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

Page 14: Tópicos de Sistemas de Informação A

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, Xalan (Apache)Maioria dos Web browsers já trazem tal processador

Page 15: Tópicos de Sistemas de Informação A

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

Page 16: Tópicos de Sistemas de Informação A

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

Page 17: Tópicos de Sistemas de Informação A

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

Page 18: Tópicos de Sistemas de Informação A

<?xml version=“1.0” encoding=“iso-8859-1”?><saudacao>Bem-vindo!</saudacao> Saudacao.xml

<html><head>

<title>Saudação de Hoje</title></head><body>

<p>Bem-vindo!</p></body></html>

Saudacao.html

Page 19: Tópicos de Sistemas de Informação A

<?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

Page 20: Tópicos de Sistemas de Informação A

<?xml version=“1.0” encoding=“iso-8859-1”?><?xml-stylesheet type=“text/xsl” href=“saudacao.xsl”?><saudacao>Bem-vindo!</saudacao>

Saudacao.xml

Inclusão de uma referência ao arquivo xsl no próprio arquivo xml:

Page 21: Tópicos de Sistemas de Informação A

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>

Page 22: Tópicos de Sistemas de Informação A

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>

Page 23: Tópicos de Sistemas de Informação A

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

Page 24: Tópicos de Sistemas de Informação A

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

Page 25: Tópicos de Sistemas de Informação A

Linguagem XPath

Consiste em uma sintaxe para especificar partes de um documento XML

Baseada em expressões de caminhos (path expressions)

Percursos no grafo XML

Usada por vários outros padrões XML

XQuery, XSLT, XPointer, etc.

Page 26: Tópicos de Sistemas de Informação A

Linguagem XPath

Consiste em uma sintaxe para especificar partes de um documento XML usando path expressions

Baseada em expressões de caminhos (path expressions)

Percursos no grafo XML

Usada por vários outros padrões XML

XQuery, XSLT, XPointer, etc.

Page 27: Tópicos de Sistemas de Informação A

Linguagem XPath

O resultado de uma expressão de caminho é uma sequência de nós ou valores primitivos

Compilador determina qual é o tipo do resultado

Pesquisa nos diferentes “eixos” de um documento XML

Ascendentes, descendentes, irmãos, etc.

Page 28: Tópicos de Sistemas de Informação A

XSLT – Expressões XPath

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.

Page 29: Tópicos de Sistemas de Informação A

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

Page 30: Tópicos de Sistemas de Informação A

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.

Page 31: Tópicos de Sistemas de Informação A

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

Page 32: Tópicos de Sistemas de Informação A

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>

Page 33: Tópicos de Sistemas de Informação A

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>

Page 34: Tópicos de Sistemas de Informação A

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:

Page 35: Tópicos de Sistemas de Informação A

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

Page 36: Tópicos de Sistemas de Informação A

<?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>

Page 37: Tópicos de Sistemas de Informação A

Resultado

Page 38: Tópicos de Sistemas de Informação A

XSLT - Elementos

<xsl:apply-templates>Aplica um template ao elemento corrente e todos os seus filhos

Se for acrescido o atributo select será processado somente o elemento filho que corresponde ao valor do atributo.

Usa-se select para especificar a ordem que os filhos serão processados

Page 39: Tópicos de Sistemas de Informação A

<?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>

<xsl:apply-templates/>

</body>

</html>

</xsl:template>

<xsl:template match="cd">

<p>

<xsl:apply-templates select="title"/>

<xsl:apply-templates select="artist"/>

</p>

</xsl:template>

<xsl:template match="title">

Title: <span style="color:#ff0000">

<xsl:value-of select="."/></span>

<br />

</xsl:template>

<xsl:template match="artist">

Artist: <span style="color:#00ff00">

<xsl:value-of select="."/></span>

<br />

</xsl:template>

</xsl:stylesheet>

(CONTINUACAO)

Page 40: Tópicos de Sistemas de Informação A

ResultadoMy CD Collection

Title: Empire BurlesqueArtist: Bob Dylan

Title: Hide your heartArtist: Bonnie Tyler

Title: Greatest HitsArtist: Dolly Parton

Title: Still got the bluesArtist: Gary Moore

Title: ErosArtist: Eros Ramazzotti

Title: One night onlyArtist: Bee Gees

Page 41: Tópicos de Sistemas de Informação A

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.

Page 42: Tópicos de Sistemas de Informação A

<?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>

Page 43: Tópicos de Sistemas de Informação A

Resultado

Page 44: Tópicos de Sistemas de Informação A

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="expression"> ... ...some output if the expression is true... ... </xsl:if>

Page 45: Tópicos de Sistemas de Informação A

<?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>

<xsl:if match=".[artist='Bob Dylan']">

Page 46: Tópicos de Sistemas de Informação A

XSLT - Elementos

Page 47: Tópicos de Sistemas de Informação A

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

Page 48: Tópicos de Sistemas de Informação A

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)

Page 49: Tópicos de Sistemas de Informação A

<?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:

Page 50: Tópicos de Sistemas de Informação A

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

Page 51: Tópicos de Sistemas de Informação A

<?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

Page 52: Tópicos de Sistemas de Informação A

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

Page 53: Tópicos de Sistemas de Informação A

<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

Page 54: Tópicos de Sistemas de Informação A

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>

Page 55: Tópicos de Sistemas de Informação A

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>

Page 56: Tópicos de Sistemas de Informação A

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>

Page 57: Tópicos de Sistemas de Informação A

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>>

Page 58: Tópicos de Sistemas de Informação A

XSLT - Funções

current()

Retorna o nó corrente

document()

Retorna o nó raiz de um documento XML externo

document(uri) => nó

<<document(‘data.xml’)>>

Page 59: Tópicos de Sistemas de Informação A

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’)>>

Page 60: Tópicos de Sistemas de Informação A

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

Page 61: Tópicos de Sistemas de Informação A

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>

Page 62: Tópicos de Sistemas de Informação A

<?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)

Page 63: Tópicos de Sistemas de Informação A

<?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)

Page 64: Tópicos de Sistemas de Informação A

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

Page 65: Tópicos de Sistemas de Informação A

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

Page 66: Tópicos de Sistemas de Informação A

Exercício

Page 67: Tópicos de Sistemas de Informação A

Linguagem de Consulta

X-Query

Page 68: Tópicos de Sistemas de Informação A

XQuery

Baseda em Quilt (que é baseda em XML-QL)

http://www.w3.org/TR/xquery/2/2001

XML Query data model

Utiliza expressões XPath

É uma recomendação W3C

Selecione todos os registros com preço menor que $10 da coleção de CDs armazenado no documento XML chamado cd_catalog.xml

The best way to explain XQuery is to say that XQuery is to XML what SQL is to database tables.

Page 69: Tópicos de Sistemas de Informação A

Selecionando nodos

Usar a função doc() para extrair dados do XML doc("books.xml")

Usa expressões para selecionar os elementos doc("books.xml")/bookstore/book/title

Predicados são usados para limitar a seleção doc("books.xml")/bookstore/book[price<30]

ou então

doc("books.xml")/bookstore/book[price>30]/title

Page 70: Tópicos de Sistemas de Informação A

FLWR (“Flower”) Expressions

FOR ...

LET...

WHERE...

RETURN...

Page 71: Tópicos de Sistemas de Informação A

XQuery

Encontre os títulos dos livros publicados após 1995:

FOR $x IN doc("bib.xml")/bib/book

WHERE $x/year > 1995

RETURN $x/title

FOR $x IN doc("bib.xml")/bib/book

WHERE $x/year > 1995

RETURN $x/title

Resultado: <title> abc </title> <title> def </title> <title> ghi </title>

Page 72: Tópicos de Sistemas de Informação A

XQuery

Para cada autor de um livro publicado pela Morgan Kaufmann, listar os livros publicados:

FOR $a IN distinct(doc("bib.xml") /bib/book[publisher=“Morgan Kaufmann”]/author)

RETURN <result>

$a,

FOR $t IN /bib/book[author=$a]/title

RETURN $t

</result>

FOR $a IN distinct(doc("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

Page 73: Tópicos de Sistemas de Informação A

XQuery

Resultado:

<result>

<author>Jones</author>

<title> abc </title>

<title> def </title>

</result>

<result>

<author> Smith </author>

<title> ghi </title>

</result>

Page 74: Tópicos de Sistemas de Informação A

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

Page 75: Tópicos de Sistemas de Informação A

XQuery

Sumá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

Page 76: Tópicos de Sistemas de Informação A

FOR versus LET

FOR

liga variáveis nodo iteration

for $x in (1 to 5) return <test>{$x}</test>

Resulta:<test>1</test> <test>2</test> <test>3</test> <test>4</test>

<test>5</test>

LET

liga variáveis coleção one value

let $x := (1 to 5) return <test>{$x}</test>

Resulta:

<test>1 2 3 4 5</test>

Page 77: Tópicos de Sistemas de Informação A

FOR versus LET

FOR $x IN doc("bib.xml")/bib/book

RETURN <result> $x </result>

FOR $x IN doc("bib.xml")/bib/book

RETURN <result> $x </result>

Retorna: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ...

LET $x IN doc("bib.xml")/bib/book

RETURN <result> $x </result>

LET $x IN doc("bib.xml")/bib/book

RETURN <result> $x </result>

Retorna: <result> <book>...</book> <book>...</book> <book>...</book> ...</result>

Page 78: Tópicos de Sistemas de Informação A

For / Let

count = função (aggregate) que retorna o número de elementos

<big_publishers>

FOR $p IN distinct(doc("bib.xml")//publisher)

LET $b := doc("bib.xml")/book[publisher = $p]

WHERE count($b) > 100

RETURN $p

</big_publishers>

<big_publishers>

FOR $p IN distinct(doc("bib.xml")//publisher)

LET $b := doc("bib.xml")/book[publisher = $p]

WHERE count($b) > 100

RETURN $p

</big_publishers>

Page 79: Tópicos de Sistemas de Informação A

For / Let

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

FOR $b in document("bib.xml")/bib/book

LET $a=avg(document("bib.xml")/bib/book/price)

WHERE $b/price > $a

RETURN $b

Page 80: Tópicos de Sistemas de Informação A

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>RETURN <result> $b/author </result>Retorna: <result> <author>...</author> <author>...</author> <author>...</author> ...</result>

Page 81: Tópicos de Sistemas de Informação A

Ordenação em XQuery

<publisher_list> FOR $b IN doc("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher_list>

<publisher_list> FOR $b IN doc("bib.xml")//book[publisher = $p] RETURN <book> $b/title , $b/price </book> SORTBY(price DESCENDING) </publisher_list>

Argumentos de sort referem-se ao namespace da cláusula RETURN e não da cláusula FOR

Page 82: Tópicos de Sistemas de Informação A

Ordenação em XQuery

<ul> { for $x in doc("books.xml")/bookstore/book/title order by $x return <li>{$x}</li> } </ul>

<ul> { for $x in doc("books.xml")/bookstore/book/title order by $x return <li>{$x}</li> } </ul>

Resulta em:<ul> <li><title lang="en">Everyday Italian</title></li> <li><title lang="en">Harry Potter</title></li> <li><title lang="en">Learning XML</title></li> <li><title lang="en">XQuery Kick Start</title></li> </ul>

Page 83: Tópicos de Sistemas de Informação A

Ordenação em XQuery

<ul> { for $x in doc("books.xml")/bookstore/book/title order by $x return <li>{data($x)}</li> } </ul>

<ul> { for $x in doc("books.xml")/bookstore/book/title order by $x return <li>{data($x)}</li> } </ul>

Resulta em:<ul> <li>Everyday Italian</li> <li>Harry Potter</li> <li>Learning XML</li> <li>XQuery Kick Start</li> </ul>

Agora retirando o elemento title e mostrando somente seu conteudo

Page 84: Tópicos de Sistemas de Informação A

If-Then-Else

for $x in doc("books.xml")/bookstore/book

return if ($x/@category="CHILDREN")

then <child>{data($x/title)}</child>

else <adult>{data($x/title)}</adult>

for $x in doc("books.xml")/bookstore/book

return if ($x/@category="CHILDREN")

then <child>{data($x/title)}</child>

else <adult>{data($x/title)}</adult>

Resulta em:<adult>Everyday Italian</adult><child>Harry Potter</child> <adult>Learning XML</adult> <adult>XQuery Kick Start</adult>

* Parenteses na expressao if são requeridos

Page 85: Tópicos de Sistemas de Informação A

Comparativos

Duas formas de comparar valores:

Comparações gerais: =, !=, <, <=, >, >=

Comparações de valor: eq, ne, lt, le, gt, ge

- $bookstore//book/@q > 10

A expressao retorna true se qualquer atributo possui valores maiores que 10

- $bookstore//book/@q gt 10

A expressao retorna true se há somente um elemento q retornado pela expressao e o seu valor é maior que 10. Se mais de um q são retornados ocorre um erro

Page 86: Tópicos de Sistemas de Informação A

Quantificador Existencial

FOR $b IN //book

WHERE SOME $p IN $b//para SATISFIES

contains($p, "sailing")

AND contains($p, "windsurfing")

RETURN $b/title

FOR $b IN //book

WHERE SOME $p IN $b//para SATISFIES

contains($p, "sailing")

AND contains($p, "windsurfing")

RETURN $b/title

Page 87: Tópicos de Sistemas de Informação A

Quantificador Universal

FOR $b IN //book

WHERE EVERY $p IN $b//para SATISFIES

contains($p, "sailing")

RETURN $b/title

FOR $b IN //book

WHERE EVERY $p IN $b//para SATISFIES

contains($p, "sailing")

RETURN $b/title

Page 88: Tópicos de Sistemas de Informação A

Funções

Diversas funções para string, valores, data, etc...

Podem ser encontradas em: http://www.w3.org/2005/02/xpath-functions

Como invocar uma função <name>{uppercase($booktitle)}</name>

ou então

doc("books.xml")/bookstore/book[substring(title,1,5)='Harry']

Page 89: Tópicos de Sistemas de Informação A

Funções

Funções declaradas pelo usuáriodeclare function prefix:function_name($parameter AS datatype) AS returnDatatype { (: ...function code here... :) };

Exemplo:declare function local:minPrice( $price as xs:decimal?, $discount as xs:decimal?) AS xs:decimal? { let $disc := ($price * $discount) div 100 return ($price - $disc) };

Invocar da seguinte forma: <minPrice>{local:minPrice($book/price, $book/discount)}</minPrice>