SlideShare uma empresa Scribd logo
1 de 60
Banco de Dados XML 
Tiago Roberti Sampaio
Introdução ao XML 
 eXtensible Markup Language – O recomendado pela W3C para usar como 
linguagem de marcação. 
 Documentos organizados hierarquicamente. 
**W3C, ou World Wide Web Consortium, é um consórcio de empresas de tecnologia 
que visa padronizar a criação e interpretação de conteúdos para websites.
Linguagem de Marcação? 
 HTML – HyperText Markup Language é uma linguagem para organizar e formatar 
um website. 
 XML – eXtended Markup Language padroniza uma sequência de dados com o 
objetivo de organizar, separar o conteúdo e integrá-lo com outras linguagens.
Características do XML 
 Sintaxe simples. 
 Compartilhamento de informações entre diferentes computadores e aplicações. 
 Integração com outras linguagens. 
 Portabilidade: um BD pode escrever um arquivo XML para que outro BD consiga 
lê-lo.
Aplicações para o XML
XML vs Relacional 
phone phone phone 
{ row: { name: “John”, phone: 3634 }, 
row: { name: “Sue”, phone: 6343 }, 
row: { name: “Dick”, phone: 6363 }} 
name phone 
John 3634 
Sue 6343 
Dick 6363 
row row row 
name name name 
“John” 3634 “Sue” 6343 “Dick” 6363 
Relation 
… in XML
Projeto de um BD XML 
 Especificação de requisitos: levantamento das necessidades de dados. 
 Modelagem conceitual: uso de um modelo de dados convecional, ex. ER. 
 Modelagem lógica: uso de um modelo de dados baseado em grafo, adequado à 
representação de uma hierarquia XML. 
 Modelagem física: especificação do esquema XML.
Banco de Dados com suporte XML 
 Tem ferramentas que convertem o conteúdo XML para um banco de dados 
tradicional. 
 Aceita XML como entrada 
 Rederiza XML como saída 
 Ex: Postgre tem um biblioteca interna de manipulação XML
Documentos orientados a registros 
 <endereço> 
 <rua>Beira-Mar</rua><numero>104</numero><complemento>apto 
203</complemento> 
 <bairro>centro</bairro><cidade>Florianópolis</cidade> <cep>88010- 
600</cep> 
 </endereço> 
 <endereço> 
 <rua>Lauro Linhares</rua><numero>761</numero><bairro>trindade</bairro> 
 <cidade>Florianópolis</cidade><cep>88040-900</cep> 
 </endereço>
Banco de Dados com XML nativo 
 Define um modelo lógica para um documento XML, e armazena e recupera de 
acordo com este modelo. 
 Possui um documento como unidade fundamental de armazenamento lógico. 
 Especilizado em armazenar dados XML, armazena todos os componenetes do 
modelo XML (elementos, atributos, etc).
Benefícios 
 Suporta transações. 
 Acesso integrado a legados. 
 Suporte à distribuição. 
 Escalabilidade para grandes volumes. 
 Tem melhor desempenho que SGBDs padrão.
BD com suporte XML X nativo XML 
 Qual a vantagem de cada um?
BD XML X BD comum 
 Qual a vantagem de se utilizar um BD XML?
BD XML X BD comum 
 Mas... Por que utilizar XML? 
Vamos supor uma empresa X que possui um conjunto de dados que precisa 
ser disponibilizados para a empresa parceira Y. Como fazer isso de maneira simples?
XML! 
<?xml version=”1.0″ 
encoding=”ISO-8859-1″ ?> 
<pedidos> 
<pedido id=”1″> 
<item descrição=”1″ qtde=”100″ /> 
<item descrição=”2″ qtde=”20″/> 
</pedido> 
<pedido id=”2″> 
<item descrição=”1″ qtde=”25″ /> 
<item descrição=”3″ qtde=”10″/> 
<item descrição=”4″ qtde=”50″/> 
</pedido> 
<descrições> 
<descrição id=”1″>Pacote de papel sulfite</descrição> 
<descrição id=”2″>Pacote de papel carbono</descrição> 
<descrição id=”3″>Caixa de grampos</descrição> 
<descrição id=”4″>Borracha branca</descrição> 
</descrições> 
</pedidos>
Por que não usar XML? 
 Suponha que exista a necessidade de se transmitir o valor de determinados items, 
e cada item possui um identificador. E agora?
XML novamente...
Mas... 
 E se eu precisasse passar o valor de milhares de itens? 
 A quantidade de informação real (somente dos dados) que está sendo fornecida é 
bem menor comparada à quantidade de informações “extras” (tags) contidos no 
arquivo. 
 E também, não existe necessidade alguma dessa lista ser descrita 
hierarquicamente.
Uso ou não uso?
Mapeamento na “mão” de um BD XML
Técnica Edge 
 Consiste em armazenar todos os documentos em uma única tabela chamada Edge 
 Edge(source, ordinal, name, flag, target) 
Id que indica o documento 
XML 
N º para preservar a ordem 
entre os elementos de um 
mesmo documento. 
Nome do elemento ou 
atributo
Técnica Edge 
 Consiste em armazenar todos os documentos em uma única tabela chamada Edge 
 Edge(source, ordinal, name, flag, target) 
 Para armazenar os valores, uma tabela Vpara cada tipo 
 Vtype(vid, value)
Técnica Edge
SGBDs XML Híbridos 
 Suporte a armazenamento de docs. XML em sua forma nativa, ao mesmo tempo 
em que mantém suporte a armazenamento de dados relacionais/objeto-relacionais 
 Oracle: tem suporte a SQLX
SELECT SQLX 
 SELECTXMLElement(“departments",XMLElement(“de 
pt",XMLElement(“number", 
DEPTNO),XMLElement(“name", 
DNAME),XMLElement(“location", LOC)))FROM DEPT; 
<departments><dept><number>10</number> 
<name>ACCOUNTING</name><location>NEW YORK</location> 
</dept></departments><departments> 
<dept><number>20</number><name>RESEARCH</name> 
<location>DALLAS</location></dept></departments >
XMLElement() 
 Usado para criar elementos XML 
 XMLELEMENT ( 
[NAME] id 
[, XMLAttributes() ] 
[, ( instância_elemento_XML )+ ] 
)
XMLElement() 
SELECT 
XMLELEMENT("NOME_CLIENTE" , 
CLI.CNOME 
) 
FROM CLIENTES_REL CLI 
WHERE CLI.CESTADO = 'CE' 
<NOME_CLIENTE>Lineu</NOME_CLIENTE> 
<NOME_CLIENTE>Valdiana</NOME_CLIENTE>
XMLElement() 
SELECT XMLELEMENT("CLIENTE_CEARA", 
XMLELEMENT("NOME", 
CLI.CNOME 
), 
XMLELEMENT("CIDADE", 
CLI.CCIDADE 
) 
) 
FROM CLIENTES_REL CLI 
WHERE CLI.CESTADO = 'CE' 
<CLIENTE_CEARA> 
<NOME>Lineu</NOME> 
<CIDADE>Fortaleza</CIDADE> 
</CLIENTE_CEARA> 
<CLIENTE_CEARA> 
<NOME>Valdiana</NOME> 
<CIDADE>Fortaleza</CIDADE> 
</CLIENTE_CEARA>
XMLAttributes() 
 Define os atributos de um elemento 
 XMLATTRIBUTES ( 
expressão_valor [AS alias] 
[, value_expr [AS alias]* 
)
XMLAttributes() 
SELECT XMLELEMENT("CLIENTE_CEARA", 
XMLATTRIBUTES( 
CLI.CCODIGO AS "CODIGO" 
), 
XMLELEMENT("NOME", 
CLI.CNOME 
), 
XMLELEMENT("CIDADE", 
CLI.CCIDADE 
) 
) 
FROM CLIENTES_REL CLI 
WHERE CLI.CESTADO = 'CE' 
<CLIENTE_CEARA CODIDO="1"> 
<NOME>Lineu</NOME> 
<CIDADE>Fortaleza</CIDADE> 
</CLIENTE_CEARA> 
<CLIENTE_CEARA CODIDO="3"> 
<NOME>Valdiana</NOME> 
<CIDADE>Fortaleza</CIDADE> 
</CLIENTE_CEARA>
XMLForest() 
 Gera uma lista de elementos XML a partir de uma lista de expressões de valor e 
seus aliases opcionais. Valores nulos não geram elementos XML. 
 XMLFOREST ( 
expressão_valor [AS alias] 
[, expressão_valor [AS alias] ]* 
)
XMLForest() 
SELECT XMLFOREST( 
CLI.CNOME AS "NOME", 
CLI.CCIDADE AS "CIDADE", 
CLI.CEP AS "CEP" 
) 
FROM CLIENTES_REL CLI 
WHERE CLI.CESTADO = 'CE' 
<NOME>Lineu</NOME> 
<CIDADE>Fortaleza</CIDADE> 
<CEP>60356-030</CEP> 
<NOME>Valdiana</NOME> 
<CIDADE>Fortaleza</CIDADE> 
<CEP>60486-025</CEP>
XMLAgg() 
 Gera uma lista de elementos XML a partir de um agrupamento (GROUP BY). Se 
nenhum GROUP BY for especificado, é retornado um agregado XML para todas as 
cláusulas da consulta. 
 XMLAGG ( 
instância_elemento_XML 
[ GROUP BY lista_atributos ] 
)
XMLAgg() 
SELECT XMLELEMENT("CLIENTES", 
XMLATTRIBUTES(CLI.CCIDADE AS "CIDADE") 
XMLAGG( 
XMLELEMENT("CLIENTE", 
CLI.CNOME ) 
) 
) 
FROM CLIENTES_REL CLI 
GROUP BY CLI.CCIDADE; 
<CLIENTES CIDADE="FORTALEZA"> 
<CLIENTE>Lineu</CLIENTE> 
<CLIENTE>Valdiana</CLIENTE> 
</CLIENTES> 
<CLIENTES CIDADE="SOBRAL"> 
<CLIENTE>Marta</CLIENTE> 
<CLIENTE>Joana</CLIENTE> 
</CLIENTES>
XMLAgg() 
SELECT XMLELEMENT("CLIENTES", 
XMLAGG( 
XMLELEMENT("CLIENTE", 
CLI.CNOME ) 
) 
) 
FROM CLIENTES_REL CLI; 
<CLIENTES> 
<CLIENTE>Lineu</CLIENTE> 
<CLIENTE>Valdiana</CLIENTE> 
<CLIENTE>Marta</CLIENTE> 
<CLIENTE>Joana</CLIENTE> 
</CLIENTES>
XMLConcat() 
 Gera um único fragmento XML a partir dos argumentos 
 XMLConcat ( 
instância_elemento_XML 
[, instância_elemento_XML ]* 
)
XMLConcat() 
SELECT 
XMLELEMENT("PRODUTO_NOME", PROD.PNOME), 
XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO) 
FROM PRODUTOS_REL PROD 
XMLELEMENT("PRODUTO_NOME", PROD.PNOME) XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO) 
<PRODUTO_NOME>Monitor</PRODUTO_NOME> <PRODUTO_PRECO>589,50</PRODUTO_PRECO> 
<PRODUTO_NOME>Mouse</PRODUTO_NOME> <PRODUTO_PRECO>50,25</PRODUTO_PRECO> 
<PRODUTO_NOME>Teclado</PRODUTO_NOME> <PRODUTO_PRECO>165,88</PRODUTO_PRECO>
XMLConcat() 
SELECT XMLCONCAT( 
XMLELEMENT("PRODUTO_NOME", PROD.PNOME), 
XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO) 
) 
FROM PRODUTOS_REL PROD 
XMLCONCAT(XMLELEMENT("PRODUTO_NOME", PROD.PNOME), 
XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO)) 
<PRODUTO_NOME>Monitor</PRODUTO_NOME> 
<PRODUTO_PRECO>589,50</PRODUTO_PRECO> 
<PRODUTO_NOME>Mouse</PRODUTO_NOME> 
<PRODUTO_PRECO>50,25</PRODUTO_PRECO> 
<PRODUTO_NOME>Teclado</PRODUTO_NOME> 
<PRODUTO_PRECO>165,88</PRODUTO_PRECO>
Outras Funções 
 XMLElement() Creates an XML Element. 
 XMLForest()Creates an XML Fragment from passed-in components. 
 XMLColAttVal() Creates an XML fragment and then expands the resulting XML so 
that each XML fragment has the name "column" with the attribute "name" 
 ExtractValue() Takes as arguments anXMLTypeinstance and an XPathexpression 
and returns a scalar value of the resultant node. 
 XMLTransform() Takes as arguments anXMLTypeinstance and an XSL style sheet, 
which is itself a form ofXMLTypeinstance. It applies the style sheet to the instance 
and returns anXMLType. 
 XMLSequence() Takes input and returns either a varrayof the top-level nodes in 
theXMLType, or anXMLSequencetype an XML document for each row of the cursor. 
 XMLConcat() Takes as input a series ofXMLTypeinstances, concatenates the series 
of elements for each row, and returns the concatenated series. 
 UpdateXML() Takes as arguments anXMLTypeinstance and an XPath-value pair, 
and returns anXMLTypeinstance with the updated value.
XPath 
 Os principais operadores da XPath são / e //. O primeiro serve para dar um passo 
na árvore XML, enquanto o segundo serve para pular vários níveis de uma só vez. 
Funciona de maneira parecida como se fosse uma árvore de diretórios. O resultado 
de cada expressão XPath é um conjunto de elementos especificados pelo caminho.
XPath 
<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd 
country="USA"> <title>Empire Burlesque</title> 
<artist>Bob Dylan</artist> <price>10.90</price> </cd> <cd 
country="UK"> <title>Hide your heart</title> 
<artist>Bonnie Tyler</artist> <price>9.90</price> </cd> <cd 
country="USA"> <title>Greatest Hits</title> 
<artist>Dolly Parton</artist> <price>9.90</price> </cd> 
</catalog> 
 A expressão XPath abaixo seleciona o elemento RAIZ catalog: /catalog 
 A expressão XPath abaixo seleciona todos os elementos cd do elemento 
catalog: /catalog/cd 
 A expressão XPath abaixo seleciona todos os elementos price de todos os 
elementos cd do elemento catalog: /catalog/cd/price
Xpath: Selecionando elementos 
desconhecidos 
 A expressão XPath a seguir seleciona todos os elementos filhos de todos os 
elementos cd do elemento catalog: /catalog/cd/* 
A expressão XPath a seguir seleciona todos os elementos price que são elementos 
netos do elemento catalog: /catalog/*/price 
A expressão XPath a seguir seleciona todos os elementos price que têm dois 
ancestrais: /*/*/price 
A expressão XPath a seguir seleciona todos os elementos no documento: //*
Xpath: Selecionando seções 
 Usando-se colchetes numa expressão XPath você pode especificar um elemento 
adiante. 
 A expressão XPath a seguir seleciona o primeiro elemento cd filho do elemento 
catalog: /catalog/cd[1] 
A expressão XPath a seguir seleciona o último elemento cd filho do elemento 
catalog (Nota: não existe a função first()): /catalog/cd[last()] 
A expressão XPath a seguir seleciona todos os elementos cd do elemento catalog 
que tem um elemento price: /catalog/cd[price] 
A expressão XPath a seguir seleciona todos os elementos cd do elemento catalog 
que tem um elemento price com valor de 10.90: /catalog/cd[price=10.90] 
A expressão XPath a seguir seleciona todos os elementos price de todos os 
elementos cd do elemento catalog que tem um elemento price com valor de 
10.90: /catalog/cd[price=10.90]/price
Xpath: Selecionando vários caminhos 
 Usando o operador "|" numa expressão XPath você pode selecionar vários 
caminhos. 
A expressão XPath a seguir seleciona todos os elementos title e artist do elemento 
cd do elemento catalog: /catalog/cd/title | /catalog/cd/artist 
A expressão XPath a seguir seleciona todos os elementos title e artist do 
documento: //title | //artist 
A expressão XPath a seguir seleciona todos os elementos title, artist e price do 
documento: //title | //artist | //price 
A expressão XPath a seguir seleciona todos os elementos title do elemento cd do 
elemento catalog, e todos os elementos artist no documento: /catalog/cd/title | 
//artist
Atributos no XPath 
 Esta expressão XPath seleciona todos os atributos chamados country: //@country 
Esta expressão XPath seleciona todos os elementos cd que tem um atributo 
chamado country: //cd[@country] 
Esta expressão XPath seleciona todos os elementos cd que tem algum 
atributo: //cd[@*] 
Esta expressão XPath seleciona todos os elementos cd que tem um atributo 
chamado country com valor 'UK': //cd[@country='UK']
Xquery: FLWOR Expressions 
FOR-LET-WHERE-ORDERBY-RETURN = FLWOR 
FOR/LET Clauses 
List of tuples 
WHERE Clause 
List of tuples 
ORDERBY/RETURN Clause 
Instance of XQuery data model
Xquery: For vs Let 
 FOR $x IN list-expr 
 Binds $x in turn to each value in the list expression. 
 LET $x = list-expr 
 Binds $x to the entire list expression, 
 Useful for common sub-expressions and for aggregations.
For 
 FOR iterates over an input sequence and calculates some value for each item in 
that sequence, returning a sequence obtained by concatenating the results of these 
calculations. 
 In simple cases there is one output item for every input item. So: 
for $n in (1 to 10) 
return $n * $n 
 Returns the sequence (1, 4, 9, 16, 25, 36, 49, 64, 81, 100).
Let 
 The XQuery LET clause simply declares a variable and gives it 
a value: 
let $maxCredit := 3000 
let $overdrawnCustomers := //customer[overdraft > $maxCredit] 
return count($overdrawnCustomers) 
 In this example you can simply replace each variable reference 
by the expression that provides the expression's value. 
 This means that the result is the same as: 
count(//customer[overdraft > 3000])
Exemplo 1: 
FOR $x IN document("bib.xml")/bib/book 
RETURN <result> $x </result> 
Returns: 
<result> <book>...</book></result> 
<result> <book>...</book></result> 
<result> <book>...</book></result> 
... 
LET $x IN document("bib.xml")/bib/book 
RETURN <result> $x </result> 
FOR generates a list of bindings 
of $x to each book element in 
the bib. 
Returns: 
<result> <book>...</book> 
<book>...</book> 
<book>...</book> 
... 
</result> 
LET generates a single binding 
of $x to the list of book 
elements in the bib.
Exemplo 2: 
Find all book titles published after 1995: 
FOR $x IN document("bib.xml")/bib/book 
WHERE $x/year > 1995 
RETURN $x/title 
Result: 
<title> abc </title> 
<title> def </title> 
<title> ghi </title>
Exemplo 3: 
For each author of a book by Morgan Kaufmann, 
list all books they have published: 
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 = a function that eliminates duplicates (after 
converting inputs to atomic values).
Exemplo 4: 
<result> 
<author>Jones</author> 
<title> abc </title> 
<title> def </title> 
</result> 
<result> 
<author> Smith </author> 
<title> ghi </title> 
</result> 
Observe how the nested 
structure of result 
elements is determined by 
the nested structure of the 
query. 
FOR $t IN /bib/book[author=$a]/title
Where 
 Primeiro defina todas as tabelas de interesse e depois defina o where: 
for $genre in //genre/choice 
for $video in //video 
for $actorRefs in $video/actorRef 
for $actor in //actor 
where $video/genre = $genre and $actor/@id = $actorRefs 
return concat($genre, ": ", $actor)
Exemplo 5 
<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> 
For each publisher p 
- Let the list of books 
published by p be b 
Count the # books in 
b, and return p if b > 
100 
count = (aggregate) function that returns the number of elements
Exemplo 6 
Find books whose price is larger than average: 
LET $a=avg(document("bib.xml")/bib/book/price) 
FOR $b in document("bib.xml")/bib/book 
WHERE $b/price > $a 
RETURN $b 
avg() == aggregate function
Orderby 
 Muito semelhante ao SQL padrão 
for $x in //video 
order by $x/year ascending, number($x/user-rating) descending 
return $x/title
Return 
 O return no Xquery define quais resultados serão exibidos, por exemplo: 
for $v in //video[genre="comedy"] 
return //actor[@id = $v/actorRef]
Sorting 
<publisher_list> 
FOR $p IN distinct(document("bib.xml")//publisher) 
ORDERBY $p 
RETURN <publisher> <name> $p/text() </name> , 
FOR $b IN document("bib.xml")//book[publisher = $p] 
ORDERBY $b/price DESCENDING 
RETURN <book> 
$b/title , 
$b/price 
</book> 
</publisher> 
</publisher_list>
If-then-else 
FOR $h IN //holding 
ORDERBY $h/title 
RETURN <holding> 
$h/title, 
IF $h/@type = "Journal" 
THEN $h/editor 
ELSE $h/author 
</holding>

Mais conteúdo relacionado

Mais procurados (20)

Apostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLTApostila XML, DTD, XSD e XSLT
Apostila XML, DTD, XSD e XSLT
 
Aula de DTD Definição do Tipo de Documento
Aula de DTD Definição do Tipo de DocumentoAula de DTD Definição do Tipo de Documento
Aula de DTD Definição do Tipo de Documento
 
Aula Introdução a Linguagem XML
Aula Introdução a Linguagem XMLAula Introdução a Linguagem XML
Aula Introdução a Linguagem XML
 
XML - Introdução
XML - IntroduçãoXML - Introdução
XML - Introdução
 
XML & HTML
XML & HTMLXML & HTML
XML & HTML
 
Xml pucminas2013
Xml pucminas2013Xml pucminas2013
Xml pucminas2013
 
XML - eXtensible Markup Language
XML - eXtensible Markup LanguageXML - eXtensible Markup Language
XML - eXtensible Markup Language
 
01- Introdução ao XML
01- Introdução ao XML01- Introdução ao XML
01- Introdução ao XML
 
Pro php and xml web services xml canonical
Pro php and xml web services   xml canonicalPro php and xml web services   xml canonical
Pro php and xml web services xml canonical
 
Aplicando Transformação em XML usando XSLT e XSL-FO - 4
Aplicando Transformação em XML usando XSLT e XSL-FO - 4Aplicando Transformação em XML usando XSLT e XSL-FO - 4
Aplicando Transformação em XML usando XSLT e XSL-FO - 4
 
Linguagem SQL
Linguagem SQLLinguagem SQL
Linguagem SQL
 
A e xtensible markup language (xml)
A e xtensible markup language (xml)A e xtensible markup language (xml)
A e xtensible markup language (xml)
 
Xml
XmlXml
Xml
 
Aula Xml Schema - XSD
Aula Xml Schema - XSDAula Xml Schema - XSD
Aula Xml Schema - XSD
 
Aplicando Transformação em XML usando XSLT e XSL-FO - 2
Aplicando Transformação em XML usando XSLT e XSL-FO - 2Aplicando Transformação em XML usando XSLT e XSL-FO - 2
Aplicando Transformação em XML usando XSLT e XSL-FO - 2
 
Introdução ao XML
Introdução ao XMLIntrodução ao XML
Introdução ao XML
 
Tp 4 xml
Tp 4   xmlTp 4   xml
Tp 4 xml
 
Introdução ao SQL
Introdução ao SQLIntrodução ao SQL
Introdução ao SQL
 
Sql - introdução
Sql -  introduçãoSql -  introdução
Sql - introdução
 
A Estrutura da Linguagem SQL
A Estrutura da Linguagem SQLA Estrutura da Linguagem SQL
A Estrutura da Linguagem SQL
 

Destaque

Improvement of no sql technology for relational databases v2
Improvement of no sql technology for relational databases v2Improvement of no sql technology for relational databases v2
Improvement of no sql technology for relational databases v2Tsendsuren Munkhdalai
 
Arquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaArquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaSergio Crespo
 
XML - Data Modeling
XML - Data ModelingXML - Data Modeling
XML - Data ModelingJoel Briza
 
Curso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-CCurso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-CMaurício Linhares
 
Regulamento jornada PRINCE2
Regulamento jornada PRINCE2Regulamento jornada PRINCE2
Regulamento jornada PRINCE2Fernando Palma
 
7. Key-Value Databases: In Depth
7. Key-Value Databases: In Depth7. Key-Value Databases: In Depth
7. Key-Value Databases: In DepthFabio Fumarola
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documentoAlex Martins
 
Introduction to column oriented databases
Introduction to column oriented databasesIntroduction to column oriented databases
Introduction to column oriented databasesArangoDB Database
 
Introduction to Graph Databases
Introduction to Graph DatabasesIntroduction to Graph Databases
Introduction to Graph DatabasesMax De Marzi
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafosPriscila Mayumi
 
Oracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisOracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisDiego Lusa
 
9. Document Oriented Databases
9. Document Oriented Databases9. Document Oriented Databases
9. Document Oriented DatabasesFabio Fumarola
 

Destaque (15)

Improvement of no sql technology for relational databases v2
Improvement of no sql technology for relational databases v2Improvement of no sql technology for relational databases v2
Improvement of no sql technology for relational databases v2
 
Arquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemanticaArquitetura: XML + RDF ate WebSemantica
Arquitetura: XML + RDF ate WebSemantica
 
Xml100 1
Xml100 1Xml100 1
Xml100 1
 
XML - Data Modeling
XML - Data ModelingXML - Data Modeling
XML - Data Modeling
 
Curso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-CCurso de desenvolvimento de aplicações para iOS com Objective-C
Curso de desenvolvimento de aplicações para iOS com Objective-C
 
Regulamento jornada PRINCE2
Regulamento jornada PRINCE2Regulamento jornada PRINCE2
Regulamento jornada PRINCE2
 
Surgimento da Internet
Surgimento da InternetSurgimento da Internet
Surgimento da Internet
 
7. Key-Value Databases: In Depth
7. Key-Value Databases: In Depth7. Key-Value Databases: In Depth
7. Key-Value Databases: In Depth
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
Algumas notas sobre pascal
Algumas notas sobre pascalAlgumas notas sobre pascal
Algumas notas sobre pascal
 
Introduction to column oriented databases
Introduction to column oriented databasesIntroduction to column oriented databases
Introduction to column oriented databases
 
Introduction to Graph Databases
Introduction to Graph DatabasesIntroduction to Graph Databases
Introduction to Graph Databases
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafos
 
Oracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciaisOracle XML DB - Conceitos iniciais
Oracle XML DB - Conceitos iniciais
 
9. Document Oriented Databases
9. Document Oriented Databases9. Document Oriented Databases
9. Document Oriented Databases
 

Semelhante a Banco de Dados XML

Semelhante a Banco de Dados XML (20)

XML_WS.pdf
XML_WS.pdfXML_WS.pdf
XML_WS.pdf
 
12 sax
12 sax12 sax
12 sax
 
Parte5 xml
Parte5 xmlParte5 xml
Parte5 xml
 
Tecnologias XML e XML no SQL Server 2016
Tecnologias XML eXML no SQL Server 2016Tecnologias XML eXML no SQL Server 2016
Tecnologias XML e XML no SQL Server 2016
 
XHTML Básico
XHTML BásicoXHTML Básico
XHTML Básico
 
XML - Parte 2
XML - Parte 2XML - Parte 2
XML - Parte 2
 
html css js ajax exercícios de programação
html css js ajax exercícios de programaçãohtml css js ajax exercícios de programação
html css js ajax exercícios de programação
 
Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016Suporte XML nativo no SQL Server 2014/2016
Suporte XML nativo no SQL Server 2014/2016
 
XML, Webservice e RSS
XML, Webservice e RSSXML, Webservice e RSS
XML, Webservice e RSS
 
Java e XML
Java e XMLJava e XML
Java e XML
 
JustJava 2004: JAXB
JustJava 2004: JAXBJustJava 2004: JAXB
JustJava 2004: JAXB
 
Programação Web com HTML e CSS
Programação Web com HTML e CSSProgramação Web com HTML e CSS
Programação Web com HTML e CSS
 
Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]Desenvolvendo com Silverlight para WP7 Mango [Update]
Desenvolvendo com Silverlight para WP7 Mango [Update]
 
Trabalho de HTML, CSS e JavaScript - Eduardo Bertolucci - UNOPAR 2010
Trabalho de HTML, CSS e JavaScript - Eduardo Bertolucci - UNOPAR 2010Trabalho de HTML, CSS e JavaScript - Eduardo Bertolucci - UNOPAR 2010
Trabalho de HTML, CSS e JavaScript - Eduardo Bertolucci - UNOPAR 2010
 
HTML
HTMLHTML
HTML
 
Angular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & DesktopAngular >= 2 - One Framework Mobile & Desktop
Angular >= 2 - One Framework Mobile & Desktop
 
Workshop Django
Workshop DjangoWorkshop Django
Workshop Django
 
Oracle XML DB
Oracle XML DBOracle XML DB
Oracle XML DB
 
Java e Cloud Computing
Java e Cloud ComputingJava e Cloud Computing
Java e Cloud Computing
 
Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01
 

Mais de Tiago R. Sampaio

Sincronização de um sistema distribuído
Sincronização de um sistema distribuídoSincronização de um sistema distribuído
Sincronização de um sistema distribuídoTiago R. Sampaio
 
Padrão de projeto de software Composite
Padrão de projeto de software CompositePadrão de projeto de software Composite
Padrão de projeto de software CompositeTiago R. Sampaio
 
Web Semantica - Simple HTML Ontology Extension SHOE
Web Semantica - Simple HTML Ontology Extension SHOEWeb Semantica - Simple HTML Ontology Extension SHOE
Web Semantica - Simple HTML Ontology Extension SHOETiago R. Sampaio
 
Linguagem de Programação PERL
Linguagem de Programação PERLLinguagem de Programação PERL
Linguagem de Programação PERLTiago R. Sampaio
 

Mais de Tiago R. Sampaio (8)

Linux - Um estudo de caso
Linux - Um estudo de casoLinux - Um estudo de caso
Linux - Um estudo de caso
 
Sincronização de um sistema distribuído
Sincronização de um sistema distribuídoSincronização de um sistema distribuído
Sincronização de um sistema distribuído
 
Padrão de projeto de software Composite
Padrão de projeto de software CompositePadrão de projeto de software Composite
Padrão de projeto de software Composite
 
Web Semantica - Simple HTML Ontology Extension SHOE
Web Semantica - Simple HTML Ontology Extension SHOEWeb Semantica - Simple HTML Ontology Extension SHOE
Web Semantica - Simple HTML Ontology Extension SHOE
 
Diagrama UML Pergamum
Diagrama UML PergamumDiagrama UML Pergamum
Diagrama UML Pergamum
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
Linguagem de Programação PERL
Linguagem de Programação PERLLinguagem de Programação PERL
Linguagem de Programação PERL
 
Bioinformática
BioinformáticaBioinformática
Bioinformática
 

Banco de Dados XML

  • 1. Banco de Dados XML Tiago Roberti Sampaio
  • 2. Introdução ao XML  eXtensible Markup Language – O recomendado pela W3C para usar como linguagem de marcação.  Documentos organizados hierarquicamente. **W3C, ou World Wide Web Consortium, é um consórcio de empresas de tecnologia que visa padronizar a criação e interpretação de conteúdos para websites.
  • 3. Linguagem de Marcação?  HTML – HyperText Markup Language é uma linguagem para organizar e formatar um website.  XML – eXtended Markup Language padroniza uma sequência de dados com o objetivo de organizar, separar o conteúdo e integrá-lo com outras linguagens.
  • 4. Características do XML  Sintaxe simples.  Compartilhamento de informações entre diferentes computadores e aplicações.  Integração com outras linguagens.  Portabilidade: um BD pode escrever um arquivo XML para que outro BD consiga lê-lo.
  • 6. XML vs Relacional phone phone phone { row: { name: “John”, phone: 3634 }, row: { name: “Sue”, phone: 6343 }, row: { name: “Dick”, phone: 6363 }} name phone John 3634 Sue 6343 Dick 6363 row row row name name name “John” 3634 “Sue” 6343 “Dick” 6363 Relation … in XML
  • 7. Projeto de um BD XML  Especificação de requisitos: levantamento das necessidades de dados.  Modelagem conceitual: uso de um modelo de dados convecional, ex. ER.  Modelagem lógica: uso de um modelo de dados baseado em grafo, adequado à representação de uma hierarquia XML.  Modelagem física: especificação do esquema XML.
  • 8. Banco de Dados com suporte XML  Tem ferramentas que convertem o conteúdo XML para um banco de dados tradicional.  Aceita XML como entrada  Rederiza XML como saída  Ex: Postgre tem um biblioteca interna de manipulação XML
  • 9. Documentos orientados a registros  <endereço>  <rua>Beira-Mar</rua><numero>104</numero><complemento>apto 203</complemento>  <bairro>centro</bairro><cidade>Florianópolis</cidade> <cep>88010- 600</cep>  </endereço>  <endereço>  <rua>Lauro Linhares</rua><numero>761</numero><bairro>trindade</bairro>  <cidade>Florianópolis</cidade><cep>88040-900</cep>  </endereço>
  • 10. Banco de Dados com XML nativo  Define um modelo lógica para um documento XML, e armazena e recupera de acordo com este modelo.  Possui um documento como unidade fundamental de armazenamento lógico.  Especilizado em armazenar dados XML, armazena todos os componenetes do modelo XML (elementos, atributos, etc).
  • 11. Benefícios  Suporta transações.  Acesso integrado a legados.  Suporte à distribuição.  Escalabilidade para grandes volumes.  Tem melhor desempenho que SGBDs padrão.
  • 12. BD com suporte XML X nativo XML  Qual a vantagem de cada um?
  • 13. BD XML X BD comum  Qual a vantagem de se utilizar um BD XML?
  • 14. BD XML X BD comum  Mas... Por que utilizar XML? Vamos supor uma empresa X que possui um conjunto de dados que precisa ser disponibilizados para a empresa parceira Y. Como fazer isso de maneira simples?
  • 15. XML! <?xml version=”1.0″ encoding=”ISO-8859-1″ ?> <pedidos> <pedido id=”1″> <item descrição=”1″ qtde=”100″ /> <item descrição=”2″ qtde=”20″/> </pedido> <pedido id=”2″> <item descrição=”1″ qtde=”25″ /> <item descrição=”3″ qtde=”10″/> <item descrição=”4″ qtde=”50″/> </pedido> <descrições> <descrição id=”1″>Pacote de papel sulfite</descrição> <descrição id=”2″>Pacote de papel carbono</descrição> <descrição id=”3″>Caixa de grampos</descrição> <descrição id=”4″>Borracha branca</descrição> </descrições> </pedidos>
  • 16. Por que não usar XML?  Suponha que exista a necessidade de se transmitir o valor de determinados items, e cada item possui um identificador. E agora?
  • 18. Mas...  E se eu precisasse passar o valor de milhares de itens?  A quantidade de informação real (somente dos dados) que está sendo fornecida é bem menor comparada à quantidade de informações “extras” (tags) contidos no arquivo.  E também, não existe necessidade alguma dessa lista ser descrita hierarquicamente.
  • 19. Uso ou não uso?
  • 20. Mapeamento na “mão” de um BD XML
  • 21. Técnica Edge  Consiste em armazenar todos os documentos em uma única tabela chamada Edge  Edge(source, ordinal, name, flag, target) Id que indica o documento XML N º para preservar a ordem entre os elementos de um mesmo documento. Nome do elemento ou atributo
  • 22. Técnica Edge  Consiste em armazenar todos os documentos em uma única tabela chamada Edge  Edge(source, ordinal, name, flag, target)  Para armazenar os valores, uma tabela Vpara cada tipo  Vtype(vid, value)
  • 24. SGBDs XML Híbridos  Suporte a armazenamento de docs. XML em sua forma nativa, ao mesmo tempo em que mantém suporte a armazenamento de dados relacionais/objeto-relacionais  Oracle: tem suporte a SQLX
  • 25. SELECT SQLX  SELECTXMLElement(“departments",XMLElement(“de pt",XMLElement(“number", DEPTNO),XMLElement(“name", DNAME),XMLElement(“location", LOC)))FROM DEPT; <departments><dept><number>10</number> <name>ACCOUNTING</name><location>NEW YORK</location> </dept></departments><departments> <dept><number>20</number><name>RESEARCH</name> <location>DALLAS</location></dept></departments >
  • 26. XMLElement()  Usado para criar elementos XML  XMLELEMENT ( [NAME] id [, XMLAttributes() ] [, ( instância_elemento_XML )+ ] )
  • 27. XMLElement() SELECT XMLELEMENT("NOME_CLIENTE" , CLI.CNOME ) FROM CLIENTES_REL CLI WHERE CLI.CESTADO = 'CE' <NOME_CLIENTE>Lineu</NOME_CLIENTE> <NOME_CLIENTE>Valdiana</NOME_CLIENTE>
  • 28. XMLElement() SELECT XMLELEMENT("CLIENTE_CEARA", XMLELEMENT("NOME", CLI.CNOME ), XMLELEMENT("CIDADE", CLI.CCIDADE ) ) FROM CLIENTES_REL CLI WHERE CLI.CESTADO = 'CE' <CLIENTE_CEARA> <NOME>Lineu</NOME> <CIDADE>Fortaleza</CIDADE> </CLIENTE_CEARA> <CLIENTE_CEARA> <NOME>Valdiana</NOME> <CIDADE>Fortaleza</CIDADE> </CLIENTE_CEARA>
  • 29. XMLAttributes()  Define os atributos de um elemento  XMLATTRIBUTES ( expressão_valor [AS alias] [, value_expr [AS alias]* )
  • 30. XMLAttributes() SELECT XMLELEMENT("CLIENTE_CEARA", XMLATTRIBUTES( CLI.CCODIGO AS "CODIGO" ), XMLELEMENT("NOME", CLI.CNOME ), XMLELEMENT("CIDADE", CLI.CCIDADE ) ) FROM CLIENTES_REL CLI WHERE CLI.CESTADO = 'CE' <CLIENTE_CEARA CODIDO="1"> <NOME>Lineu</NOME> <CIDADE>Fortaleza</CIDADE> </CLIENTE_CEARA> <CLIENTE_CEARA CODIDO="3"> <NOME>Valdiana</NOME> <CIDADE>Fortaleza</CIDADE> </CLIENTE_CEARA>
  • 31. XMLForest()  Gera uma lista de elementos XML a partir de uma lista de expressões de valor e seus aliases opcionais. Valores nulos não geram elementos XML.  XMLFOREST ( expressão_valor [AS alias] [, expressão_valor [AS alias] ]* )
  • 32. XMLForest() SELECT XMLFOREST( CLI.CNOME AS "NOME", CLI.CCIDADE AS "CIDADE", CLI.CEP AS "CEP" ) FROM CLIENTES_REL CLI WHERE CLI.CESTADO = 'CE' <NOME>Lineu</NOME> <CIDADE>Fortaleza</CIDADE> <CEP>60356-030</CEP> <NOME>Valdiana</NOME> <CIDADE>Fortaleza</CIDADE> <CEP>60486-025</CEP>
  • 33. XMLAgg()  Gera uma lista de elementos XML a partir de um agrupamento (GROUP BY). Se nenhum GROUP BY for especificado, é retornado um agregado XML para todas as cláusulas da consulta.  XMLAGG ( instância_elemento_XML [ GROUP BY lista_atributos ] )
  • 34. XMLAgg() SELECT XMLELEMENT("CLIENTES", XMLATTRIBUTES(CLI.CCIDADE AS "CIDADE") XMLAGG( XMLELEMENT("CLIENTE", CLI.CNOME ) ) ) FROM CLIENTES_REL CLI GROUP BY CLI.CCIDADE; <CLIENTES CIDADE="FORTALEZA"> <CLIENTE>Lineu</CLIENTE> <CLIENTE>Valdiana</CLIENTE> </CLIENTES> <CLIENTES CIDADE="SOBRAL"> <CLIENTE>Marta</CLIENTE> <CLIENTE>Joana</CLIENTE> </CLIENTES>
  • 35. XMLAgg() SELECT XMLELEMENT("CLIENTES", XMLAGG( XMLELEMENT("CLIENTE", CLI.CNOME ) ) ) FROM CLIENTES_REL CLI; <CLIENTES> <CLIENTE>Lineu</CLIENTE> <CLIENTE>Valdiana</CLIENTE> <CLIENTE>Marta</CLIENTE> <CLIENTE>Joana</CLIENTE> </CLIENTES>
  • 36. XMLConcat()  Gera um único fragmento XML a partir dos argumentos  XMLConcat ( instância_elemento_XML [, instância_elemento_XML ]* )
  • 37. XMLConcat() SELECT XMLELEMENT("PRODUTO_NOME", PROD.PNOME), XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO) FROM PRODUTOS_REL PROD XMLELEMENT("PRODUTO_NOME", PROD.PNOME) XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO) <PRODUTO_NOME>Monitor</PRODUTO_NOME> <PRODUTO_PRECO>589,50</PRODUTO_PRECO> <PRODUTO_NOME>Mouse</PRODUTO_NOME> <PRODUTO_PRECO>50,25</PRODUTO_PRECO> <PRODUTO_NOME>Teclado</PRODUTO_NOME> <PRODUTO_PRECO>165,88</PRODUTO_PRECO>
  • 38. XMLConcat() SELECT XMLCONCAT( XMLELEMENT("PRODUTO_NOME", PROD.PNOME), XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO) ) FROM PRODUTOS_REL PROD XMLCONCAT(XMLELEMENT("PRODUTO_NOME", PROD.PNOME), XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO)) <PRODUTO_NOME>Monitor</PRODUTO_NOME> <PRODUTO_PRECO>589,50</PRODUTO_PRECO> <PRODUTO_NOME>Mouse</PRODUTO_NOME> <PRODUTO_PRECO>50,25</PRODUTO_PRECO> <PRODUTO_NOME>Teclado</PRODUTO_NOME> <PRODUTO_PRECO>165,88</PRODUTO_PRECO>
  • 39. Outras Funções  XMLElement() Creates an XML Element.  XMLForest()Creates an XML Fragment from passed-in components.  XMLColAttVal() Creates an XML fragment and then expands the resulting XML so that each XML fragment has the name "column" with the attribute "name"  ExtractValue() Takes as arguments anXMLTypeinstance and an XPathexpression and returns a scalar value of the resultant node.  XMLTransform() Takes as arguments anXMLTypeinstance and an XSL style sheet, which is itself a form ofXMLTypeinstance. It applies the style sheet to the instance and returns anXMLType.  XMLSequence() Takes input and returns either a varrayof the top-level nodes in theXMLType, or anXMLSequencetype an XML document for each row of the cursor.  XMLConcat() Takes as input a series ofXMLTypeinstances, concatenates the series of elements for each row, and returns the concatenated series.  UpdateXML() Takes as arguments anXMLTypeinstance and an XPath-value pair, and returns anXMLTypeinstance with the updated value.
  • 40. XPath  Os principais operadores da XPath são / e //. O primeiro serve para dar um passo na árvore XML, enquanto o segundo serve para pular vários níveis de uma só vez. Funciona de maneira parecida como se fosse uma árvore de diretórios. O resultado de cada expressão XPath é um conjunto de elementos especificados pelo caminho.
  • 41. XPath <?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd country="USA"> <title>Empire Burlesque</title> <artist>Bob Dylan</artist> <price>10.90</price> </cd> <cd country="UK"> <title>Hide your heart</title> <artist>Bonnie Tyler</artist> <price>9.90</price> </cd> <cd country="USA"> <title>Greatest Hits</title> <artist>Dolly Parton</artist> <price>9.90</price> </cd> </catalog>  A expressão XPath abaixo seleciona o elemento RAIZ catalog: /catalog  A expressão XPath abaixo seleciona todos os elementos cd do elemento catalog: /catalog/cd  A expressão XPath abaixo seleciona todos os elementos price de todos os elementos cd do elemento catalog: /catalog/cd/price
  • 42. Xpath: Selecionando elementos desconhecidos  A expressão XPath a seguir seleciona todos os elementos filhos de todos os elementos cd do elemento catalog: /catalog/cd/* A expressão XPath a seguir seleciona todos os elementos price que são elementos netos do elemento catalog: /catalog/*/price A expressão XPath a seguir seleciona todos os elementos price que têm dois ancestrais: /*/*/price A expressão XPath a seguir seleciona todos os elementos no documento: //*
  • 43. Xpath: Selecionando seções  Usando-se colchetes numa expressão XPath você pode especificar um elemento adiante.  A expressão XPath a seguir seleciona o primeiro elemento cd filho do elemento catalog: /catalog/cd[1] A expressão XPath a seguir seleciona o último elemento cd filho do elemento catalog (Nota: não existe a função first()): /catalog/cd[last()] A expressão XPath a seguir seleciona todos os elementos cd do elemento catalog que tem um elemento price: /catalog/cd[price] A expressão XPath a seguir seleciona todos os elementos cd do elemento catalog que tem um elemento price com valor de 10.90: /catalog/cd[price=10.90] A expressão XPath a seguir seleciona todos os elementos price de todos os elementos cd do elemento catalog que tem um elemento price com valor de 10.90: /catalog/cd[price=10.90]/price
  • 44. Xpath: Selecionando vários caminhos  Usando o operador "|" numa expressão XPath você pode selecionar vários caminhos. A expressão XPath a seguir seleciona todos os elementos title e artist do elemento cd do elemento catalog: /catalog/cd/title | /catalog/cd/artist A expressão XPath a seguir seleciona todos os elementos title e artist do documento: //title | //artist A expressão XPath a seguir seleciona todos os elementos title, artist e price do documento: //title | //artist | //price A expressão XPath a seguir seleciona todos os elementos title do elemento cd do elemento catalog, e todos os elementos artist no documento: /catalog/cd/title | //artist
  • 45. Atributos no XPath  Esta expressão XPath seleciona todos os atributos chamados country: //@country Esta expressão XPath seleciona todos os elementos cd que tem um atributo chamado country: //cd[@country] Esta expressão XPath seleciona todos os elementos cd que tem algum atributo: //cd[@*] Esta expressão XPath seleciona todos os elementos cd que tem um atributo chamado country com valor 'UK': //cd[@country='UK']
  • 46. Xquery: FLWOR Expressions FOR-LET-WHERE-ORDERBY-RETURN = FLWOR FOR/LET Clauses List of tuples WHERE Clause List of tuples ORDERBY/RETURN Clause Instance of XQuery data model
  • 47. Xquery: For vs Let  FOR $x IN list-expr  Binds $x in turn to each value in the list expression.  LET $x = list-expr  Binds $x to the entire list expression,  Useful for common sub-expressions and for aggregations.
  • 48. For  FOR iterates over an input sequence and calculates some value for each item in that sequence, returning a sequence obtained by concatenating the results of these calculations.  In simple cases there is one output item for every input item. So: for $n in (1 to 10) return $n * $n  Returns the sequence (1, 4, 9, 16, 25, 36, 49, 64, 81, 100).
  • 49. Let  The XQuery LET clause simply declares a variable and gives it a value: let $maxCredit := 3000 let $overdrawnCustomers := //customer[overdraft > $maxCredit] return count($overdrawnCustomers)  In this example you can simply replace each variable reference by the expression that provides the expression's value.  This means that the result is the same as: count(//customer[overdraft > 3000])
  • 50. Exemplo 1: FOR $x IN document("bib.xml")/bib/book RETURN <result> $x </result> Returns: <result> <book>...</book></result> <result> <book>...</book></result> <result> <book>...</book></result> ... LET $x IN document("bib.xml")/bib/book RETURN <result> $x </result> FOR generates a list of bindings of $x to each book element in the bib. Returns: <result> <book>...</book> <book>...</book> <book>...</book> ... </result> LET generates a single binding of $x to the list of book elements in the bib.
  • 51. Exemplo 2: Find all book titles published after 1995: FOR $x IN document("bib.xml")/bib/book WHERE $x/year > 1995 RETURN $x/title Result: <title> abc </title> <title> def </title> <title> ghi </title>
  • 52. Exemplo 3: For each author of a book by Morgan Kaufmann, list all books they have published: 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 = a function that eliminates duplicates (after converting inputs to atomic values).
  • 53. Exemplo 4: <result> <author>Jones</author> <title> abc </title> <title> def </title> </result> <result> <author> Smith </author> <title> ghi </title> </result> Observe how the nested structure of result elements is determined by the nested structure of the query. FOR $t IN /bib/book[author=$a]/title
  • 54. Where  Primeiro defina todas as tabelas de interesse e depois defina o where: for $genre in //genre/choice for $video in //video for $actorRefs in $video/actorRef for $actor in //actor where $video/genre = $genre and $actor/@id = $actorRefs return concat($genre, ": ", $actor)
  • 55. Exemplo 5 <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> For each publisher p - Let the list of books published by p be b Count the # books in b, and return p if b > 100 count = (aggregate) function that returns the number of elements
  • 56. Exemplo 6 Find books whose price is larger than average: LET $a=avg(document("bib.xml")/bib/book/price) FOR $b in document("bib.xml")/bib/book WHERE $b/price > $a RETURN $b avg() == aggregate function
  • 57. Orderby  Muito semelhante ao SQL padrão for $x in //video order by $x/year ascending, number($x/user-rating) descending return $x/title
  • 58. Return  O return no Xquery define quais resultados serão exibidos, por exemplo: for $v in //video[genre="comedy"] return //actor[@id = $v/actorRef]
  • 59. Sorting <publisher_list> FOR $p IN distinct(document("bib.xml")//publisher) ORDERBY $p RETURN <publisher> <name> $p/text() </name> , FOR $b IN document("bib.xml")//book[publisher = $p] ORDERBY $b/price DESCENDING RETURN <book> $b/title , $b/price </book> </publisher> </publisher_list>
  • 60. If-then-else FOR $h IN //holding ORDERBY $h/title RETURN <holding> $h/title, IF $h/@type = "Journal" THEN $h/editor ELSE $h/author </holding>