Você está na página 1de 28

Gabriel Rattacaso Carvalho grc@cin.ufpe.

br

Roteiro
Introduo
Definio Caractersticas

Modelo de Dados
Consultas Expresses Ambiente de Desenvolvimento Concluso

Introduo
Faz parte de um conjunto de ferramentas que tambm inclui:
Xpath

utilizado para navegar nos elementos e atributos de um documento XML

XSLT

Utilizado para transformar documentos XML em outros documentos XML, ou para tipos de documentos reconhecidos por um browser, como HTML.

Xlink

Utilizado para criar Hiperlinks nos documentos XML

Xpointer Permite a criao de links para pontos especficos do documento XML.

Definio
Feita pela W3C
Xquery uma linguagem para consulta em dados XML. Definida a partir de Quilt e influenciada por OQL, XQL,

XML-QL e Lorel
Surgiu na necessidade de generalizar consultas XML,

assim como SQL faz para banco de dados.

Caractersticas
Linguagem Funcional
Fortemente tipada Case-Sensitive Linguagem concisa e facilmente entendida Baseia-se no Modelo de rvore da informao contida no

XML

Modelo de Dados
Sequncias Conjunto ordenado de zero ou mais itens.
Item Valor Atmico ou N

Valor Atmico instncia de um tipo de dado

N elemento, atributo, texto, documento, ns.

Consultas
Definida atravs de uma expresso Recebe como entrada e produz como sada fragmentos de XML ou valores atmicos Processamento de Entrada: Anlise sinttica e validao transforma documento XML para o modelo de dados do Xquery
Processamento de Sada: Serializao transforma modelo de dados do Xquery em representao de XML

Consultas - Estrutura
Consulta = prlogo + corpo
Prlogo: Declaraes definindo o ambiente de processamento do corpo da consulta
Namespaces Esquemas Funes

Corpo: Expresses cujo valor define o resultado da consulta

Exemplos de Prlogo
Declarao de namespaces:

namespace xyz = ''http://www.xyz.com/example/names''

Declarao de funes:

declare function local:doubler($x) { $x * 2 }

Corpo - Expresses
Tipos de Expresses

Expresses Primrias Expresses de Caminho Construtores de Elementos Expresses FLWOR Expresses Condicionais Expresses Aritmticas e Lgicas Expresses de Sequncias Expresses Quantificadas Expresses de Tipo

Expresses
Expresses Primrias Literal

Valor Atmico de tipo predefinido

Ex.: 12 (integer)

warehouse(String) 12.5(double) Valor Atmico criado por um construtor

Date(2010-10-05)

Sequncia Valores separados por vrgulas Ex.: 1,2,3 (1),(2,(3)) Referncia de Variveis Uso do $ $start, $stop

Expresses
Expresses Primrias Chamada de funo

Chamada usual substring("anticonstitucionalissimamente", 3, 4)


Results
ant a String vazia tico nticonstitucionalissimamente ant

Xquery Example
Substring(anticonstitucionalissimamente,1,3) Substring(anticonstitucionalissimamente,1,1) Substring(anticonstitucionalissimamente,1,0) Substring(anticonstitucionalissimamente,3,4) Substring(anticonstitucionalissimamente,2,800) Substring(anticonstitucionalissimamente,-2,6)

Outras Funes
Centenas de funes pr-definidas:
Strings concatenao, comparao, substrings, substituio. Nmeros clculos(soma, valor absoluto, mdia), arredondamento.

Sequencias contedo, posio dos elementos, classificao, agrupamento.

Elementos e Atributos XML modificao, criao.

Ns XML Informao, Relaes Hierrquicas.

Entre outros...

Expresses
Expresso de Caminho Utiliza sintaxe do Xpath Tabela de smbolos para expressar o caminho desejado Uso de Predicados

Smbolo Significado

. .. /

Indica o N Atual Indica o pai do N Atual Indica o n raiz ou um separador entre os passos de um caminho Indica descendente do n atual Indica atributos do n atual Indica qualquer n Utilizado para expresses booleanas Utilizado para selecionar um elemento numa lista de elementos

//

Exemplos:

@ * []

doc ("recipes.xml")//recipe[title="Ricotta Pie"]//ingredient[@amount] doc("zoo.xml")/chapter[2]//figure[caption = "Tree Frogs"]

[n]

doc("zoo.xml")/chapter[RANGE 2 TO 5]//figure

Expresses
Construtores de Elementos

<employee empid="{$id}"> <name>{$name}</name> $job <deptno>{$deptno}</deptno> <salary>{$SGMLspecialist+100000}</salary> </employee>

Resultado:
<employee empid=1"> <name>Joo Carlos</name> $job <deptno>RH</deptno> <salary>12000</salary> </employee> <employee empid=2"> <name>Wilson</name> $job <deptno>Finances</deptno> <salary>13000</salary> </employee>

Devem estar inseridas num contexto para utilizao

dos mesmos Variveis devem estar entre { } Ex.:

for $employee in doc(employees.xml")/employees let $id := $employee/id let $name:= $employee/name . . <employee empid="{$id}"> <name>{$name}</name> $job <deptno>{$deptno}</deptno> <salary>{$SGMLspecialist+100000}</salary> </employee> . .

Expresses
FLWOR (For-Let-Where-Order-Return)

Mltiplas clusulas FOR ou LET Uma clusula WHERE opcional Uma clusula ORDER opcional Uma clusula RETURN

for $d in doc("depts.xml")//deptno let $e := doc("emps.xml")//employee[deptno = $d] where count($e) >= 10 order by avg($e/salary) descending return <big-dept> { $d, <headcount>{count($e)}</headcount>, <avgsal>{avg($e/salary)}</avgsal> } </big-dept>

Expresses
Condicionais

Uso de If-Then-Else Exemplo: for $h in document("library.xml")//holding return


<holding> { $h/title, if ($h/@type = "Journal") then $h/editor else $h/author } </holding>

Expresses
Operaes

Aritmticas +(soma) -(subtrao) *(multiplicao) div(divisao retornando decimal) idiv(divisao retornando inteiro) mod(resto da diviso) Comparaes Entre Valores (=,!=,<,>) Entre Ns(is, <<,>>)

Outras Operaes
Operaes Lgicas

And Or

Operaes sobre sequencias


Union Intersect Except Some (verdadeiro se existe ao menos um que satisfaz)

Operaes de Quantificao

some $emp in /emps/employee satisfies ($emp/bonus > 0.25 * $emp/salary) every $part in /parts/part satisfies $part/@discounted

Every (verdadeiro se todos satisfazem)

Expresses
Expresses de Tipo
Instance of

Retorna Verdadeiro se o primeiro operando do tipo do segundo operando. Ex.: 5 instance of xs:integer - TRUE

Typeswitch

Switch de Tipos Ex.: typeswitch($customer/billing-address)


case $a as element(*, USAddress) return $a/state case $a as element(*, CanadaAddress) return $a/province case $a as element(*, JapanAddress) return $a/prefecture default return "unknown"

Expresses
Expresses de Tipo (Cont.) Cast e Castable

Cast Transformao do tipo da expresso em outro tipo. Castable Retorna Verdadeiro se o tipo da expresso pode ser transformado em outro.

Ex.: if ($x castable as hatsize)


then $x cast as hatsize else if ($x castable as IQ) then $x cast as IQ else $x cast as xs:string

Treat

No muda valor, nem tipo dinamicamente. Objetivo de garantir que uma expresso tenha um tipo dinmico esperado. Ex.: $myaddress treat as element(*, USAddress)

Ambiente de Desenvolvimento
Existem ferramentas que auxiliam no uso do Xquery

como o produto da StylusStudio

Edio

XEditor

Ambiente de Desenvolvimento
Mapeamento

XMapping

Ambiente de Desenvolvimento
Debugador

XDebugger

Ambiente de Desenvolvimento
Performance

XProfiler

Concluso
Podemos ver que a linguagem Xquery nos fornece uma

grande variedade de opoes para realizarmos as consultas nos documentos XML.

Referncias

http://www.w3.org/TR/xquery/ http://en.wikipedia.org/wiki/XQuery http://www.brics.dk/~amoeller/XML/querying/ http://www.w3schools.com/xquery/xquery_intro.asp http://books.google.com.br/books?id=Q9t4StPhW9AC&pg=PA115&lpg=PA115& dq=xquery+modelo+de+dados&source=bl&ots=IbwkC1Yb8V&sig=1euGaP0Vp NEo78G8wfZAYWCdelw&hl=ptBR&ei=VbqjTLunBoWclgfbp8i5Cw&sa=X&oi=book_result&ct=result&resnum =7&ved=0CDMQ6AEwBg#v=onepage&q=xquery%20modelo%20de%20dados &f=false http://msdn.microsoft.com/pt-br/library/ms175178.aspx http://www.xqueryfunctions.com/ www.research.ibm.com/journal/sj/414/chamberlin.pdf http://www.datypic.com/books/xquery/chapter05.html http://msdn.microsoft.com/en-us/library/ms190451.aspx http://www.stylusstudio.com/xquery.html

Perguntas

???

Você também pode gostar