©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML...

23
©Silberschatz, Korth and Sudarshan (modificad 10.2.1 Database System Concepts Capítulo 10: XML Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Transformação e interrogação de documentos XML: XPath e XSLT Mapeamento entre documentos XML e Bases de Dados relacionais

Transcript of ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML...

Page 1: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts

Capítulo 10: XMLCapítulo 10: XML

XML para transferência de dados Estrutura hierárquica do XML DTDs e XML Schema Transformação e interrogação de documentos XML:

XPath e XSLT Mapeamento entre documentos XML e Bases de Dados

relacionais

Page 2: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.2Database System Concepts

Visualização de documentos XMLVisualização de documentos XML

Para visualizar um documento XML é preciso associar formatação a cada uma das tags.

A forma mais simples de fazer isso é via folhas de estilo CSSs (Cascading Style Sheets)<?xml version = “1.0” standalone = “no”?>

<!DOCTYPE banco SYSTEM http://centria.fct.unl.pt/~jja/banco.dtd><?xml-stylesheet type="text/css" href="banco.css"?><banco>…</banco>

Separam-se os dados da sua formatação.

Page 3: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.3Database System Concepts

Exemplo de CSSExemplo de CSS

Ficheiro banco.css

conta {display: block; font-size: 25; font-weight: bold; text-aligh: center}

num-conta {display: block; font-size: 25; font-weight: bold; text-aligh: center}

agencia {display: block; font-size: 20; text-aligh: left}

saldo {display: block; font-size: 20; text-aligh: right}

… Muito limitado! Nem sequer trata atributos! Outra abordagem: transformação de documentos XML em

documentos HTML.

Link para exemplo

Page 4: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.4Database System Concepts

Visualização com XSLVisualização com XSL

O XSL (eXtended Style Sheet) associa formatação definindo/programando transformação para HTML.

<?xml version = “1.0” standalone = “no”?> <!DOCTYPE banco SYSTEM http://centria.fct.unl.pt/~jja/banco.dtd>

<?xml-stylesheet type="text/xsl" href="banco2.xsl"?><banco2>…</banco2>

Como transformar em HTML? Reconhecer “padrões” no documento XML Aplicar “funções” de transformação a esses padrões.

Page 5: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.5Database System Concepts

Exemplo de ficheiro XSLExemplo de ficheiro XSL

<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"><xsl:template match = "/">

<html><xsl:apply-templates/></html>

</xsl:template><xsl:template match = "/banco">

<body><p><b> Contas: </b></p><xsl:apply-templates/></body>

</xsl:template><xsl:template match = "/banco/conta">

<p> A conta <b> <xsl:value-of select="num-conta" /> </b>da agencia <xsl:value-of select="agencia" />tem saldo <xsl:value-of select="saldo" />.</p>

</xsl:template></xsl:stylesheet> Link para exemplo

Page 6: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.6Database System Concepts

Transformação de documentos XMLTransformação de documentos XML

Tradução de informação de um esquema XML para outro Relacionado com pesquisa de informação em documentos XML

(e tratado pelas mesmas ferramentas) Linguagens para transformação/pesquisa em documentos XML

XPath Linguagem simples, que consiste em path expressions

XSLT Linguagem desenhada para tradução de documentos XML para

XML e XML para HTML XQuery

Linguagem mais complexa de pesquisa de informação em documentos XML

Existem outras linguagens: XML-QL, Quilt, XQL, …

Page 7: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.7Database System Concepts

Modelo em árvore de documentos XMLModelo em árvore de documentos XML

As linguagens de transformação e pesquisa são baseadas no modelo em árvore de documentos XML

Um documento XML pode ser visto como uma árvore, onde os nós correspondem a elementos e a atributos Os nós-elementos têm filhos, que podem ser atributos ou sub-

elementos Texto num elemento é visto como um nó de tipo texto (sem filhos) Os filhos dum nó são ordenados de acordo com a ordem em que

aparecem no documento XML Os nós de elementos e atributos têm sempre um único pai. A raiz da árvore contém um único filho, correspondendo ao elemento

raiz do documento

Page 8: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.8Database System Concepts

XPathXPath

O XPath serve para seleccionar partes de documento usando para tal path expressions

Uma path expression é uma sequência de passos, separados por “/” Como nome de ficheiros numa hierarquia de directorias

Resultado duma path expression: Conjunto de valores, e correspondentes sub-elementos e atributos

quando for caso disso, que correspondem ao path dado E.g. /banco-2/cliente/nome-cliente avaliado nos dados

anteriores, devolve:<nome-cliente> Luís </nome-cliente><nome-cliente> Maria </nome-cliente>

E.g. /banco-2/cliente/nome/text( ) devolve os mesmos nomes, mas sem as tags

Page 9: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.9Database System Concepts

XPath (Cont.)XPath (Cont.)

O “/” inicial denota a raiz do documento As path expressions são avaliadas da esquerda para a direita

Cada passo é aplicado ao conjunto de instâncias produzidas pelo passo anterior

Podem usar-se predicados de selecção (entre []) em qualquer dos passos do path.

E.g. /banco-2/conta[saldo > 400] Devolve os elementos de todas as contas com saldo superior a 400 /banco-2/conta[saldo] devolve os elementos de todas as contas que

contêm um sub-elemento saldo Pode aceder-se aos atributos, usando “@”

E.g. /banco-2/conta[saldo > 400]/@num-conta Devolve os números das contas cujo saldo é maior que 400

Os atributos IDREF não são desreferenciados automaticamente

Link para exemplo

Page 10: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.10Database System Concepts

Funções em XPathFunções em XPath

O XPath fornece várias funções: E.g. função count() no fim do path, conta o número de elementos do

conjunto gerado pelo path E.g. /banco-2/conta[cliente/count() > 2]

– Devolve as contas com mais de dois clientes Também há funções para testar a posição de um nó relativamente aos seus

irmãos, somar valores, operadores sobre strings, interios, etc. Exemplos: sum(), contains(st1,st2), concat(st1,st2,st), position(), last(), round(num),

... Nos predicados podem usar-se os conectivos Booleanos and e or e a

função not() As IDREFs pode referenciar-se usando para tal a função id()

id() pode também ser aplicado a conjuntos de referências (IDREFS e strings de IDREFs separadas pos espaços)

E.g. /banco-2/conta/id(@clientes) Devolve todos os clientes referenciados por contas, no seu

atributo clientes.

Page 11: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.11Database System Concepts

Mais features do XPathMais features do XPath Operador “|” para uniões

E.g. /banco-2/conta/id(@clientes) | /banco-2/emprestimo/id(@clientes) Devolve os clientes com contas ou empréstimos NOTA: O “|” não pode estar imbricado noutros operadores.

Operador “//” para saltar vários níveis de uma árvore de uma só vez E.g. /banco-2//nome

Devolve qualquer sub-elemento com nome nome que esteja dentro do elemento /banco-2, independentemente de quantos níveis abaixo.

Um passo no path pode ir para o pai, irmãos, antecessores, descendentes (e não apenas para os filhos, como vimos até aqui). Eg: O “//”, acima, denota todos os descendentes “..” denota o pai. “.” denota o próprio nó.

Page 12: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.12Database System Concepts

XSLTXSLT

Uma folha de estilos guarda as opções de formatação do documento, separadamente do documento propriamente dito

O XSL foi concebido para gerar HTML a partir de XML O XSLT é uma linguagem geral, de transformação de

documentos XML Pode transformar XML em XML, e XML em HTML

Em XSLT as transformações são definidas à custa de templates Os templates combinam a selecção usando XPath com a

construção dos resultados da transformação

Page 13: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.13Database System Concepts

Templates XSLTTemplates XSLT

Exemplo de template XSLT com match e select <xsl:template match=“/banco-2/cliente”>

<xsl:value-of select=“nome-cliente”/> </xsl:template> <xsl:template match=“*”/> O atributo match da tag xsl:template especifica um padrão em XPath Os elementos do documento XML que estão de acordo com esse padrão,

são processados de acordo com o especificado no elemento xsl:template xsl:value-of selecciona para output valor específicos (no caso, nome-cliente)

Para elementos que não caiam em nenhum padrão Os atributos e o texto são escritos no output sem processamento Os templates são aplicados recursivamente aos sub-elementos

O <xsl:template match=“*”/> é usado aqui para garantir que para todos os outros elementos, não é produzido nenhum output

Se um elemento está de acordo com vários templates, apenas um deles é usado. A escolha é feita por um esquema complexo de prioridades.

Page 14: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.14Database System Concepts

Exemplo de output XMLExemplo de output XML

Ficheiro XSL: <xsl:template match=“/banco/cliente”>

<cliente> <xsl:value-of select=“nome-cliente”/> </cliente>

</xsl;template> <xsl:template match=“*”/> Exemplo de output:

<cliente> Luís </cliente> <cliente> Maria </cliente>

Page 15: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.15Database System Concepts

Criação de atributos em XSLTCriação de atributos em XSLT

O XSLT não permite uma tag xsl:value-of dentro de outra tag E.g. não se pode criar um atributo para <cliente> usando directamente

um xsl:value-of Para esse efeito o XSLT tem o xsl:attribute

xsl:attribute adiciona atributos a um elemento Exemplo XSL: <xsl:template match=“/banco/cliente”>

<cliente> <xsl:attribute name=“id”> <xsl:value-of select=“num-cliente”/></xsl:attribute>

<xsl:value-of select=“nome-cliente”/> </cliente>

</xsl;template> <xsl:template match=“*”/> Exemplo de output:

<cliente id=“C100”> Luís </cliente> <cliente id=“C102”> Maria </cliente>

Page 16: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.16Database System Concepts

Recursão estruturalRecursão estrutural As acções dos templates podem ser simplesmente a de aplicar

recursivamente os templates ao conteúdo do padrão reconhecido

E.g. <xsl:template match=“/banco”>

<clientes> <xsl:apply-templates />

</clientes> <xsl:template match=“/banco/cliente”> <cliente>

<xsl:value-of select=“nome-cliente”/> </cliente>

</xsl:template> <xsl:template match=“*”/>

Exemplo de output: <clientes> <cliente> Luís </cliente> <cliente> Maria </cliente> </clientes>

Page 17: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.17Database System Concepts

Junções em XSLTJunções em XSLT

As keys do XSLT permitem a indexação de elementos por valores de sub-elementos ou atributos As keys têm que ser declaradas (com um nome) A função key() é usado para ir buscar os valores indexados. E.g.

<xsl:key name=“numct” match=“conta” use=“num-conta”/>

<xsl:value-of select=key(“numct”, “A-101”) Isto permite exprimir (alguns tipos de) junções com XSLT

<xsl:key name=“numct” match=“conta” use=“num-conta”/><xsl:key name=“nomcl” match=“cliente” use=“nome-cliente”/><xsl:template match=“depositante”.

<cliente-conta><xsl:value-of select=key(“nomcl”, “nome-cliente”)/><xsl:value-of select=key(“numct”, “num-conta”)/></cliente-conta>

</xsl:template><xsl:template match=“*”/>

Page 18: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.18Database System Concepts

Ordenação em XSLTOrdenação em XSLT

Dentro de um template, um xsl:sort ordena todos os elementos de acordo com o padrão do template. A ordenação é feita antes de se aplicarem outros templates

<xsl:template match=“/banco”><xsl:apply-templates select=“cliente”><xsl:sort select=“nome-cliente”/></xsl:apply-templates>

</xsl:template><xsl:template match=“cliente”>

<cliente><xsl:value-of select=“nome-cliente”/><xsl:value-of select=“rua-cliente”/><xsl:value-of select=“local-cliente”/>

</cliente></xsl:template><xsl:template match=“*”/>

Page 19: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.19Database System Concepts

XQueryXQuery

Linguagem de mais alto nível para perguntas genéricas a documentos XML.

Usa uma sintaxe for … let … where .. result … for SQL from where SQL where return SQL select let não tem equivalente em SQL (para variáveis temporárias)

A parte do for tem expressões XPath e variáveis que vão tomando os vários valores retornados pela path expression

A parte do where impõe condições sobre essas variáveis A parte do return especifica o que deve aparecer no output,

para cada valor da variável

Page 20: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.20Database System Concepts

Exemplo em XQuery Exemplo em XQuery

Devolver todos os números contas com saldo maior que 400€, em elementos com tag <conta400>

for $x in /banco-2/conta let $num := $x/@num-conta where $x/saldo > 400 return <conta400> $num </conta400>

Neste caso, nem a parte do let nem a do where são essenciais:

for $x in /banco-2/conta[saldo>400]return <conta400> $x/@num-conta </conta400>

Page 21: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.21Database System Concepts

Exemplo de junções em XQueryExemplo de junções em XQuery Podem-se especificar junções de forma semelhante ao SQL

for $b in /banco/conta, $c in /banco/cliente, $d in /banco/depositante

where $a/num-conta = $d/num-conta and $c/nome-cliente = $d/nome-cliente

return <cliente-conta> $c $a </cliente-conta>

O XQuery tem muito mais features, que ficam aqui de fora… O mesmo se pode dizer relativamente ao XPath e ao XSLT Informação relevante a partir de:

http://www.w3.org/

Page 22: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.22Database System Concepts

Mapeamento de dados de/para XMLMapeamento de dados de/para XML

Hoje em dia os sistemas de bases de dados já tem mecanismos que facilitam a importação de dados vindos de ficheiros XML, bem como a exportação de dados para formato XML.

A transformação de dados para XML pode ser útil, não só para transferência, como também para interface com o utilizador.

A selecção dos dados para exportar pode ser feita através de views Para obter imbricação de elementos ter-se-ão que usar view com

mecanismos objecto-relacional (e.g. perguntas com nesting) Para importar dados de XML para um modelo relacional, há que

primeiro ter alguma forma de mapeamento do XML em conjuntos de relações.

Page 23: ©Silberschatz, Korth and Sudarshan (modificado)10.2.1Database System Concepts Capítulo 10: XML XML para transferência de dados Estrutura hierárquica do.

©Silberschatz, Korth and Sudarshan (modificado)10.2.23Database System Concepts

De XML para relaçõesDe XML para relações Para ser possível tem que se conhecer o DTD.

Os elementos sem sub-elementos, e os atributos, são transformados em atributos de relações

Cria-se um relação para cada elemento com sub-elementos Os atributos ID do documento correspondem a chaves da

relação Os atributos do elemento são mapeados para atributos da

relação Cada sub-elemento que só possa ocorrer uma vez é

transformado num atributo:– Se for um sub-elementos de texto, nesse atributo guarda-se

o texto– Se for complexo, guarda-se o id do sub-elemento

Os sub-elementos que possam ocorrer múltiplas vezes num dado elemento, são guardados em relação separada– Semelhante à forma de representar em relações atributos

multivalor de diagramas ER