Armazenamento e Gestão de dados XML
Fortech 2002
FOR $l IN document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //livro
WHERE $l/editora/nome = “FCA” AND $l/ano > 1995
RETURN $l/autor
bdbib/livro[editora/nome=”FCA” AND ano>1995] /autor
WHERE <bdbib>
<livro>
<autor>$a</autor>
<editora>
<nome>FCA</nome>
</editora>
<ano>$n</ano>
</livro>
</bdbib> IN “www.estv.ipv.pt/biblioteca/bdbiblio.xml”, $n > 1995
CONSTRUCT $a
S2L
Artur Afonso de Sousa
Departamento de Informática
ESTV
ESTV
Descrição Geral
• A XML e algumas normas associadas.
- XSL(T), DOM/SAX, XMLXML-SCHEMA
• Armazenamento e gestão de dados XML.
• Linguagens de interrogação para dados XML.
• Conclusão.
1
Motivações
HTML
SGML
HyperText Markup Language
Standard Generalized Markup Language
• Não extensível
• Complexa
• Etiquetas não descrevem
o significado dos dados
XML
eXtensible Markup Language (W3C - 1998)
• Extensível
• Etiquetas descrevem o significado dos dados
• Simples
• Projectada para a Web
INTEROPERABILIDADE ENTRE APLICAÇÕES !
Base de Dados XML
<?xml version="1.0 ”?>
<bdbib>
<livro isbn = “_972-722-143-2”>
<título>Tecnologia de Bases de Dados</título>
<editora>
<nome>FCA</nome>
<sede>Lisboa</sede>
</editora>
<ano>1998</ano>
<preço>26</preço>
<autor>José Luís Pereira</autor>
</livro>
<livro isbn = “_972-722-193-9”>
<título>Planeamento de Sistemas de Informação</título>
<editora>
<nome>FCA</nome>
<sede>Lisboa</sede>
</editora>
<ano>1999</ano>
<preço>22</preço>
<autor>Luís Amaral</autor>
<autor>João Varajão</autor>
</livro>
<artigo classificação = “bd” referencia = “_ 972-722-143-2”>
<autor>Pedro Soares</autor>
<título>Object-Relational Databases</título>
<ano>2000</ano>
</artigo>
</bdbib>
2
Linguagem de folhas de estilo para a XML
XML – conteúdo separado da apresentação
Linguagem de folhas de estilo para apresentar os dados ao utilizador
XSL (eXtensible Stylesheet Language)
<?xml-stlylesheet type=”text/xsl” href=”identificação_da_folha_de_estilo.xsl”?>
Documento
XML
• Documento HTML
+
• Novo documento XML
Folha de estilo
XSL
• Outro qualquer formato
Possibilidade de associar várias folhas de estilo a um documento XML
APIs
Documento
Processador XML
XML
(DOM/SAX)
Linguagens de
programação
(Java, Perl,etc.)
API
3
Interligação de aplicações heterogéneas – XML
Fonte C
Fonte A
Fonte B
• Necessários 12 conversores
• Nova Fonte Æ (n.º fontes – 1) * 2
conversores
Fonte D
Fonte C
Fonte A
Fonte B
Hub XML
• Necessários 8 conversores
• Nova Fonte Æ 2 conversores
Fonte D
Vantagens da XML
• A XML é extensível.
• Os documentos XML são auto-descritivos.
• Apesar da sua simplicidade, a XML permite criar estruturas bastante complexas.
• A XML é extremamente flexível.
• A XML permite efectuar a validação de documentos (DTD, XML-SCHEMA).
• O conteúdo de um documento XML pode ser facilmente manipulado pelas
aplicações de software (APIs DOM e SAX).
• A XML tem uma natureza metalinguística.
• A XML é um padrão aberto.
• O conteúdo de um documento XML está separado da sua apresentação.
• Um documento XML pode ser pesquisado de formas não previstas (questões ad
hoc).
4
Descrição Geral
• A XML e algumas normas associadas.
associadas.
• Armazenamento e gestão de dados XML.
– SGBDs Semiestruturados (LORE).
– SGBDs Relacionais, ObjectoObjecto-relacionais (Oracle
(Oracle 8i / 9i).
– SGBDs Orientados aos objectos (Poet
(Poet Object Server)
Server)
– SGBDs nativos (eXcelon
(eXcelon))
– Sistema de ficheiros + APIs + Ling. Programação.
Programação.
• Linguagens de interrogação para dados XML.
• Conclusão.
Armazenamento e gestão de dados XML
• Documentos XML fortemente estruturados
• SGBDs Objecto-Relacionais (Oracle 9i).
• SGBDs Orientados aos objectos (POET).
• Documentos XML semiestruturados
• SGBDs Semiestruturados (LORE).
• SGBDs Nativos (eXcelon, Tamino)
• Sistema de Ficheiros + APIs + LPs. + LIs
5
Dados semi-estruturados
• Não se ajustam aos modelos de dados tradicionais.
• Estrutura pode:
• Ser irregular;
• Não ser previamente conhecida;
Alguns dados XML
também partilham
estas características!
• Mudar com frequência.
• Auto-descritivos (esquema está misturado com os dados)
Novo paradigma de bases de dados: modelo de dados
semi-estruturados
Dados normalmente representados através de grafos dirigidos e etiquetados.
SGBD LORE (Ligthweigth Object REpository)
• Sistema que suporta várias características dos SGBDs comerciais.
Modelo de Dados
• Documento XML é representado por um grafo dirigido e etiquetado.
• Nós Æ elementos
• Complexos – etiqueta + [lista de pares atributo/valor].
• Atómicos – texto.
• Arcos Æ relacionamentos elemento/subelemento
• De subelemento – etiqueta com nome do subelemento de destino.
• De ligação – etiqueta com nome do atributo que introduz a ligação
6
SGBD LORE (Ligthweigth Object Repository)
bdbib
&1
livro
artigo
{classificação="bd",
referencia="_972-722-143-2"}
referencia
{ISBN="_972-722-143-2}
&2
&3
autor
título
editora
...
preço
autor
título
ano
ano
&5
&4
text
&12
"Tecnologias
de Bases de
Dados"
nome
&13
text
&21
"FCA"
sede
&14
text
&6
&7
&8
&9
&10
&11
text
text
text
text
text
text
&15
"1998"
&16
"26"
&17
"José Luís
Pereira"
&18
"Pedro
Soares"
&19
"ObjectRelational
Databases
&20
"2000"
&22
"Lisboa"
http://www-db.stanford.edu/lore
Linguagem de Interrogação LOREL
SELECT bdbib.artigo
WHERE bdbib.artigo.autor = “Pedro Soares”
<answer>
<artigo classificação = “bd” referencia = “_ 972-722-143-2”>
<autor>Pedro Soares</autor>
<título>Object-Relational Databases</título>
<ano>2000</ano>
</artigo>
</answer>
7
Dataguides
Sumário conciso e exacto da
estrutura de uma base de dados
LORE.
• Cada caminho da base de dados
aparece exactamente uma vez no
dataguide (propriedade de concisão).
• Todos os caminhos do dataguide
aparecem na base de dados
original (propriedade de exactidão).
<bdbib>
<livro isbn = “ ”>
<título> </título>
<editora>
<nome> </nome>
<sede> </sede>
</editora>
<ano>
</ano>
<preço> </preço>
<autor> </autor>
</livro>
<artigo classificação = “ ” referencia = “ ”>
<autor> </autor>
<título> </título>
<ano>
</ano>
</artigo>
</bdbib>
Explorar a estrutura da base de dados (utilizadores/aplicações)
+
Optimização de questões (sistema).
Dataguides
LORE
SGBD Tradicional
Dataguide
Esquema
• Sistema mantém dinamicamente o
dataguide.
• Estático e previamente definido
• Sumariar correctamente a estrutura
actual da base de dados.
• Dados têm que estar conformes
com o esquema.
8
Dataguides – Interface gráfica
GO
▼
bdbib
▼ >livro
@isbn
>título
▼ >editora
>nome = “FCA”
>sede
>ano
>preço
>autor
>Artigo
Select bdbib.>livro.>autor
Where bdbib.>livro.>editora.>nome = “FCA”;
<Answer>
<livro>
</livro>
<livro>
</livro>
</Answer>
<autor>José Luís Pereira</autor>
<autor>Luís Amaral</autor>
<autor>João Varajão</autor>
http://www-db.stanford.edu/lore
SGBDs Relacionais (O-R) para gerir dados XML
‰ Três modos de armazenamento:
1. Elemento
2. Documento
3. Híbrido
1.
Acesso aos dados mais rápido e conveniente (SQL).
⊝ Necessidade de efectuar mapeamento.
2.
Evita custos do mapeamento.
⊝ Acesso aos dados mais lento e pouco conveniente (pesquisa
por palavra-chave).
3.
Mais flexível.
⊝ Custo do mapeamento de parte das estruturas do documento.
9
2 cenários para utilizar BDR/O-R (ORACLE 8i/9i) com a XML
Interrogar a BD e obter
resultado no formato XML
Página XSQL com questões SQL embebidas
(documento XML)
Telefone celular
Utilizador
HTTP
PDA
Servelet XSQL
ORACLE 8i
PC
Documento XML (eventualmente transformado
por uma folha de estilo conveniente)
Browser
Browser
gráfico
não-gráfico
Web
Armazenar dados XML na BD
Servelet XSQL
ORACLE 8i
• BD Æ armazenar/consultar dados
• XML Æ formato de troca de dados
Esquema de uma tabela objecto-relacional com dados bibliográficos
CREATE TYPE EDITORA_OBJ AS OBJECT (
nome varchar2(30),
nome sobrenome
email
João
Varajão
[email protected]
Luís
Amaral
[email protected]
:
sede varchar2(30),
:
:
paginternet varchar2(40));
CREATE TYPE AUTOR_OBJ AS OBJECT (
nome varchar2(15),
isbn
972-722-193-9
título
autores
Planeamento de
Sistemas de Informação
editora
preço
4200
sobrenome varchar2(15),
email varchar2(40));
:
:
:
:
:
CREATE TYPE LISTAUTORES_NT AS
TABLE OF AUTOR_OBJ;
CREATE TABLE ListaLivros (
nome
sede
paginternet
FCA
Lisboa
http://www.fca.pt
isbn varchar2(15),
título varchar2(50),
autores LISTAUTORES_NT,
editora EDITORA_OBJ,
preço number)
NESTED TABLE autores STORE AS autor;
INSERT INTO ListaLivros VALUES
('972-722-193-9', ‘Planeamento de Sistemas de Informação’,
LISTAUTORES_NT(AUTOR_OBJ(‘João', ‘Varajão’,
‘[email protected]'), AUTOR_OBJ(‘Luís', ‘Amaral’,
‘[email protected]')), EDITORA_OBJ ('FCA', 'Lisboa',
'http://www.fca.pt'), 4200);
http://technet.oracle.com/tech/XML/demo/
10
Mapeamento
• Tabela/Vista – Elemento (rowset).
• Registo – Elemento (row) com um atributo de utilização obrigatória.
• Coluna com tipo de dados predefinido – Elemento atómico
• Coluna com tipo de dados definido pelo utilizador (object type) –
Elemento complexo.
– Propriedade do object type – sub- elemento do elemento complexo.
• Coluna cujo tipo de dados é uma tabela aninhada – Elemento complexo +
Elemento complexo para cada registo da tabela aninhada.
– Coluna da tabela aninhada – sub
- elemento do elemento registo da
tabela aninhada.
Dados da BD Æ Elementos aninhados no documento XML.
Página XSQL títulolivro.xsql
<?xml version=“1.0” encoding="windows-1252”?>
<?xml-stlylesheet type=”text/xsl” href=”títuloisbn.xsl”?>
<xsql:query
xmlns:xsql=”urn:oracle-xsql”
connection=“catálogo”
rowset-element=”Resultado”
row-element=”Livro”
id-attribute=”num”>
SELECT título, isbn
FROM ListaLivros
WHERE isbn={@isbnlivro}
</xsql:query>
http://catalogo.com/titulolivro.xsql?isbnlivro=972-722-193-9
11
Documento XML resultante da execução da página XSQL
títulolivro.xsql
<?xml version=“1.0” encoding="windows-1252”?>
<?xml-stlylesheet type=”text/xsl” href=”títulolivro.xsl”?>
<Resultado>
<Livro num=”1”>
<título>Planeamento de Sistemas de Informação</título>
<isbn>972-722-193-9</isbn>
</Livro>
</Resultado>
Folha de estilo XSL(T) títulolivro.xsl
<?xml version=“1.0” encoding="windows-1252”?>
<html xmlns:xsl=”http://www.w3.org/1999/XSL/Transform”>
<head>
<title>Título do Livro Pretendido</title>
</head>
<body>
<table border=”1” cellspacing=”0”>
<tr>
<th>Título</th>
<th>ISBN</th>
</tr>
<xsl:for-each select=”Resultado/Livro”>
<tr>
<td><xsl:value-of select=”título”/></td>
<td><xsl:value-of select=”isbn”/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
Aplicar ao documento XML resultante da execução da página XSQL títulolivro.xsql
12
Página HTML
<html>
<head>
<title>Título do Livro Pretendido</title>
</head>
<body>
<table border="1" cellspacing="0">
<tr>
<th>Título</th>
<th>ISBN</th>
</tr>
<tr>
<td>Planeamento de Sistemas de Informação</td>
<td>972-722-193-9</td>
</tr>
</table>
</body>
</html>
Resultante da aplicação da folha de estilo XSL(T) títulolivro.xsl ao documento
XML anterior
Página HTML (output)
Resultante da aplicação da folha de estilo XSL(T) títulolivro.xsl ao documento
XML anterior
13
SGBDs orientados aos objectos para gerir dados XML
(Poet Object Server)
XML SCHEMA
converter e compilar
Classes
de acordo com
Persistência
(Poet JavaTM Enhancer)
(Castor, compliador java)
BDOO Poet
instâncias de
(Castor)
Unmarchal
Documento XML
Marchal
Objectos
Armazenar/Obter
• Esquemas têm que ser compatíveis! (XSLT)
• Castor – XML Data Binding Facility for the JavaTM Plataform
• OQL – consultar eficientemente os dados XML
Porquê ODL ?
• O standard ODMG (3.ª versão), já atingiu um nível suficiente de
maturidade;
• Espera-se que a adopção universal da XML possa, muito em
breve, aumentar a aceitação das bases de dados OO;
• A ODL é uma norma proposta pelo ODMG que permite a
portabilidade de esquemas de bases de dados OO;
Um esquema definido em ODL pode, teoricamente, ser
implementado em qualquer SGBDOO que contemple o standard.
14
Porquê XML-SCHEMA ?
• A linguagem XML-SCHEMA é muito mais poderosa que as
antigas DTDs no que concerne a:
• representação de tipos de dados;
• especificação de restrições semânticas, as quais são
fundamentais nas bases de dados convencionais.
é particularmente relevante trabalhar no sentido de
efectuar a conversão entre esquemas ODL e
esquemas no formato XML-SCHEMA.
Sugestão de mapeamento de um esquema ODL para um
esquema no formato XML-SCHEMA
Class livro
Class autor
( extent livros key isbn )
( extent autores key cod )
{ attribute string isbn;
{ attribute string cod;
attribute string título;
attribute string nome;
attribute unsigned short ano;
attribute string sobrenome;
attribute float preço;
attribute enum título {Engenheiro, Mestre, Doutor};
relationship set<autor> redigidopor
attribute list<string> email;
inverse autor::escreve;
relationship set<livro> escreve
inverse livro::redigidopor;
relationship editora publicadopor
inverse editora::publica;
};
};
Relacionamento múltiplo (# > 1 lado destino)
Atributo simples
Atributo chave
Relacionamento simples (# = 1 lado destino)
Atributo lista
Atributo enumerado
15
Sugestão de mapeamento de um esquema ODL para um
esquema no formato XML-SCHEMA
Class endereço
Class editora
{
( extent editoras key id )
{ attribute string id;
attribute string rua;
attribute string localidade;
attribute string nome;
attribute string codpostal;
attribute string sede;
attribute string país;
attribute endereço endereçoeditora;
attribute string pgweb;
}
relationship set<livro> publica
inverse livro::publicadopor;
};
Relacionamento múltiplo (# > 1 lado destino)
Atributo simples
Atributo chave
Atributo composto
Regras de mapeamento
• nome da base de dados Æ elemento raiz do documento XML;
• cada classe de topo Æ elemento (complexo) com o mesmo nome;
• atributo simples Æ elemento atómico com o mesmo nome;
• Complex atributo Æ elemento complexo com o mesmo nome;
• atributo chave Æ elemento especial key ;
• atributo lista Æ elemento com o mesmo nome + elemento especial list;
16
Regras de mapeamento
• atributo enumerado
elemento com o mesmo nome + elemento especial restriction com elementos
especiais enumeration
• relacionamento múltiplo
elemento (com o mesmo nome) com um atributo maxOccurs = unbounded
+
Elemento especial keyref;
• relacionamento simples
elemento com o mesmo nome + elemento especial keyref ;
Esquema resultante
<?xml version=”1.0”?>
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<xsd:element name=”bdbib”>
<xsd:complexType>
<xsd:choice maxOccurs=”unbounded”>
<xsd:element name=”livro”>
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”isbn” type=”xsd:string”/>
<xsd:element name=”título” type=”xsd:string”/>
<xsd:element name=”ano” type=”xsd:unsignedShort”/>
<xsd:element name=”preço” type=”xsd:float”/>
<xsd:element name=“escritopor" maxOccurs="unbounded">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:attribute name="cod" type="xsd:string"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
<xsd:element name=”publicadopor” type”xsd:string”/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name=”autor”>
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”cod” type=”xsd:string”/>
<xsd:element name=”nome” type=”xsd:string”/>
<xsd:element name=”sobrenome” type=”xsd:string”/>
<xsd:element name=”título” minOccurs=”0”>
<xsd:simpleType>
<xsd:restriction base=”xsd:string”>
<xsd:enumeration value=”Engenheiro”/>
<xsd:enumeration value=”Mestre”/>
<xsd:enumeration value=”Doutor”/>
</xsd:restriction>
</xsd:simpleType>
</element>
<xsd:element name=”email”>
<xsd:simpleType>
<xsd:list itemType=”xsd:string”/>
</xsd:simpleType>
</xsd:element>
<xsd:element name=“escreve" maxOccurs="unbounded">
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:attribute name="isbn" type="xsd:string"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:element>
17
Esquema resultante (Cont.)
<xsd:element name=”editora”>
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”id” type=”xsd:string”/>
<xsd:element name=”nome” type=”xsd:string”/>
<xsd:element name=”sede” type=”xsd:string”/>
<xsd:element name=”endereçoeditora”>
<xsd:complexType>
<xsd:sequence>
<xsd:element name=”rua” type=”xsd:string”/>
<xsd:element name=”localidade” type=”xsd:string”/>
<xsd:element name=”codpostal” type=”xsd:string”/>
<xsd:element name=”país” type=”xsd:string”/>
</xsd:sequence>
</xsd:complexType >
</element>
<xsd:element name=”pgweb” type=”xsd:anyURI”/>
<xsd:element name=“publica" maxOccurs=“unbounded”>
<xsd:complexType>
<xsd:complexContent>
<xsd:restriction base="xsd:anyType">
<xsd:attribute name="isbn" type="xsd:string"/>
</xsd:restriction>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
<xsd:key name=”livroK”>
<xsd:selector xpath=”.//livro”/>
<xsd:field xpath=”isbn”/>
</xsd:key>
<xsd:key name=”autorK”>
<xsd:selector xpath=”.//autor”/>
<xsd:field xpath=”cod”/>
</xsd:key>
<xsd:key name=”editoraK”>
<xsd:selector xpath=”.//editora”/>
<xsd:field xpath=”id”/>
</xsd:key>
<xsd:keyref name=“livroRefautor" refer="autorK">
<xsd:selector xpath=".//livro/escritopor“/>
<xsd:field xpath="@cod“/>
</xsd:keyref>
<xsd:keyref name=“livroRefeditora" refer=“editoraK">
<xsd:selector xpath=".//livro“/>
<xsd:field xpath=“publicadopor“/>
</xsd:keyref>
<xsd:keyref name=“autorReflivro" refer=“livroK“>
<xsd:selector xpath=".//autor/escreve“/>
<xsd:field xpath="@isbn“/>
</xsd:keyre>
<xsd:keyref name=“editoraReflivro" refer=“livroK">
<xsd:selector xpath=".//editora/publica"/>
<xsd:field xpath="@isbn"/>
</xsd:keyref>
</xsd:element>
</xsd:schema>
Exemplo de documento XML
<?xml version="1.0" encoding="ISO-8859-1"?>
<bdbib xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance“
xsi:noNamespaceSchemaLocation="C:\MyDocs\schema.xsd">
<livro>
<isbn>1-55860-452-9</isbn>
<título>O-R DBMSs Tracking The Next Great Wave</título>
<ano>1999</ano>
<preço>50</preço>
<escritopor cod="A1"/>
<escritopor cod="A2"/>
<publicadopor>P1</publicadopor>
</livro>
<autor>
<cod>A1</cod>
<nome>Michael</nome>
<sobrenome>Stonebraker</sobrenome>
<título>Doutor</título>
<email>[email protected]</email>
<escreve isbn=“1-55860-452-9”/>
.
.
</autor>
<autor>
<cod>A2</cod>
<nome>Paul</nome>
<sobrenome>Brown</sobrenome>
<título>Doutor</título>
<email>[email protected]</email>
<escreve isbn="1-55860-452-9"/>
.
.
</autor>
<editora>
<id>P1</id>
<nome>Morgan Kaufmann</nome>
<sede>San Francisco</sede>
<endereçoeditora>
<rua>340 Pine Street, Sixth Floor</rua>
<localidade>San Francisco</localidade>
<codpostal>94194-3205</codpostal>
<país>EUA</país>
</endereçoeditora>
<pgweb>http://www.mkp.com</pgweb>
<publica isbn="1-55860-452-9"/>
.
.
</editora>
.
.
</bdbib>
18
Sistema de ficheiros para gerir dados XML
Documento XML
+
processador XML (DOM / SAX)
+
Linguagens de programação (Java, C++, Perl, etc.)
+
XQuery
Documento XML
Descrição Geral
• A XML e algumas normas associadas.
associadas.
• Armazenamento e gestão de dados XML.
• Linguagens de interrogação para dados XML.
– XMLXML-QL, XQL, Quilt,
Quilt, XQuery
• Conclusão
19
Linguagens de interrogação para dados XML
XML-QL
XQL
Perspectiva de Bases de Dados
Perspectiva do Documento
QUILT
Perspectiva Integradora
XQUERY
Tentativa de providenciar uma norma – W3C
Linguagem de interrogação XML – QL
• Especificamente projectada para a XML.
• É uma linguagem declarativa.
• Adopta um modelo de dados que é uma variante do modelo de
dados semi-estruturados (grafo dirigido e etiquetado).
• Combina a sintaxe da XML com as técnicas das linguagens de
bases de dados tradicionais.
• Interrogação XML-QL
• Cláusula WHERE – indica o que se pretende seleccionar.
• Cláusula CONSTRUCT – especifica o resultado a devolver.
http://www.w3.org/TR/NOTE-xml-ql/
http://www.research.att.com/~mff/xmlql-demo/html
20
Linguagem de interrogação XML-QL – Exemplo 1
WHERE <bdbib>
<livro>
<título>$t</título>
<editora>
<nome>FCA</nome>
</editora>
<ano>$n</ano>
<autor>$a</autor>
</livro> CONTENT_AS $l
</bdbib> IN “www.estv.ipv.pt/biblioteca/bdbiblio.xml”, $n > 1995
CONSTRUCT <Resultado>
<título>$t</título>
{ WHERE <autor>$a</autor> IN $l
CONSTRUCT <autor>$a</autor>
}
</Resultado>
Linguagem de interrogação XQL – Exemplo 1
bdbib/livro[editora/nome=”FCA” AND ano>1995] /(título | autor)
Linguagem utilizada pelo sistema eXcelon.
http:www.exceloncorp.com
21
Quilt
• Linguagem extremamente versátil e flexível (permite consultar dados
de um vasto espectro de fontes – estruturadas e semiestruturadas).
• Combina as melhores características de algumas das linguagens de
interrogação de documentos XML propostas até então (nomeadamente
a XML-QL e a XQL).
• Sintaxe básica de uma interrogação Quilt :
• Cláusula FOR – deve ser utilizada sempre que seja necessário
efectuar iteração e gera uma lista ordenada de tuplos.
• Cláusula WHERE – aplica condições aos tuplos gerados pela
cláusula FOR.
• Cláusula RETURN – gera o resultado da consulta.
Linguagem de interrogação Quilt – Exemplo 1
<resultado>
FOR $l IN document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //livro
WHERE $l/editora/nome = “FCA” AND $l/ano > 1995
RETURN
<livro>
$l/título,
FOR $a IN $l/autor
RETURN $a
</livro>
</resultado>
22
Resultado das consultas anteriores
<resultado>
<livro>
<título>Tecnologia de Bases de Dados</título>
<autor>José Luís Pereira</autor>
</livro>
<livro>
<título>Planeamento de Sistemas de Informação</título>
<autor>Luís Amaral</autor>
<autor>João Varajão</autor>
</livro>
</resultado>
XQuery
• Proposta pelo W3C para estabelecer uma norma para uma linguagem
de interrogação para documentos XML.
• A linguagem Xquery tem sido, até agora, fortemente inspirada na
linguagem Quilt.
• Sintaxe básica de uma interrogação XQuery :
• Cláusula FOR – deve ser utilizada sempre que seja necessário
efectuar iteração e gera uma lista ordenada de tuplos.
• Cláusula WHERE – aplica condições aos tuplos gerados pela
cláusula FOR.
• Cláusula RETURN – gera o resultado da consulta.
23
Linguagem de interrogação XQUERY – Exemplo 1
<resultado>
FOR $l IN document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //livro
WHERE $l/editora/nome = “FCA” AND $l/ano > 1995
RETURN
<livro>
$l/título,
$l/preço
</livro> SORTBY (preço)
</resultado>
FOR $l IN document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //livro[editora/nome
= “FCA” AND ano > 1995]
Esquema Mediabooks
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<xsd:element name=”produtos”/>
<xsd:complexType>
<xsd:choice maxOccurs=”unbounded”>
<xsd:element name=”livro”/>
</xsd:complexType>
<xsd:sequence>
<xsd:element name=”isbn” type=”xsd:string”/>
<xsd:element name=”título” type=”xsd:string”/>
<xsd:element name=”autor” type=”xsd:string” maxOccurs=”unbounded”/>
<xsd:element name=”editora” type=”xsd:integer”/>
<xsd:element name=”ano” type=”xsd:integer”/>
<xsd:element name=”preço” type=”xsd:float”/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name=”cdrom”/>
…
</xsd:element>
<xsd:element name=”dvd”/>
…
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
De acordo com o documento XML:
</xsd:schema>
www.mediabooks.pt/bdbiblio.xml
24
Esquema Webboom
<xsd:schema xmlns:xsd=”http://www.w3.org/2001/XMLSchema”>
<xsd:element name=”bdbiblio”>
<xsd:complexType>
<xsd:choice maxOccurs=”unbounded”>
<xsd:element name=”livro”/>
</xsd:complexType>
<xsd:sequence>
<xsd:element name=”isbn” type=”xsd:string”/>
<xsd:element name=”título” type=”xsd:string”/>
<xsd:element name=”autor” type=”xsd:string” maxOccurs=”unbounded”/>
<xsd:element name=”editora” type=”xsd:integer”/>
<xsd:element name=”ano” type=”xsd:integer”/>
<xsd:element name=”preço” type=”xsd:float”/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
.
.
De acordo com o documento XML:
www.webboom.pt/bdlivros.xml
Linguagem de interrogação XQUERY – Exemplo 2
<resultado>
FOR $lm IN document(“www.mediabooks.pt/bdbiblio.xml”) //livro[título
CONTAINS “XML”],
$lw IN document(“www.webboom.pt/bdlivros.xml”) //livro
WHERE $lm/título = $lw/título
RETURN
<livro>
$lm/título,
$lm/autor,
$lm/editora,
$lm/ano,
<preçomb>$lm/preço</preçomb>
<preçowb>$lw/preço</preçowb>
</livro>
</resultado>
25
Resultado possível
<resultado>
<livro>
<título>Bases de Dados, Web e XML</título>
<autor>Artur Afonso de Sousa</autor>
<editora>FCA</editora>
<ano>2002</ano>
<preçomb>24,94</preçomb>
<preçowb>24,50</preçowb>
</livro>
<livro>
<título>Open Source XML Database Toolkit</título>
<autor>Liam Quin</autor>
<editora>Wiley</editora>
<ano>2000</ano>
<preçomb>30,50</preçomb>
<preçowb>30,94</preçowb>
</livro>
:
</resultado>
Linguagem de interrogação XQUERY – Exemplo 3
<resultado>
FOR $a IN DISTINCT (document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //autor)
LET $l := document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //livro[autor = $a]
WHERE COUNT ($l) > 5
RETURN $a
</resultado>
26
Linguagem de interrogação XQuery – Exemplo 4
<resultado>
FOR $l IN document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //livro
$a IN document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //artigo
WHERE $l/título = “Tecnologia de Bases de Dados” AND $a/autor = $l/autor
RETURN
<artigo>
$a/título
</artigo>
</resultado>
FOR $l IN document(“www.estv.ipv.pt/biblioteca/bdbiblio.xml”) //livro[título =
“Tecnologia de Bases de Dados”]
Descrição Geral
• A XML e algumas normas associadas.
associadas.
• Armazenamento e gestão de dados XML.
• Linguagens de interrogação para dados XML.
• Conclusão
27
Conclusão
• A XML é a nova norma que o W3C propõe para a representação e
troca de dados na Internet;
• Espera-se que a XML se torne na “lingua franca” da Internet;
• Actualmente, existem essencialmente cinco abordagens para
armazenar e gerir dados no formato XML: bases de dados objectorelacionais (e relacionais); bases de dados orientadas aos objectos;
bases de dados semiestruturadas; bases de dados nativas e o sistema
de ficheiros + LIs;
• A XML pode ser utilizada como um modo de armazenamento de
dados;
• Espera-se que a adopção universal da XML possa, muito em breve,
aumentar a aceitação das bases de dados OO;
• A XML está a fazer convergir a comunidade da Internet com a
comunidade das Bases de Dados.
FIM
28
Download

Armazenamento e Gestão de dados XML • A XML e algumas