linguagens de interrogação de dados xml - xpath · funções sobre um cjto de nós ... ...
TRANSCRIPT
Linguagens de interrogação
de dados XML - XPath
Gestão e Tratamento de Informação
DEI IST – 2011/2012
Agenda
Introdução
Expressões de caminho (path expressions)
XPath
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
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
….
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
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.
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
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
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
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
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.
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
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)
…
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
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>
Modelo de dados para XPath
bib
book book
publisher author . . . .
Addison-Wesley Serge Abiteboul
A raíz
O elemento raíz
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.
Expressões simples
/bib/book/year
Resultado: <year> 1995 </year>
<year> 1998 </year>
/bib/paper/year
Resultado: empty (não existem artigos)
XML
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>
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
Wildcard
//author/*
Resultado: <first-name> Rick </first-name>
<last-name> Hull </last-name>
“*“ Corresponde a qualquer elemento debaixo
de “autor” a qualquer profundidade
Nós atributo
/bib/book/@price
Resultado: “55”
@price significa que price tem que ser um
atributo
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>
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>
Qualificadores (3)
/bib/book[@price < “60”]
/bib/book[author/@age < “25”]
/bib/book[author/text()]
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
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>
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
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"]]
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
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
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
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
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.
Referências Peter Wood, Slides on “Representing and Querying Data on the Web”,
http://www.dcs.bbk.ac.uk/~ptw/teaching/data-on-the-web.html
Dan Suciu, Slides on “The semistructured data model”, CSE 590ds: Managing XML and Semistructured Data,
http://www.cs.washington.edu/education/courses/cse590ds/01sp/
S. Abiteboul, P. Buneman, D. Suciu, “Data on the Web, From Relations to Semistructured Data and XML”, Morgan Kaufmann, 2000, (cap 4)
www.w3.org/TR/xpath Recomendação W3C do XPath
www.w3schools.com/xpath Tutorial XPath
Questões?
Gestão e Tratamento de Informação
DEI IST – 2011/2012