SlideShare uma empresa Scribd logo
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

PDF
XML e Banco de Dados XML Nativo
PPTX
eXtensible Markup Language (XML)
PDF
XML: Uma Introdução Prática (2001)
PDF
Introdução à XML - Serviço de Biblioteca da EEFE-USP
PDF
XML Schema (2002)
PPT
Conceitos de xml
PDF
Aplicando Transformação em XML usando XSLT e XSL-FO - 1
PDF
Aplicando Transformação em XML usando XSLT e XSL-FO - 3
XML e Banco de Dados XML Nativo
eXtensible Markup Language (XML)
XML: Uma Introdução Prática (2001)
Introdução à XML - Serviço de Biblioteca da EEFE-USP
XML Schema (2002)
Conceitos de xml
Aplicando Transformação em XML usando XSLT e XSL-FO - 1
Aplicando Transformação em XML usando XSLT e XSL-FO - 3

Mais procurados (20)

PDF
Apostila XML, DTD, XSD e XSLT
PDF
Aula de DTD Definição do Tipo de Documento
PDF
Aula Introdução a Linguagem XML
PPTX
XML - Introdução
PDF
XML & HTML
PDF
Xml pucminas2013
PPT
XML - eXtensible Markup Language
PDF
01- Introdução ao XML
DOC
Pro php and xml web services xml canonical
PDF
Aplicando Transformação em XML usando XSLT e XSL-FO - 4
PPSX
Linguagem SQL
DOCX
A e xtensible markup language (xml)
PDF
PDF
Aula Xml Schema - XSD
PDF
Aplicando Transformação em XML usando XSLT e XSL-FO - 2
ODP
Introdução ao XML
DOCX
Tp 4 xml
PDF
Introdução ao SQL
PPTX
Sql - introdução
PPTX
A Estrutura da Linguagem SQL
Apostila XML, DTD, XSD e XSLT
Aula de DTD Definição do Tipo de Documento
Aula Introdução a Linguagem XML
XML - Introdução
XML & HTML
Xml pucminas2013
XML - eXtensible Markup Language
01- Introdução ao XML
Pro php and xml web services xml canonical
Aplicando Transformação em XML usando XSLT e XSL-FO - 4
Linguagem SQL
A e xtensible markup language (xml)
Aula Xml Schema - XSD
Aplicando Transformação em XML usando XSLT e XSL-FO - 2
Introdução ao XML
Tp 4 xml
Introdução ao SQL
Sql - introdução
A Estrutura da Linguagem SQL
Anúncio

Destaque (15)

PPTX
Improvement of no sql technology for relational databases v2
PPT
Arquitetura: XML + RDF ate WebSemantica
PPTX
XML - Data Modeling
PDF
Curso de desenvolvimento de aplicações para iOS com Objective-C
PDF
Regulamento jornada PRINCE2
PPT
Surgimento da Internet
PPT
7. Key-Value Databases: In Depth
PPTX
No sql Orientado a documento
PDF
Algumas notas sobre pascal
PDF
Introduction to column oriented databases
PPTX
Introduction to Graph Databases
PPT
Banco de dados de grafos
PDF
Oracle XML DB - Conceitos iniciais
PPT
9. Document Oriented Databases
Improvement of no sql technology for relational databases v2
Arquitetura: XML + RDF ate WebSemantica
XML - Data Modeling
Curso de desenvolvimento de aplicações para iOS com Objective-C
Regulamento jornada PRINCE2
Surgimento da Internet
7. Key-Value Databases: In Depth
No sql Orientado a documento
Algumas notas sobre pascal
Introduction to column oriented databases
Introduction to Graph Databases
Banco de dados de grafos
Oracle XML DB - Conceitos iniciais
9. Document Oriented Databases
Anúncio

Semelhante a Banco de Dados XML (20)

PDF
XML_WS.pdf
PDF
12 sax
PDF
O SQL Server é um sistema de gestão de banco de dados relacional, desenvolvid...
PDF
O SQL Server é um sistema de gestão de banco de dados relacional, desenvolvid...
PPTX
Parte5 xml
PDF
Tecnologias XML e XML no SQL Server 2016
PDF
XHTML Básico
PPT
XML - Parte 2
PDF
Suporte XML nativo no SQL Server 2014/2016
PDF
XML, Webservice e RSS
PPT
Java e XML
PDF
JustJava 2004: JAXB
PDF
Programação Web com HTML e CSS
PPTX
Desenvolvendo com Silverlight para WP7 Mango [Update]
PDF
Trabalho de HTML, CSS e JavaScript - Eduardo Bertolucci - UNOPAR 2010
PPTX
PDF
Angular >= 2 - One Framework Mobile & Desktop
PDF
Workshop Django
PDF
Oracle XML DB
PDF
Java e Cloud Computing
XML_WS.pdf
12 sax
O SQL Server é um sistema de gestão de banco de dados relacional, desenvolvid...
O SQL Server é um sistema de gestão de banco de dados relacional, desenvolvid...
Parte5 xml
Tecnologias XML e XML no SQL Server 2016
XHTML Básico
XML - Parte 2
Suporte XML nativo no SQL Server 2014/2016
XML, Webservice e RSS
Java e XML
JustJava 2004: JAXB
Programação Web com HTML e CSS
Desenvolvendo com Silverlight para WP7 Mango [Update]
Trabalho de HTML, CSS e JavaScript - Eduardo Bertolucci - UNOPAR 2010
Angular >= 2 - One Framework Mobile & Desktop
Workshop Django
Oracle XML DB
Java e Cloud Computing

Mais de Tiago R. Sampaio (8)

PPTX
Linux - Um estudo de caso
PPTX
Sincronização de um sistema distribuído
PPT
Padrão de projeto de software Composite
PPT
Web Semantica - Simple HTML Ontology Extension SHOE
PPTX
Diagrama UML Pergamum
PPT
Extreme Programming
PPT
Linguagem de Programação PERL
PPT
Bioinformática
Linux - Um estudo de caso
Sincronização de um sistema distribuído
Padrão de projeto de software Composite
Web Semantica - Simple HTML Ontology Extension SHOE
Diagrama UML Pergamum
Extreme Programming
Linguagem de Programação PERL
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>