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. 
 Documen...
Linguagem de Marcação? 
 HTML – HyperText Markup Language é uma linguagem para organizar e formatar 
um website. 
 XML –...
Características do XML 
 Sintaxe simples. 
 Compartilhamento de informações entre diferentes computadores e aplicações. ...
Aplicações para o XML
XML vs Relacional 
phone phone phone 
{ row: { name: “John”, phone: 3634 }, 
row: { name: “Sue”, phone: 6343 }, 
row: { na...
Projeto de um BD XML 
 Especificação de requisitos: levantamento das necessidades de dados. 
 Modelagem conceitual: uso ...
Banco de Dados com suporte XML 
 Tem ferramentas que convertem o conteúdo XML para um banco de dados 
tradicional. 
 Ace...
Documentos orientados a registros 
 <endereço> 
 <rua>Beira-Mar</rua><numero>104</numero><complemento>apto 
203</complem...
Banco de Dados com XML nativo 
 Define um modelo lógica para um documento XML, e armazena e recupera de 
acordo com este ...
Benefícios 
 Suporta transações. 
 Acesso integrado a legados. 
 Suporte à distribuição. 
 Escalabilidade para grandes...
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 
...
XML! 
<?xml version=”1.0″ 
encoding=”ISO-8859-1″ ?> 
<pedidos> 
<pedido id=”1″> 
<item descrição=”1″ qtde=”100″ /> 
<item ...
Por que não usar XML? 
 Suponha que exista a necessidade de se transmitir o valor de determinados items, 
e cada item pos...
XML novamente...
Mas... 
 E se eu precisasse passar o valor de milhares de itens? 
 A quantidade de informação real (somente dos dados) q...
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, ...
Técnica Edge 
 Consiste em armazenar todos os documentos em uma única tabela chamada Edge 
 Edge(source, ordinal, name, ...
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 ar...
SELECT SQLX 
 SELECTXMLElement(“departments",XMLElement(“de 
pt",XMLElement(“number", 
DEPTNO),XMLElement(“name", 
DNAME)...
XMLElement() 
 Usado para criar elementos XML 
 XMLELEMENT ( 
[NAME] id 
[, XMLAttributes() ] 
[, ( instância_elemento_X...
XMLElement() 
SELECT 
XMLELEMENT("NOME_CLIENTE" , 
CLI.CNOME 
) 
FROM CLIENTES_REL CLI 
WHERE CLI.CESTADO = 'CE' 
<NOME_CL...
XMLElement() 
SELECT XMLELEMENT("CLIENTE_CEARA", 
XMLELEMENT("NOME", 
CLI.CNOME 
), 
XMLELEMENT("CIDADE", 
CLI.CCIDADE 
) ...
XMLAttributes() 
 Define os atributos de um elemento 
 XMLATTRIBUTES ( 
expressão_valor [AS alias] 
[, value_expr [AS al...
XMLAttributes() 
SELECT XMLELEMENT("CLIENTE_CEARA", 
XMLATTRIBUTES( 
CLI.CCODIGO AS "CODIGO" 
), 
XMLELEMENT("NOME", 
CLI....
XMLForest() 
 Gera uma lista de elementos XML a partir de uma lista de expressões de valor e 
seus aliases opcionais. Val...
XMLForest() 
SELECT XMLFOREST( 
CLI.CNOME AS "NOME", 
CLI.CCIDADE AS "CIDADE", 
CLI.CEP AS "CEP" 
) 
FROM CLIENTES_REL CLI...
XMLAgg() 
 Gera uma lista de elementos XML a partir de um agrupamento (GROUP BY). Se 
nenhum GROUP BY for especificado, é...
XMLAgg() 
SELECT XMLELEMENT("CLIENTES", 
XMLATTRIBUTES(CLI.CCIDADE AS "CIDADE") 
XMLAGG( 
XMLELEMENT("CLIENTE", 
CLI.CNOME...
XMLAgg() 
SELECT XMLELEMENT("CLIENTES", 
XMLAGG( 
XMLELEMENT("CLIENTE", 
CLI.CNOME ) 
) 
) 
FROM CLIENTES_REL CLI; 
<CLIEN...
XMLConcat() 
 Gera um único fragmento XML a partir dos argumentos 
 XMLConcat ( 
instância_elemento_XML 
[, instância_el...
XMLConcat() 
SELECT 
XMLELEMENT("PRODUTO_NOME", PROD.PNOME), 
XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO) 
FROM PRODUTOS_REL ...
XMLConcat() 
SELECT XMLCONCAT( 
XMLELEMENT("PRODUTO_NOME", PROD.PNOME), 
XMLELEMENT("PRODUTO_PRECO", PROD.PPRECO) 
) 
FROM...
Outras Funções 
 XMLElement() Creates an XML Element. 
 XMLForest()Creates an XML Fragment from passed-in components. 
...
XPath 
 Os principais operadores da XPath são / e //. O primeiro serve para dar um passo 
na árvore XML, enquanto o segun...
XPath 
<?xml version="1.0" encoding="ISO-8859-1"?> <catalog> <cd 
country="USA"> <title>Empire Burlesque</title> 
<artist>...
Xpath: Selecionando elementos 
desconhecidos 
 A expressão XPath a seguir seleciona todos os elementos filhos de todos os...
Xpath: Selecionando seções 
 Usando-se colchetes numa expressão XPath você pode especificar um elemento 
adiante. 
 A ex...
Xpath: Selecionando vários caminhos 
 Usando o operador "|" numa expressão XPath você pode selecionar vários 
caminhos. 
...
Atributos no XPath 
 Esta expressão XPath seleciona todos os atributos chamados country: //@country 
Esta expressão XPath...
Xquery: FLWOR Expressions 
FOR-LET-WHERE-ORDERBY-RETURN = FLWOR 
FOR/LET Clauses 
List of tuples 
WHERE Clause 
List of tu...
Xquery: For vs Let 
 FOR $x IN list-expr 
 Binds $x in turn to each value in the list expression. 
 LET $x = list-expr ...
For 
 FOR iterates over an input sequence and calculates some value for each item in 
that sequence, returning a sequence...
Let 
 The XQuery LET clause simply declares a variable and gives it 
a value: 
let $maxCredit := 3000 
let $overdrawnCust...
Exemplo 1: 
FOR $x IN document("bib.xml")/bib/book 
RETURN <result> $x </result> 
Returns: 
<result> <book>...</book></res...
Exemplo 2: 
Find all book titles published after 1995: 
FOR $x IN document("bib.xml")/bib/book 
WHERE $x/year > 1995 
RETU...
Exemplo 3: 
For each author of a book by Morgan Kaufmann, 
list all books they have published: 
FOR $a IN distinct(documen...
Exemplo 4: 
<result> 
<author>Jones</author> 
<title> abc </title> 
<title> def </title> 
</result> 
<result> 
<author> Sm...
Where 
 Primeiro defina todas as tabelas de interesse e depois defina o where: 
for $genre in //genre/choice 
for $video ...
Exemplo 5 
<big_publishers> 
FOR $p IN distinct(document("bib.xml")//publisher) 
LET $b := document("bib.xml")/book[publis...
Exemplo 6 
Find books whose price is larger than average: 
LET $a=avg(document("bib.xml")/bib/book/price) 
FOR $b in docum...
Orderby 
 Muito semelhante ao SQL padrão 
for $x in //video 
order by $x/year ascending, number($x/user-rating) descendin...
Return 
 O return no Xquery define quais resultados serão exibidos, por exemplo: 
for $v in //video[genre="comedy"] 
retu...
Sorting 
<publisher_list> 
FOR $p IN distinct(document("bib.xml")//publisher) 
ORDERBY $p 
RETURN <publisher> <name> $p/te...
If-then-else 
FOR $h IN //holding 
ORDERBY $h/title 
RETURN <holding> 
$h/title, 
IF $h/@type = "Journal" 
THEN $h/editor ...
Próximos SlideShares
Carregando em…5
×

Banco de Dados XML

436 visualizações

Publicada em

XML (eXtensible Markup Language) é uma recomendação da W3C para gerar linguagens de marcação para necessidades especiais.

É um dos subtipos da SGML (acrônimo de Standard Generalized Markup Language ou Linguagem Padronizada de Marcação Genérica) capaz de descrever diversos tipos de dados. Seu propósito principal é a facilidade de compartilhamento de informações através da internet.

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
436
No SlideShare
0
A partir de incorporações
0
Número de incorporações
52
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Banco de Dados XML

  1. 1. Banco de Dados XML Tiago Roberti Sampaio
  2. 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. 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. 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.
  5. 5. Aplicações para o XML
  6. 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. 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. 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. 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. 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. 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. 12. BD com suporte XML X nativo XML  Qual a vantagem de cada um?
  13. 13. BD XML X BD comum  Qual a vantagem de se utilizar um BD XML?
  14. 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. 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. 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?
  17. 17. XML novamente...
  18. 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. 19. Uso ou não uso?
  20. 20. Mapeamento na “mão” de um BD XML
  21. 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. 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)
  23. 23. Técnica Edge
  24. 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. 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. 26. XMLElement()  Usado para criar elementos XML  XMLELEMENT ( [NAME] id [, XMLAttributes() ] [, ( instância_elemento_XML )+ ] )
  27. 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. 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. 29. XMLAttributes()  Define os atributos de um elemento  XMLATTRIBUTES ( expressão_valor [AS alias] [, value_expr [AS alias]* )
  30. 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. 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. 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. 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. 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. 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. 36. XMLConcat()  Gera um único fragmento XML a partir dos argumentos  XMLConcat ( instância_elemento_XML [, instância_elemento_XML ]* )
  37. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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>

×