Banco de Dados XML

470 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
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
470
No SlideShare
0
A partir de incorporações
0
Número de incorporações
56
Ações
Compartilhamentos
0
Downloads
8
Comentários
0
Gostaram
1
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>

×