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