linguagens de interrogação de dados xml - xpath · funções sobre um cjto de nós ... ...

36
Linguagens de interrogação de dados XML - XPath Gestão e Tratamento de Informação DEI IST 2011/2012

Upload: doanhanh

Post on 24-May-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Linguagens de interrogação

de dados XML - XPath

Gestão e Tratamento de Informação

DEI IST – 2011/2012

Page 2: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Agenda

Introdução

Expressões de caminho (path expressions)

XPath

Page 3: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Porquê uma linguagem de

interrogação para dados Semi-Estrut.?

Essencial para dados Web

Seleccionar partes de um documento

Interessante ter uma linguagem de

interrogação do tipo de BD para aplicar

predicados aos dados, e executar re-

estruturação dos dados

Page 4: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Linguagens de interrogação para

documentos XML

LOREL e UnQL: linguagens de consulta p/ dados semi-estruturados

XML-QL: estende SQL Strudel Project - AT&T Labs

XML-GL: linguagem gráfica Transforma o DTD e os documentos XML em grafos

XSLT: conjunto de template rules – W3C

XQL: extensão do XSL – Microsoft + W3C

XQuery

….

Page 5: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Linguagem de interrogação para

dados semi-estruturados

Poder expressivo Capacidade de re-estruturação de dados Semi-Estuturados

Semântica precisa

Composição Saída de uma interrogação pode ser usada como entrada noutra interrogação

Integração com esquemas Explorar a estrutura (se existir) para verificação de tipos

Manipulação em programas Interrogações podem ser geradas automaticamente

Page 6: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Expressões de caminho

(path expressions)

Seja l1.l2.l3…ln - sequência de etiquetas de arcos,

Expressão de caminho (path expression) - é uma

interrogação simples, cujo resultado é um conjunto de nós

de um dado grafo.

resultado de l1.l2.l3…ln sobre um grafo de dados: é um conjunto de

nós vn tal que existem arestas (r,l1,v1), (v1,l2,v2),…,(vn-1, ln, vn) no

grafo de dados onde r é a raíz.

resultado não é um conjunto de dados semi-estruturados.

Page 7: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Exemplo

db

book n1

n2

n3

biblio

author

author

date

title

author

date

title

paper

Roux

Combalusier

1976

Database Systems

Smith

1999

Database Systems ...

book

Page 8: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Exemplo

db

book n1

n2

n3

biblio

author

author

date

title

author

date

title

paper

Roux

Combalusier

1976

Database Systems

Smith

1999

Database Systems ...

biblio.book: {n1, n2}

book

Page 9: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Exemplo

db

book n1

n2

n3

biblio

author

author

date

title

author

date

title

paper

Roux

Combalusier

1976

Database Systems

Smith

1999

Database Systems ...

biblio.book.author: nós e conteúdo {“Roux”, “Combalusier”, “Smith”}

book

Page 10: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Expressões regulares

Sintaxe genérica:

e::= l | | _ | e’.’e | ‘(‘e’)’ | e ’|’e | e’*’ | e’+’ | e’?’ ,

Em que l varia entre as etiquetas, e sobre

expressões e é o conjunto vazio.

A expressão de exemplo:

((s|S)ection|paragraph)(s)?

Corresponde a :

section, Section, sections, Sections, paragraph, paragrahs

Page 11: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Outro exemplo

biblio._*.section.([tT]itle | paragraph.*heading)

Corresponde a qualquer caminho que começa com a

etiqueta biblio e acaba com uma etiqueta section,

seguido quer por um título (com possível primeira letra

maiúscula) ou uma aresta paragraph seguida por uma

aresta que contém a cadeia de caracteres heading.

A expressão regular _* corresponde a um número

infinito de caminhos sempre que existe um ciclo.

Page 12: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Lacunas das path expressions

Não constroiem nós novos

Não conseguem executar o equivalente a um join

Não conseguem testar valores da base de dados

=> Linguagem de interrogação é necessária

Page 13: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

XML Path Language (XPath)

Recomendação W3C

Linguagem declarativa para especificar

caminhos nas árvores

Sintaxe semelhante à usada para caminhos

em hierarquias de ficheiros

Serve de base a outros standards do W3C:

XSL Transformations (XSLT)

XML Query (Xquery)

Page 14: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Xpath: Definição

Uma expressão XPath, p, estabelece uma relação entre:

Um nó de contexto e

Um nó que pertence ao conjunto de respostas

Exemplos: author/firstname

. = self

. . = parent

part/*/*/subpart/../name = part/*/*[subpart]/name

Page 15: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Exemplo <bib>

<book> <publisher> Addison-Wesley </publisher>

<author> Serge Abiteboul </author>

<author> <first-name> Rick </first-name>

<last-name> Hull </last-name>

</author>

<author> Victor Vianu </author>

<title> Foundations of Databases </title>

<year> 1995 </year>

</book>

<book price=“55”>

<publisher> Freeman </publisher>

<author> Jeffrey D. Ullman </author>

<title> Principles of Database and Knowledge Systems </title>

<year> 1998 </year>

</book>

</bib>

Page 16: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Modelo de dados para XPath

bib

book book

publisher author . . . .

Addison-Wesley Serge Abiteboul

A raíz

O elemento raíz

Page 17: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Expressão XPath

Uma expressão XPath pode ser: -Expressão absoluta: começa com „/‟, é seguida por uma expressão relativa, e é avaliada começando pelo nó raiz

-Expressão relativa: sequência de passos de localização separados por „/‟.

Passo de localização pode ser:

- Vazio (//) : procura todos os descendentes de cada nó no contexto

- NomeElemento [predicados] : procura todos os elementos filho de cada nó no contexto que têm o nome dado

- @nomeAtributo [predicados] : procura o nó atributo de cada nó no contexto que tem o nome dado

- Predicados: filtra os nós que são encontrados; compreendem: exps booleanas, exps numéricas, exps com um conjunto de nós, funções sobre um cjto de nós.

Page 18: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Expressões simples

/bib/book/year

Resultado: <year> 1995 </year>

<year> 1998 </year>

/bib/paper/year

Resultado: empty (não existem artigos)

XML

Page 19: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Expressões mais complexas

//author

Significado: todos os elementos autor que são descendentes da raíz, a qualquer profundidade

Resultado:<author> Serge Abiteboul </author>

<author> <first-name> Rick </first-name>

<last-name> Hull </last-name>

</author>

<author> Victor Vianu </author>

<author> Jeffrey D. Ullman </author>

/bib//first-name

Significado: “first-name” debaixo de “bib” a qualquer profundidade

Resultado: <first-name> Rick </first-name>

Page 20: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Nós de texto

/bib/book/author/text() Significado: os textos debaixo de todos os autores

Resultado: Serge Abiteboul

Jeffrey D. Ullman

Rick Hull não aparece porque tem firstname, lastname

Algumas funções em XPath:

text() retorna o valor textual

node() retorna qq. nó (= * or @* or text())

name() retorna o nome da etiqueta corrente

Page 21: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Wildcard

//author/*

Resultado: <first-name> Rick </first-name>

<last-name> Hull </last-name>

“*“ Corresponde a qualquer elemento debaixo

de “autor” a qualquer profundidade

Page 22: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Nós atributo

/bib/book/@price

Resultado: “55”

@price significa que price tem que ser um

atributo

Page 23: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Qualificadores (1)

/bib/book/author[first-name]

Significado: os elementos “author” que tenham

um “first-name”

Resultado: <author> <first-name> Rick </first-name>

<last-name> Hull </last-name>

</author>

Page 24: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Qualificadores (2)

/bib/book/author[first-

name][address[//zip][city]]/lastname

Significado: os lastname dos “author” que tenham “first-

name” e cujo endereço contenha um “zip code”, a

qualquer profundidade, e uma cidade

Resultado: <lastname> … </lastname>

<lastname> … </lastname>

Page 25: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Qualificadores (3)

/bib/book[@price < “60”]

/bib/book[author/@age < “25”]

/bib/book[author/text()]

Page 26: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Sumário

bib elemento bib

* qualquer elemento

/ root

/bib bib debaixo de root

bib/paper paper debaixo de bib

bib//paper paper bebaixo de bib, a qq profundidade

//paper paper a qualquer profundidade

paper|book um paper ou um book

@price atributo price

bib/book/@price atributo price em book, em bib

db/book[@price] books que têm um atributo price

db/book[@price=’10’] books com price igual a 10

Page 27: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

A raíz

<bib><paper>1</paper><paper>2</paper></bib>

bib é o “document element”

A “root” está acima de bib

/bib = retorna o elemento documento

/ = retorna a raíz

Se tivermos comentários antes e depois de

<bib>, estes tornam-se irmãos de <bib>

Page 28: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Exercício Considere um documento XML d que representa uma colecção de CDs. Assuma

que o documento é válido no que diz respeito à seguinte DTD:

<!ELEMENT CDlist ((CD)+)>

<!ELEMENT CD (composer, (performance)+, publisher, (length)?)>

<!ELEMENT performance (composition, (soloist)?, (orchestra, conductor)?)>

<!ELEMENT composer (#PCDATA)>

<!ELEMENT publisher (#PCDATA)>

<!ELEMENT length (#PCDATA)>

<!ELEMENT composition (#PCDATA)>

<!ELEMENT soloist (#PCDATA)>

<!ELEMENT orchestra (#PCDATA)>

<!ELEMENT conductor (#PCDATA)>

Quais as expressões XPath que retornam o seguinte de d, assumindo que o contexto inicial é o elemento CDlist:

Todas as composições

Todas as composições envolvendo um solista

Todas as execuções com uma orquesta mas sem solista

Todos os solistas que tocaram com a London Symphony Orchestra num CD publicado pela Deutsche Grammophon

Todos os CDs que têm execuções pela London Symphony Orchestra

Page 29: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Respostas

Todas as composições:

CD/performance/composition

Todas as composições envolvendo um solista: CD/performance[soloist]/composition

Todas as execuções com uma orquestra mas sem solista: CD/performance[orchestra and not(soloist)]

Todos os solistas que tocaram com a London Symphony Orchestra num CD publicado pela Deutsche Grammophon

CD[publisher="Deutsche Grammophon"]/performance [orchestra="London Symphony Orchestra"]/soloist

Todos os CDs com execuções pela London Symphony Orchestra

CD[performance[orchestra="London Symphony Orchestra"]]

Page 30: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Navegação usando a sintaxe completa

Passo de localização em Xpath tem a sintaxe:

axis :: node-test predicates

Em que:

Axis selecciona um conjunto de nós candidatos

node-test filtra os candidatos com tipo ou nome do nó

Os predicates são opcionais

Page 31: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Navegação

Podemos navegar ao longo de 13 eixos:

ancestor ancestor-or-self

attribute

child

descendant descendant-or-self

following following-sibling

namespace

parent

preceding preceding-sibling

self

Page 32: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Exemplos

child::author/child:lastname = author/lastname

child::author/descendant::zip = author//zip

child::author/parent::* = author/..

child::author/attribute::age = author/@age

E os seguintes, o que querem dizer? paper/publisher/parent::*/author

/bib//address[ancestor::book]

/bib//author/ancestor::*//zip

Page 33: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Mais exemplos

name() = o nome do nó corrente

/bib//*[name()=book] é o mesmo que /bib//book

O que quer dizer ? /bib//*[ancestor::*[name()!=book]]

Os eixos de navegação dão-nos mais poder

Page 34: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Sintaxe abreviada vs sintaxe completa

Sintaxe completa Sintaxe abreviada

child:: nada (eixo por omissão)

attribute:: @

/descendant::node() //

self::node() .

parent::node() ..

[position()=i] [i]

Se o caminho começa com //, então o contexto inicial é a raíz.

Page 36: Linguagens de interrogação de dados XML - XPath · funções sobre um cjto de nós ...  Recomendação W3C do XPath  Tutorial XPath . Questões? Gestão e Tratamento

Questões?

Gestão e Tratamento de Informação

DEI IST – 2011/2012