A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Linguagens de interrogação de dados XML XPath

Apresentações semelhantes


Apresentação em tema: "Linguagens de interrogação de dados XML XPath"— Transcrição da apresentação:

1 Linguagens de interrogação de dados XML XPath
Helena Galhardas DEI IST

2 Agenda Introdução Expressões de caminho (path expressions) XPath

3 Porquê uma linguagem de interrogação para dados SS?
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-estrutuação dos dados

4 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 XSL: conjunto de template rules – W3C XQL: extensão do XSL – Microsoft .... XQuery

5 Linguagem de interrogação para dados semi-estruturados
Poder expressivo Capacidade de re-estruturação de dados SS Semântica precisa Composição Saída de uma interrogação pode ser usada como entrada noutra interrogação Esquema Explorar a estrutura (se existir) para verificação de tipos Manipulação de programas Interrogações podem ser geradas automaticamente logo convém ser linguagem verbosa

6 Expressões de caminho (path expressions)
Seja l1.l2.l3…ln - sequência de etiquetas de arcos, Expressão de caminho - é uma interrogação simples, cujo resultado é um conjunto de nós para um dado grafo de nós. 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. Mas ainda não resulta num conjunto de dados semi-estruturados. Uma ling de interrogação para dados SS deve ser capaz de atingir profundidades arbitrárias num grafo de dados.

7 Exemplo Roux author Combalusier author date 1976 n1 book biblio db
title Database Systems book author n2 Smith date paper 1999 title n3 Database Systems ...

8 Exemplo biblio.book: {n1, n2} Roux author Combalusier author date 1976
db title Database Systems book author n2 Smith date paper 1999 title n3 Database Systems ... biblio.book: {n1, n2}

9 Exemplo Roux author Combalusier author date 1976 n1 book biblio db title Database Systems book author n2 Smith paper date 1999 title n3 Database Systems ... biblio.book.author: nós e conteúdo {“Roux”, “Combalusier”, “Smith”}

10 Expressões regulares Sintaxe genérica: Exemplo:
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. Exemplo: ((s|S)ection|paragraph)(s)? Corresponde a : Section, Section, sections, Sections, paragraph, paragrahs Em vez de especificarmos um caminho completamente, podemos querer especificá-lo por uma propriedade que Pode ser a dois níveis: Pode ser uma propriedade do caminho propriamente dito (ex: o caminho tem que atravessar a aresta paper) Pode ser uma propriedade numa etiqueta de aresta (ex: a etiqueta da aresta contém a substring “bib”) Sintaxe genérica de expressões regulares sobre caminhos _: wild card corresponde a qualquer etiqueta de arco

11 Outro exemplo biblio._*.section.(“[tT]itle” | paragraph”.*heading.*”)
Corresponde a qualquer caminho que começa com uma 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 string heading. A expressão regular _* corresponde a um número infinito de caminhos sempre que existe um ciclo.

12 Lacunas das path expressions
Não constroiem nós novos Não conseguem executar o equivalente a um join Não conseguem testar vaores da base de dados => Linguagens de interrogação

13 Sintaxe básica (Lorel)
Select author: X From biblio.book.author X Resultado: {author: “Roux”, author: “Combalusier”, author: “Smith”} Roux author Combalusier author author q1 Smith

14 where “Smith” in X.author {row: {author: “Smith”, date: 1999,
select row: X from biblio._ X where “Smith” in X.author {row: {author: “Smith”, date: 1999, title: “Database Systems”,...} author n2 Smith date q2 1999 title ... Database Systems

15 where matches(“.*(D|d)atabase.*”, Z)
select author: Y from biblio._ X X.author Y, X.title Z where matches(“.*(D|d)atabase.*”, Z) Resultado: todos os autores de publicações cujo título contém a palavra “database”

16 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 Link (XLink) XML Pointer (XPointer) XML Query

17 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

18 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 Base Systems </title> <year> 1998 </year> </book> </bib>

19 Modelo de dados para XPath
bib A raíz O elemento raíz book book Documento é visto como uma árvore de nós Vários tipos de nós: raiz, elementos, atributo, texto, comentário, instrução de processamento Cada nó atributo e elemento têm um valor O valor de um nó elemento é a concatenação de todos os seus nós texto descendentes publisher author Idêntico ao modelo de dados de XQuery Addison-Wesley Serge Abiteboul

20 Expressões simples /bib/book/year
Resultado: <year> 1995 </year> <year> 1998 </year> /bib/paper/year Resultado: empty (não existem artigos) 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.

21 Expressões um pouco mais complicadas
//author 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 Resultado: <first-name> Rick </first-name> Todos os elementos autor que são descendentes da raíz First-name debaixo de bib a qq. profundidade

22 Nós de texto /bib/book/author/text() Resultado: Serge Abiteboul
Jeffrey D. Ullman Rick Hull não aparece porque tem firstname, lastname Algumas funções em XPath: text() = matches the text value node() = retorna qq. nó (= * or text()) name() = retorna o nome da etiqueta corrente

23 Wildcard //author/* Resultado: <first-name> Rick </first-name> <last-name> Hull </last-name> * Corresponde a qualquer elemento

24 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 Base Systems </title> <year> 1998 </year> </book> </bib>

25 Nós atributo /bib/book/@price Resultado: “55”
@price significa que price tem que ser um atributo

26 Qualificadores (1) /bib/book/author[firstname]
Resultado: <author> <first-name> Rick </first-name> <last-name> Hull </last-name> </author>

27 Qualificadores (2) /bib/book/author[firstname][address[//zip][city]]/lastname Result: <lastname> … </lastname> <lastname> … </lastname>

28 Qualificadores (3) /bib/book[@price < “60”]
< “25”] /bib/book[author/text()]

29 Sumário dos exemplos db/book[@price] books que têm um atributo price
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 atributo price em book, em bib books que têm um atributo price books com price igual a 10

30 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 / = returna a raíz Se tivermos comentários antes e depois de <bib>, estes tornam-se irmãos de <bib>

31 Navegação usando a sintaxe completa
Passo de localização tem a sintaxe: axis :: node-test predicates Em que: Axis selecciona um conjunto de nós candidatos node-test filtra os candidatos baseado no tipo ou nome do nó E os predicates são opcionais

32 Navegação Podemos navegar ao longo de 13 eixos: ancestor
ancestor-or-self Attribute – todos os atributos do nó de contexto child descendant descendant-or-self following following-sibling namespace Parent – o pai do nó de contexto preceding preceding-sibling self – o nó de contexto, ele mesmo

33 Exemplos child::author/child:lastname = author/lastname
child::author/descendant::zip = author//zip child::author/parent::* = author/.. child::author/attribute::age = E os seguintes, o que querem dizer? paper/publisher/parent::*/author /bib//address[ancestor::book] /bib//author/ancestor::*//zip

34 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

35 Sintaxe abreviada vs sintaxe completa
Sintaxe completa Sintaxe abreviada child:: nada (child eixo por omissão) attribute:: @ /descendant-or-self::node()/ // self::node() parent::node() [position()=i] [i] Se o caminho começa com //, então o contexto inicial é a raíz.

36 Tópicos próximas aulas
XQuery XSLT

37 Referências Peter Wood, Slides on “Representing and Querying Data on the Web”, Dan Suciu, Slides on “The semistructured data model”, CSE 590ds: Management of XML and Semistructured Data, S. Abiteboul, P. Buneman, D. Suciu, “Data on the Web, From Relations to Semistructured Data and XML”, Morgan Kaufmann, 2000, (cap 4) Recomendação W3C do XPath Tutorial XPath


Carregar ppt "Linguagens de interrogação de dados XML XPath"

Apresentações semelhantes


Anúncios Google